51IO翻转速率最大能到多少?

2020-02-01 16:19发布

如果超出了范围会出现什么现象?我的实验是IO处在高电平。请大侠指教指教
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
NJ8888
1楼-- · 2020-02-01 17:44
如何超出?
xinfa190
2楼-- · 2020-02-01 19:35
stc 1T 系列,22.1184M晶振,全速翻转,C语言,试过,大约1.2MHz
takashiki
3楼-- · 2020-02-01 20:15
xinfa190 发表于 2013-1-17 20:46
stc 1T 系列,22.1184M晶振,全速翻转,C语言,试过,大约1.2MHz

这个,这个,和理论计算相差非常巨大啊……

这个程序,估计是使用指令翻转最快的了(不考虑时钟输出和PCA):
  1. CY=1;
  2. P1_0 = 0;                  // CLR P1.0,4个时钟周期
  3. P1_0 = CY;                // MOV P1.0, C,3个时钟周期
  4. P1_0 = 0;
  5. P1_1 = CY;
  6. ...
复制代码计算得到22.1184M晶振时翻转速率为22.1184/(4+3) = 3.16MHz,差别巨大啊

PCA高速脉冲输出模式中,f =  Fosc / (4 * CCAPnL_Value )
则fmax = 22.1184 / 4 = 5.5296MHz

T0、T1的时钟输出模式中:按1T模式,输出频率 = SysClk / (256 - TH0) / 2
fmax = 22.1184 / 1 / 2 = 11.0592MHz

BTW:以上结果均未经过实际验证,仅仅是理论计算,因为我不用STC。不知道实际和理论之间到底有多少差距。
wx85105157
4楼-- · 2020-02-01 23:00
 精彩回答 2  元偷偷看……
xinfa190
5楼-- · 2020-02-02 00:37
takashiki 发表于 2013-1-17 21:28
这个,这个,和理论计算相差非常巨大啊……

这个程序,估计是使用指令翻转最快的了(不考虑时钟输出和PC ...

不知道你的代码是不是最快的,我是这么写的
sbit  clk=P1^0;
main()
{
while(1)
{
clk=~clk;
}
}
直接翻转IO就不要想了,stm32系列ARM,72MHz主频,类似上面的代码,不到2.5MHZ
takashiki
6楼-- · 2020-02-02 05:09
xinfa190 发表于 2013-1-18 10:03
不知道你的代码是不是最快的,我是这么写的
sbit  clk=P1^0;
main()


嗯,我知道了,你这个的确不是最快的,看来STC官方手册还是没错的。
因为clk=~clk;并不是占用时间最短的指令(4个周期,clk=~clk, clk=1, clk=0都是4个周期,但是clk=CY只要三个周期),while在这里占用了大量的时间,因为需要进行跳转。
测试最大IO速度时一定不能打断程序固有的流程,否则就人为的降低了速度。

72M的STM32是可以达到18MHz的,我测试过,不管是直接对ODR赋值,还是对BSRR赋值,还是通过位带方式,都是18MHz。

一周热门 更多>