&拾玖 2024-04-18 10:15 采纳率: 33.3%
浏览 588
已结题

stm32基本定时器问题,计时时间不准确

stm32基本定时器问题,计时时间不准确
各位,下面参照野火例程计算的1us中断一次的计算有问题吗?
按0.5s时间设置time,测试的时候led亮灭效果不一样,是哪里计算有问题吗

基本定时器
CLK = TIMxCLK/(PSC+1)
T = 1/CLK * (ARR+1) * time

CLK = 72MHz/(71+1) = 1MHz
T = 1/1MHz *(1000-1+1) *time = time 1ms中断一次,

CLK = 72MHz/(35+1) = 2MHz
T = 1/2MHz *(2-1+1) *time = time 1us中断一次

  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-04-18 10:31
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    根据你提供的描述,问题出在定时器的配置上,导致计时时间不准确。你的配置中,基本定时器的时钟频率计算有误,所以导致了计时时间不准确的情况。
    根据你的描述,基本定时器的时钟频率(CLK)应该是这样计算的:
    CLK=TIMxCLK(PSC+1)\text{CLK} = \frac{\text{TIMxCLK}}{\text{(PSC} +
    1)}CLK=(PSC+1)TIMxCLK​
    其中,TIMxCLK\text{TIMxCLK}TIMxCLK 是定时器时钟源的频率,PSC\text{PSC}PSC
    是预分频器的值。在你的情况下,TIMxCLK\text{TIMxCLK}TIMxCLK 是 72 MHz72 \text{ MHz}72 MHz,但是
    PSC\text{PSC}PSC 的值分别是 717171 和 353535,这是不正确的。
    对于基本定时器,PSC\text{PSC}PSC 的值应该是使得定时器时钟的频率刚好达到或略大于你所期望的中断频率所对应的值。在你的情况下,你想要的是 1
    us1 \text{ us}1 us 中断一次,所以应该设置 PSC\text{PSC}PSC 的值使得定时器时钟频率为 1 MHz1 \text{
    MHz}1 MHz。而 72 MHz72 \text{ MHz}72 MHz 的系统时钟除以 727272 可以得到 1 MHz1 \text{ MHz}1
    MHz,所以应该设置 PSC=71\text{PSC} = 71PSC=71,而不是 71+171 + 171+1。
    同样地,对于 1 ms1 \text{ ms}1 ms 中断一次的情况,你需要将 PSC\text{PSC}PSC 设置为多少呢?应该是 72 MHz72
    \text{ MHz}72 MHz 的系统时钟除以多少能得到 1 ms1 \text{ ms}1 ms 的频率。也就是说,PSC=71\text{PSC}
    = 71PSC=71 是正确的,而不是 353535。
    所以,你的定时器配置应该是这样的:

    1. 对于 1 us1 \text{ us}1 us 中断一次:
      PSC=71, ARR=1, time=0.5 s\text{PSC} = 71, \text{ ARR} = 1, \text{ time} = 0.5
      \text{ s}PSC=71, ARR=1, time=0.5 s
    2. 对于 1 ms1 \text{ ms}1 ms 中断一次:
      PSC=71, ARR=999, time=0.5 s\text{PSC} = 71, \text{ ARR} = 999, \text{ time} =
    3. 5 \text{ s}PSC=71, ARR=999, time=0.5 s
      根据你的描述,你的计算还涉及到了 ARR 的值,这个值也应该根据你所期望的中断频率来计算。以上是基于你的描述和问题的分析,希望对你有所帮助。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月23日
  • 创建了问题 4月18日