一.CubeMx配置
1.配置好RCC时钟以及时钟树......等等
2.配置定时器
Tout = ((arr+1)*(psc+1))/Tclk ;
其中:
Tclk:定时器的输入时钟频率(单位MHZ)
Tout:定时器溢出时间(单位为us)
.TIM_Period = arr; eg;4999
.TIM_Prescaler = psc; eg:7199
Tout = ((4999+1)×(7199+1))/72 = 500000us = 500ms 。
如要定时1ms,Tclk已知为72Mhz,设置psc为719,arr为99,即可产生1ms中断。
二.生成代码,打开工程
1.在主函数初始化中开启定时器中断
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim3);//开启定时器3中断
/* USER CODE END 2 */
2.使用中断回调函数
与标准库不同,我们一般需要在中断回调函数中判断中断来源并执行相应的用户操作。
该函数为弱函数,可在其他地方声明,弱函数在调用时会优先进入用户声明的函数。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
在工程文件中添加以下代码即可观察LED以500ms为周期闪烁
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == htim3.Instance)
{
static int16_t tim_delay = 0;
if(++tim_delay>=500) // 1ms * 500 = 500ms
{
tim_delay = 0;
HAL_GPIO_TogglePin(LEDD_GPIO_Port, LEDD_Pin);
}
}
}