STM32/STM8技术william hill官网
直播中

dvd1478

11年用户 586经验值
擅长:可编程逻辑 电源/新能源 MEMS/传感技术 测量仪表 嵌入式技术 制造/封装 模拟技术 连接器 EMC/EMI设计 光电显示 存储技术 EDA/IC设计 处理器/DSP 接口/总线/驱动 控制/MCU RF/无线
私信 关注
[经验]

【阿波罗STM32F767试用体验】TIM的设置

定时器很丰富,主要在以下章节
1.png
对应STM32CubeMx
6.png
其设置也是相对简单
7.png
9.png

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

定时器多,时钟源也是多的,主要以下
2.png 3.png 4.png 5.png

溢出方式
8.png
可以推出定时器溢出时间计算方法: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. }












更多回帖

发帖
×
20
完善资料,
赚取积分