[STM32F0] 端口翻转速度怎么这么慢?

[复制链接]
940|7
 楼主| 江枫渔火 发表于 2020-10-20 18:06 | 显示全部楼层 |阅读模式
很久没来21ic逛逛了

最近用着一个芯片是STM32F091,测试发现端口速度奇慢。

工具MDK5编译,示波器测试

主时钟使用内部48MHz

基于STM CubeMX 工具生成的工程框架,初始化PIN脚为GPIO功能,推挽,不上下拉,最高速(50MHz),直接在while循环里进行pin脚翻转。

使用HAL库控制pin时,大概获得900KHz的速度
直接操作寄存器时,大概获得3MHz左右的速度

以前没太关注过,没想到这么慢!!!是不是我存在认知误区。。。,我大概认为主频几十兆,端口随便也应该有几兆吧,还是我打开方式不对??

各位大佬,这时真的吗?



 楼主| 江枫渔火 发表于 2020-10-21 20:59 | 显示全部楼层
是真的。
yizushijie 发表于 2020-10-22 09:42 | 显示全部楼层
用寄存器会快一点,hal库很慢的。寄存器操作要多写几次翻转语句,否则会因为while循环,导致达不到目的速度。楼主说主频48M,端口时钟应该是24MHz,翻转20M应该是能够做到的
zhuomuniao110 发表于 2020-10-22 22:50 | 显示全部楼层
3M可以了,HAL操作一个翻转要执行很多指令。
zhuomuniao110 发表于 2020-10-22 22:51 | 显示全部楼层
你可以试试用汇编操作。应该更快。while循环体本身就要消耗几个周期。
香水城 发表于 2020-10-23 09:48 | 显示全部楼层
本帖最后由 香水城 于 2020-10-23 09:51 编辑

对于F0芯片,如果通过CPU运行GPIO翻转指令来实现翻转,印象中速率可以达到6MHz左右。

但这并代表GPIO本身可实现的最高翻转速率。 就像一个马达的标准转速为1500r/m,你用看似强健的手去

转动它,或许每分钟200转都不错了,然后你说,哇 这马达的输出转速怎么这么低?!


如果你要验证GPIO可达到的输出速率,你可以通过定时器的PWM输出、或者跑跑SPI等方式来验证。
 楼主| 江枫渔火 发表于 2020-10-23 22:41 | 显示全部楼层
香水城 发表于 2020-10-23 09:48
对于F0芯片,如果通过CPU运行GPIO翻转指令来实现翻转,印象中速率可以达到6MHz左右。

但这并代表GPIO本身 ...

因为要用IO操作方式模拟SPI通信,目前用寄存器操作方式,也就一两兆。优化优化,应该也很难达到6兆。用HAL函数只有几百K。

不过用片内外设,是可以几十兆的。

和下土 发表于 2020-10-23 23:29 | 显示全部楼层
寄存器快一点,hal库很慢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:本人求职:求什么の,算求~ |  深圳 &  广州 | 大哥大号 :13267O9O8OO

6

主题

2109

帖子

9

粉丝
快速回复 在线客服 返回列表 返回顶部