STM32CUBEMX_STM32F0_TIM17

用CUBEMX设置定时器,如果只用到溢出中断,设置非常简单,如下

下面接着设置定时器中断溢出周期:图中红框内即设置的两个重要参数

计算溢出周期的方法  T=((PSC+1)*(ARR+1))/系统主频(单位为秒)

比如此处溢出周期T=600*800/48000000=0.01s=10ms

生产代码后的设置为在stm32f0xx_hal_tim.c中找到函数void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim),此函数为定时器中断服务函数,包括

N多种定时器的中断(溢出中断、比较中断、输入捕获中断......),在此函数内找到处理溢出中断的代码行

  /* TIM Update event */
  if(__HAL_TIM_GET_FLAG(htim, TIM_FLAG_UPDATE) != RESET)
  {
    if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) !=RESET)
    {
      __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);
      HAL_TIM_PeriodElapsedCallback(htim);
    }
  }

在 HAL_TIM_PeriodElapsedCallback(htim)是回调函数   为__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)的原形,此处我们需要处理的是重新定义一个函数为 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim),在内编写其中断服务函数

/* USER CODE BEGIN 1 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{   
       if(htim == (&htim16))
       {
			 
       }
		
       if(htim == (&htim17))
       {
          tim17cnt ++;			 
	}	
}
/* USER CODE END 1 */

如果有N个定时器溢出中断,则需要判断是哪个定时器的溢出中断,然后做相应的处理,别忘了定义变量tim17cnt

最后需要在初始化阶段进行启动定时器的溢出中断

HAL_TIM_Base_Start_IT(&htim17);   
注意是带IT的,不是HAL_TIM_Base_Start(&htim17);

到这里定时器17就开始工作了,每10ms 会进入中断对tim17cnt进行+1。


 

猜你喜欢

转载自blog.csdn.net/liuxinyong236/article/details/75456874
今日推荐