• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

正点原子stm32f407开发板定时器定时时间计算公式问题

我是假管 2018-11-21 浏览量:2256

正点原子stm32f407开发板定时器定时时间计算公式为:

Tout = ((arr+1)* (psc+1))/ Tclk

其中arr是重装载寄存器的值,psc是分频寄存器的值,Tclk是定时器的工作频率。利用该公式实际计算验证过,证明这个公式是没错的。但是有两点不明白:

第一:不明白为什么计算的时候要arr和psc的值加1?

第二:正点原子的程序中在初始化定时器时传入TIMx->ARR和TIMx->PSC的值在形参处都减1,为什么要这样写?既然传递的之前减一,计算的时候又要加1?为什么要这样呢?

QQ截图20181121142738.jpg

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 这是个好问题,我一直这么理解的,寄存器的值从0开始计数的,写个8399相当于8400,不知道对不对。  我也刚学到定时器这一块儿,用的也是原子的视频,
    • 发布于 2018-11-22
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:8
  • 以PSC来说吧,参考手册里有写

    QQ图片20181121145425.png

    所以,真实的频率是填写数据+1。为什么设计上要求加1,真没深入研究过。

    第二个问题:形参处-1完全是为了方便程序员阅读。

    • 发布于2018-11-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 原因是因为,分频这玩意就是这么定义的,计数则是一般为溢出触发,而不是到达触发
    • 发布于2018-11-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个+1是寄存器内部的要求,实质就是不能让Tout设置为0
    • 发布于2018-12-02
    • 举报
    • 评论 0
    • 0
    • 0

  • 因为实际的硬件是从0开始的,所以要加一
    • 发布于2018-12-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 比如我要8400分频,那个写入寄存器值只能是8399,所以在初始化函数需要8400-1得到8399后写入寄存器,最终得到分频效果是8400
    • 发布于2018-11-21
    • 举报
    • 评论 0
    • -1
    • 0

  • 因为传入的值是8399,其实分频实际是8400分频。所以算的时候用8400,给寄存器赋值的时候用8399.
    • 发布于2018-11-21
    • 举报
    • 评论 0
    • -1
    • 0

相关问题

问题达人换一批

正点原子stm32f407开发板定时器定时时间计算公式问题