打印
[STM32F0]

端口翻转速度怎么这么慢?

[复制链接]
666|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操作一个翻转要执行很多指令。

使用特权

评论回复
5
zhuomuniao110| | 2020-10-22 22:51 | 只看该作者
你可以试试用汇编操作。应该更快。while循环体本身就要消耗几个周期。

使用特权

评论回复
6
香水城| | 2020-10-23 09:48 | 只看该作者
本帖最后由 香水城 于 2020-10-23 09:51 编辑

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

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

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


如果你要验证GPIO可达到的输出速率,你可以通过定时器的PWM输出、或者跑跑SPI等方式来验证。

使用特权

评论回复
7
江枫渔火|  楼主 | 2020-10-23 22:41 | 只看该作者
香水城 发表于 2020-10-23 09:48
对于F0芯片,如果通过CPU运行GPIO翻转指令来实现翻转,印象中速率可以达到6MHz左右。

但这并代表GPIO本身 ...

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

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

使用特权

评论回复
8
和下土| | 2020-10-23 23:29 | 只看该作者
寄存器快一点,hal库很慢。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

6

主题

2111

帖子

9

粉丝