五、定时器(输入捕获)参数配置
我将 TIM2 的通道 1 作为输入捕获测试通道,STM32CubeMX 会默认配置 PA0 作为输入捕获的 IO 口(PA0 有该复用功能,且不需要重映像,所以自动将 PA0 设为 TIM_CH1 的 GPIO),定时器的参数设定如下图所示(输入捕获的配置可以不用改,默认捕获上升沿):
分频系数为 72-1,意思就是 72 分频(0表示 1 分频,1 表示 2 分频,以此类推),TIM2 的时钟频率为 72 MHz(下图中,APB1 Timer clocks 的时钟频率为 72MHz,TIM2 挂载在 APB1 上)。将其进行 72 分频后,频率变成了 1MHz,即每秒计数 1000000 次。周期设置为 1000-1(这里要减一,应该是因为计数值最小为 0),代表着一个完整的计时周期为 1000 次计数,结合定时器计数频率,定时器一次计时溢出所需的时间为 1ms。【频率决定了输入捕获的捕获周期,计时值设为 1000 只是为了方便计算】
输入捕获需要开启定时器的中断,无论是计时溢出还是输入捕获都需要使用到中断。
六、生成 Keil 工程
设置 IDE 和 工程目录及名称:
将每种外设的代码存放到不同的 .c /.h 文件中,便于管理(不然都会被放到 main.c 中)。
下面是生成 Keil 工程中关于 TIM2(输入捕获)初始化的代码:
/\* TIM2 init function \*/
void MX\_TIM2\_Init(void)
{
/\* USER CODE BEGIN TIM2\_Init 0 \*/
/\* USER CODE END TIM2\_Init 0 \*/
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_IC_InitTypeDef sConfigIC = {0};
/\* USER CODE BEGIN TIM2\_Init 1 \*/
/\* USER CODE END TIM2\_Init 1 \*/
htim2.Instance = TIM2;
htim2.Init.Prescaler = 72 - 1;
htim2.Init.CounterMode = TI