如题,由于案子需要用到高速的IO通信,还是特殊协议的那种,担心STM32F1和STM32F4 端口速度以及数据处理速度跟不上,就买了个STM32H7 的开发板,想试一下看看H7 的 IO 翻转速度有多快。
但结果有点出乎意料,用正点原子的例程,STM32H7 主频设置到400MHz,主循环里面就下面这样:
while(1)
{
GPIOB->ODR = 1;
GPIOB->ODR = 0;
}
IO 口示波器实测速度才 16.7MHz 左右;
然后,为了避免其他因素的干扰,我又尝试,直接把 HSI 8分频,也就是64MHz/8 = 8MHz 作为系统时钟,各路总线都不再分频,跑起来,IO 的翻转速度才670KHz 左右;
相对于 400MHz 的时候,HCLK 是系统时钟 二分频了的,也就是说总线时钟 200MHz,200MHz/8MHz * 670KHz = 16.75MHz,这个和之前的测试结果基本吻合。
网上一查,发现也有人和我遇到同样的问题,或者说是现象,但却没有寻找到有效的提高 IO 翻转速度的方法。
那么问题来了,STM32H7 这样的 IO 翻转速度表现,甚至远低于 STM23F4 的水准,这显然应该是不可能的,这里面肯定有哪里没有配置正确吧,我猜;
但是我用自己贫瘠的英语水平以及比较low的专业能力,翻看了好几天参考手册并尝试修改各种时钟配置,一直没有解决,不知道坛子里有没有遇到同样问题的人,或者有大神给指点迷津。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
对,所以,STM32H7 不可能IO翻转只能这么低速度,我现在甚至怀疑,特么核心工作频率是不是都没有设置的8MHz,那个sys_clk 后面的一坨东西是个啥,用户手册里面也没有特别详细的说明,也没有相关的寄存器来搞它
F7速度会快很多,优化等级2
嗯,既然这样,那只能放狗了,不过你肯定不是唯一一个遇到这个问题的,比如这位,当然也不是没有办法比如这位,不过最后也是瞎折腾的。而且看起来是ST的员工~果然还是官方的锅~
端口置1:
MOVS R0, #0x01 1个时钟周期
STR R0, [R1, #0x00] 2个时钟周期
端口置0:
MOVS R0, #0x00 1个时钟周期
STR R0, [R1, #0x00] 2个时钟周期
以上软件要翻转一次端口需要6个时钟周期。
而硬件翻转一次端口需要2个时钟周期:
捕获.PNG (548.71 KB, 下载次数: 0)
下载附件
1
2018-11-24 15:38 上传
所以,通过软件翻转一次端口至少需要 6 × 2 = 12 个时钟周期。
最后结果: 8MHz ÷ 12 ≈ 666.7kHz
这样看来貌似没有问题。
一周热门 更多>