2020-02-01 16:19发布
xinfa190 发表于 2013-1-17 20:46 stc 1T 系列,22.1184M晶振,全速翻转,C语言,试过,大约1.2MHz
takashiki 发表于 2013-1-17 21:28 这个,这个,和理论计算相差非常巨大啊…… 这个程序,估计是使用指令翻转最快的了(不考虑时钟输出和PC ...
xinfa190 发表于 2013-1-18 10:03 不知道你的代码是不是最快的,我是这么写的 sbit clk=P1^0; main()
最多设置5个标签!
这个,这个,和理论计算相差非常巨大啊……
这个程序,估计是使用指令翻转最快的了(不考虑时钟输出和PCA):
- CY=1;
- P1_0 = 0; // CLR P1.0,4个时钟周期
- P1_0 = CY; // MOV P1.0, C,3个时钟周期
- P1_0 = 0;
- P1_1 = CY;
- ...
复制代码计算得到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。不知道实际和理论之间到底有多少差距。
不知道你的代码是不是最快的,我是这么写的
sbit clk=P1^0;
main()
{
while(1)
{
clk=~clk;
}
}
直接翻转IO就不要想了,stm32系列ARM,72MHz主频,类似上面的代码,不到2.5MHZ
嗯,我知道了,你这个的确不是最快的,看来STC官方手册还是没错的。
因为clk=~clk;并不是占用时间最短的指令(4个周期,clk=~clk, clk=1, clk=0都是4个周期,但是clk=CY只要三个周期),while在这里占用了大量的时间,因为需要进行跳转。
测试最大IO速度时一定不能打断程序固有的流程,否则就人为的降低了速度。
72M的STM32是可以达到18MHz的,我测试过,不管是直接对ODR赋值,还是对BSRR赋值,还是通过位带方式,都是18MHz。
一周热门 更多>