使用STM32定时器中断实现定时闪烁指示灯的学习记录

任务:定时闪烁指示灯

任务目标:掌握 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 */

运行结果

将程序编译链接,生成可执行代码,通过 ST-Link 仿真器下载到开发板上。可以观察到: 指示灯LED的状态每隔 1s 翻转一次。

物联沃分享整理
物联沃-IOTWORD物联网 » 使用STM32定时器中断实现定时闪烁指示灯的学习记录

发表评论