野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4815|回复: 6

定时器分,1预装载值72,时钟72MHz,中断周期不应该是1um吗?

[复制链接]
发表于 2022-11-11 01:25:42 | 显示全部楼层 |阅读模式
我做了个实验,定时器分频设1(输入的0),预装载值72(输入的71),时钟设定72MHz。根据时钟溢出周期公式Tout=(arr+1)*(psc+1)/时钟频率,时钟中断周期应为72*1/72MHz,0.000001s,即1um。1um的跳变GPIO是扛不住的,所以我让时钟每隔1000次周期翻转一次GPIO,并用示波器测量。按预期,应该是每隔1ms电平变化一次。然而现实是,每隔5ms电平变化一次,也就是说1000次时钟周期等于5ms,则每个周期是5us。这让我开始怀疑自己不会算数了,或者我对公式理解有误?

求大神解答疑惑
2222.jpg 野火论坛202211110119528206..png
回复

使用道具 举报

发表于 2022-11-11 09:16:51 | 显示全部楼层
1us进一次中断,你确定单片机跑的过来?你以为进中断退中断不要时间成本的吗?
回复 支持 反对

使用道具 举报

发表于 2022-11-11 09:18:32 | 显示全部楼层
1.定时器确实是1us计数,不过确实1us的中断确实没啥意思,直接全部程序卡在中断里面了。定时器1us计数,计数一千次申请一次中断,此时的溢出率就是1000次每秒,也就是毫秒一次。程序一毫秒进来一次中断,执行中断程序
2.为什么1ms会是5ms,首先调用库和直接操作寄存器是有时间差异的,我朋友做过测试48M的频率跑完一条GPIO_ResetBits大概300-400ns之间,直接操作寄存器时长缩小一半。
3.总的来说,中断也是一段程序,进了中断不代表里面程序立马执行完了,这些都是要时间的。单片机执行程序是把存在falsh的代码读取执行的,这些都是要时间的,一条C可能要几步汇编执行,何况还取码译码等.
4.楼主可以验证一下,估计你上面的语句耗时主要在UART_Transmit里面,你倒是可以注释一下验证一下。
回复 支持 1 反对 0

使用道具 举报

发表于 2022-11-11 09:29:05 | 显示全部楼层
weinizhongqing 发表于 2022-11-11 09:18
1.定时器确实是1us计数,不过确实1us的中断确实没啥意思,直接全部程序卡在中断里面了。定时器1us计数,计 ...

进出中断都是调用cpu的寄存器来保存一些数据后面出来中断恢复执行(现场保护和恢复现场(这些都是执行语句都要时间成本)),1us的中断单片机跑不过来的,不如把计数频率拉低,1ms记一次直接申请中断就好了,做一下测试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-11 09:59:57 | 显示全部楼层
weinizhongqing 发表于 2022-11-11 09:18
1.定时器确实是1us计数,不过确实1us的中断确实没啥意思,直接全部程序卡在中断里面了。定时器1us计数,计 ...

有道理!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-11 10:01:33 | 显示全部楼层
weinizhongqing 发表于 2022-11-11 09:29
进出中断都是调用cpu的寄存器来保存一些数据后面出来中断恢复执行(现场保护和恢复现场(这些都是执行语句 ...

我本意是想试试做个微秒级的计时用于测距的,这下看来精度是够呛了
回复 支持 反对

使用道具 举报

发表于 2022-11-11 14:23:53 | 显示全部楼层
秦雨平 发表于 2022-11-11 10:01
我本意是想试试做个微秒级的计时用于测距的,这下看来精度是够呛了

从头构思一下,网上找找思路。你就算微妙测距你拿什么显示出来,不可能用示波器来显示吧,做产品最多的就是显示屏,显示屏刷新频率也是要多加考量的。
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-1 10:45 , Processed in 0.032963 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表