微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > TIM的设置

TIM的设置

时间:10-02 整理:3721RD 点击:
定时器很丰富,主要在以下章节


对应STM32CubeMx


其设置也是相对简单



不过我感觉在这里的设置就不够人性化,一个时钟源,一个溢出方式这两个至少要查看资料,为什么不直接给个要设定的计数周期,然后就自动算出来
定时器多,时钟源也是多的,主要以下





溢出方式


可以推出定时器溢出时间计算方法:Tout=((Counter Period +1)*(Prescaler+1))/(Ft/Internal Clock Division) us.
生成代码后,注意添加中断函数

  1. /**
  2. * @brief This function handles TIM3 global interrupt.
  3. */
  4. void TIM3_IRQHandler(void)
  5. {
  6.   /* USER CODE BEGIN TIM3_IRQn 0 */

  7.   /* USER CODE END TIM3_IRQn 0 */
  8.   HAL_TIM_IRQHandler(&htim3);
  9.   /* USER CODE BEGIN TIM3_IRQn 1 */

  10.   /* USER CODE END TIM3_IRQn 1 */
  11. }

  12. /**
  13. * @brief This function handles TIM4 global interrupt.
  14. */
  15. void TIM4_IRQHandler(void)
  16. {
  17.   /* USER CODE BEGIN TIM4_IRQn 0 */

  18.   /* USER CODE END TIM4_IRQn 0 */
  19.   HAL_TIM_IRQHandler(&htim4);
  20.   /* USER CODE BEGIN TIM4_IRQn 1 */

  21.   /* USER CODE END TIM4_IRQn 1 */
  22. }

复制代码


但它们最终时通过调用回调函数来实现的,所以添加以下代码即可:

  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  2. {
  3.     extern __IO int32_t OS_TimeMS; //GUI_X.c
  4.     if(htim==(&htim3))
  5.     {//定时器3中断服务函数调用
  6.         OS_TimeMS++;
  7.     }
  8.     else if(htim==(&htim4))
  9.     {//定时器4中断服务函数调用
  10.         GUI_TOUCH_Exec();
  11.     }
  12. }

复制代码


设置好了,但并不是定时器就能运行,还需要以下的代码

  1. void HAL_TIM_Start(void)
  2. {
  3.     HAL_TIM_Base_Start_IT(&htim3);
  4.     HAL_TIM_Base_Start_IT(&htim4);

  5. }

复制代码







Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top