[嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集
文章目录
- 一、定时器
- (1) 简介
- STM32定时器计算公式
- (2) 示例代码(基本定时功能)
- (3) 仿真效果 (基本定时功能)
- (4) 示例代码(PWM 呼吸灯)
- (5) 仿真效果 (PWM 呼吸灯)
一、定时器
(1) 简介
- 基本定时功能:1秒钟进入定时器中断干一件事,类似手机设置闹钟。
- 输入捕获功能:记录车轮滚动次数。
- 输出比较功能:生成精确的周期性信号或触发特定时序的操作
- PWM生成功能:用于控制电机速度、LED亮度调节,风扇风速调节等等。
- 编码器接口功能:旋转按钮、鼠标滚轮等等。
- 高级定时功能:实现更复杂的定时和PWM应用。
STM32定时器计算公式
先上公式:
Tout = ((arr+1)*(psc+1))/Tclk ;
其中:
Tclk:定时器的输入时钟频率(单位MHZ)
Tout:定时器溢出时间(单位为s)
例如:
TIM1_Init();
TIM_Period = arr; eg;9
TIM_Prescaler = psc; eg:7199
以STM32F103ZET6为例,其时钟工作频率为72MHZ,即:
Tout = ((9+1)×(7199+1))/72000000 = 0.001s = 1ms
(2) 示例代码(基本定时功能)
#include "sys.h"
#include "stm32f10x_conf.h"
#include "delay.h"
#include "led.h"
#include "usart.h"
#include "tim.h"
#include <stdint.h>
#include <stdio.h>uint32_t cnt = 0;
void TIM1_UP_IRQHandler(void) {cnt++;if (cnt >= 100000) { // 实际计数1000次,由于仿真时间不准确,所以这里写100000cnt = 0;LED = !LED;}
}int main() {// LED初始化LED_Init();//串口初始化uart_init(115200);// 初始化定时器1TIM1_Init();while(1) {}
}
(3) 仿真效果 (基本定时功能)
(4) 示例代码(PWM 呼吸灯)
todo
(5) 仿真效果 (PWM 呼吸灯)
todo