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

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条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-18 10:15
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试设置STM32的基本定时器(TIM)以实现精确的时间间隔中断,但是遇到了计时不准确的问题。首先,我会帮你分析一下你的计算过程,然后提供一个可能的解决方案。

    根据你的描述,你使用的STM32的系统时钟(SYSCLK)为72MHz。你有两个配置:

    1. PSC(预分频系数)= 71,ARR(自动重装载寄存器值)= 1000 - 1 + 1 = 1000
    2. PSC = 35,ARR = 2 - 1 + 1 = 2

    对于这两个配置,我们先确认一下基本定时器的工作原理。定时器的工作流程如下:

    1. 系统时钟 SYSCLK 被分频后得到 TIMxCLK。
    2. TIMxCLK 决定了每个脉冲的频率,这个频率乘以 ARR 的值就得到了定时器的周期 T。
    3. 当定时器计数到达 ARR 值时,它会复位并开始新的计数周期。

    在你的例子中,你想要的是1ms和1us的中断间隔。下面是按照你的配置计算的中断时间:

    1. 对于 PSC = 71, ARR = 1000:

      TIMxCLK = SYSCLK / (PSC + 1) = 72MHz / 72 = 1MHz
      T = 1/TIMxCLK * (ARR + 1) = 1/1MHz * 1001 ≈ 1μs
      

      这意味着实际的中断周期大约是1μs,而不是你期望的1ms。要达到1ms中断,你需要调整 ARR 值。

    2. 对于 PSC = 35, ARR = 2:

      TIMxCLK = SYSCLK / (PSC + 1) = 72MHz / 36 = 2MHz
      T = 1/TIMxCLK * (ARR + 1) = 1/2MHz * 3 ≈ 166ns
      

      同样,这并不是1us,而是约166ns。

    解决方案:

    为了实现1ms和1us的中断间隔,你需要重新计算 PSC 和 ARR 的值。由于 STM32 的最大 ARR 值通常是 65535,所以对于1ms的中断,我们可以选择较小的 PSC 值,例如 PSC = 1,这样可以确保 ARR 在可接受范围内。

    对于1ms的中断:

    TIMxCLK = SYSCLK / (PSC + 1) = 72MHz / 2 = 36MHz
    ARR = 1ms / (1/TIMxCLK) - 1 = 1ms / (1/36MHz) - 1 ≈ 28421
    

    这里取整后的 ARR 值应为 28421。

    对于1us的中断,由于 1us 是非常短的时间,可能需要更高的系统时钟或者更复杂的计数方法(比如使用捕获比较单元)。如果你的系统时钟足够高,例如 180MHz 或更高,那么可以选择 PSC = 1,并尝试找到合适的 ARR 值。

    不过,在实际应用中,1us级别的中断间隔可能会受到硬件限制、中断处理时间以及系统负载的影响。你可能需要考虑是否真的需要如此高的精度,或者是否有其他方法(如软件延时)来替代硬中断。

    如果你需要具体的 C 语言代码示例来配置这些定时器,我可以提供。你也可以告诉我你具体使用的STM32型号,以便我为你提供更详细的库函数调用代码。

    评论 编辑记录

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?