任务:定时闪烁指示灯
任务目标:掌握 CubeMX 软件配置定时器实现定时功能的方法。
任务内容:控制开发板上的指示灯LED每隔1s闪烁。
任务实现:
使用的STM32芯片是STM32F407ZET6
第一步:设置高速时钟,设置LED
第二步:配置TIM10时钟为100MHz,故可以设置预分频系数PSC为9999,自动重载值系数ARR为9999,这样定时时间刚好为1s。
注意: 预分频系数 PSC 和自动重载值 ARR 的取值,以不超过它们的计数范围为准TIMx_PSC为16位寄存器,PSC的最大值为65 535。ARR 的值由定时器的位数决定:对于16位定时器,ARR的最大值为 65 535;对于32位定时器,ARR 的最大值为232-1=4 294 967 295。
查阅STM32F407手册知道,TIM10挂在APB2总线上。
第三步:切换到NVIC标签页,使能TIM10的全局中断。
注意:定时器 10的全局中断和定时器 1 的更新中断共享同一个中断通道。
第四步:不设置中断优先级,而是使用默认的中断优先级。
第五步:生成代码。
配置代码:
生成MDK工程后,进行应用程序的编写。CubeMX 软件将自动生成定时器10的句柄htim10,以及初始化函数MX_TIM10_Init()。完成定时器10的初始化之后,调用定时器中断方式启动函数HAL_TIM_Base_Start_IT()使能定时器10的更新中断并启动定时器运行。在主程序的 while(1)循环中不进行任何操作,指示灯的闪烁任务由更新中断回调函数完成。
以中断方式使能定时器10的更新中断并启动定时器运行。
用来清除更新中断标志,避免定时器一启动就进入更新中断
/* USER CODE BEGIN 2 */
// 清除更新中断标志,避免定时器一启动就进人更新中断
__HAL_TIM_CLEAR_IT(&htim10,TIM_IT_UPDATE);
HAL_TIM_Base_Start_IT(&htim10); //在中断方式下启动定时器 10
/* USER CODE END 2 */
中断回调:
/* USER CODE BEGIN 4 */
/**
* @brief Period elapsed callback in non-blocking mode
* @param htim TIM handle
* @retval None
*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
/* Prevent unused argument(s) compilation warning */
if(htim -> Instance ==TIM10) //判断发生更新中断的定时器
{
HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_9);
}
/* NOTE : This function should not be modified, when the callback is needed,
the HAL_TIM_PeriodElapsedCallback could be implemented in the user file
*/
}
/* USER CODE END 4 */
运行结果文章来源:https://www.toymoban.com/news/detail-755254.html
将程序编译链接,生成可执行代码,通过 ST-Link 仿真器下载到开发板上。可以观察到: 指示灯LED的状态每隔 1s 翻转一次。文章来源地址https://www.toymoban.com/news/detail-755254.html
到了这里,关于【学习记录】STM32利用定时器中断实现定时闪烁指示灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!