赞
踩
本章通过STM32CUBEIDE配置STM32F407的定时器中断
本文选用的定时器为高级定时器TIM1,可生成上溢中断、下溢中断,其内部定时器原理如下图所示
其生成PWM波最主要的模块为其时基单元,时基单元主要包括:计数器寄存器 (TIMx_CNT)、预分频器寄存器 (TIMx_PSC)、自动重载寄存器 (TIMx_ARR)、重复计数器寄存器 (TIMx_RCR)。
预分频器可对计数器时钟频率进行分频,分频系数介于 1 和 65536 之间。
在递增计数模式下,计数器从 0 计数到自动重载值(TIMx_ARR 寄存器的内容),然后重新
从 0 开始计数并生成计数器上溢事件。如下图所示
在递减计数模式下,计数器从自动重载值(TIMx_ARR 寄存器的内容)开始递减计数到 0,
然后重新从自动重载值开始计数并生成计数器下溢事件。如下图所示
在中心对齐模式下,计数器从 0 开始计数到自动重载值(TIMx_ARR 寄存器的内容)— 1,
生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从
0 开始重新计数。
将通道配置为输出模 式时,其输出比较中断标志将在以下模式下置 1,即:计数器递减计数(中心对齐模式 1, CMS =“01”)、计数器递增计数(中心对齐模式 2,CMS =“10”)以及计数器递增/递 减计数(中心对齐模式 3,CMS =“11”)。
在中心对齐模式下,如果 RCR 值为奇数,更新事件将在上溢或下溢时发生,这取决于何时
写入 RCR 寄存器以及何时启动计数器。如果在启动计数器前写入 RCR,则 UEV 在上溢时
发生。如果在启动计数器后写入 RCR,则 UEV 在下溢时发生。例如,如果 RCR = 3,UEV
将在每个周期的第四个上溢或下溢事件时生成(取决于何时写入 RCR)。
中断频率 f=定时器时钟频率/(PSC+1)*(ARR+1)
上溢/下溢中断:中断频率=f(RCR=0)
中心对齐模式1:中断频率=f(RCR=0)
定时器1对应的时钟为168M,故中断频率为20k。
生成代码如下所示,
void TIM1_UP_TIM10_IRQHandler(void)
{
/* USER CODE BEGIN TIM1_UP_TIM10_IRQn 0 */
/* USER CODE END TIM1_UP_TIM10_IRQn 0 */
HAL_TIM_IRQHandler(&htim1);
/* USER CODE BEGIN TIM1_UP_TIM10_IRQn 1 */
}
在main.c文件里进行初始化以及中断开启函数使能
MX_TIM1_Init();
HAL_TIM_Base_Start_IT(&htim1);
需要注意的是控制算法需在定时器中断回调函数里进行编写
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim == (&htim1))
{
//中断函数编写
}
}
采用GPIO口输出翻转模式来测量中断频率是否正确
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim == (&htim1))
{
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_4);
}
}
可以看到,其频率为10k,因为是在每次上升沿和下降沿的时候发生中断,故中断频率为20k,绿色波形为PWM波,其频率为10k,后续会讲到。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。