ST意法半导体
直播中

王萍

8年用户 1376经验值
私信 关注
[问答]

STM32F103如何将定时器配置为在32位捕获模式下工作?

在我的项目中,两个 16 位定时器链接在一起以实现 32 位捕获分辨率。tiM3 作为主定时器,TIM4 作为从定时器,由 TIM3 溢出事件提供时钟(TIM4 工作在外部时钟模式 1)。捕获信号连接到两个定时器输入(TIM3 的 CH2 和 TIM4 的 CH1)。主定时器以 36Mhz (72Mhz / 2) 运行。
捕获的数据在 TIM3(主)捕获中断中处理。
中断看起来像:
  • uint32_t period_ticks = 0;
  • uint16_t ccr_msb = TIM4.CCR1;
  • uint16_t ccr_lsb = TIM3.CCR2;
  • uint32_t ticks = (ccr_msb<<16) + ccr_lsb;
  • period_ticks = ticks - pre_tick_count;
  • pre_tick_count = ticks; // pre_tick_count is static

大多数情况下,此代码按预期工作,但当 ccr_lsb(主定时器捕获值)== 0 时会出现问题,而 ccr_msb(从定时器捕获值)比预期小 1,并且 period_ticks 变得比预期小 65535。当捕获事件与从定时器溢出事件同时发生时,看起来像是一些同步问题。丑陋的解决方法,如
  • if (ccr_lsb == 0) ccr_msb++;
有助于解决这个问题。在没有此类变通办法的情况下,是否有正确的方法将定时器配置为在 32 位捕获模式下工作。







回帖(1)

李雨晨

2023-2-7 09:37:05
是的,主从连接有延时,ST没有说明。我想,如果定时器在不同的 APB 总线上并且这些总线会以不同的频率运行,延迟可能不同于 1。但这不是你的情况。
举报

更多回帖

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