查看: 3603|回复: 0

一个与STM32 GPIO输出速率有关的话题

[复制链接]
发表于 2016-10-13 16:28:02 | 显示全部楼层 |阅读模式
对于STM32芯片,其GPIO输出可以根据不同的应用需求而灵活选择不同档次的输出速率。一般分为低、中、高或者很高几个档次,具体速率视不同的STM32芯片而定。

不妨以STM32F407为例,它分四个输出档次,具体的数值范围参考芯片数据手册的I/O的交流特性部分。
1.webp.jpg
2.webp.jpg
这个输出速率主要体现I/O驱动电路的输出反应能力,通过选择不同的输出驱动速率,实现最佳的噪声与和功耗控制。不难理解,选择输出驱动速率越高,噪声也越大,相应的芯片功耗也会越大。所以对于这个输出频率的选择,不要太随意,合适就好。在满足应用的需求的前提下,就不要随意往高端速率选择。

这里说几个简单的应用案例,以加深印象和理解。

1、LED闪烁快慢不一致
某客户使用STM32F4芯片做产品开发,其中用到 while( count++ > 0xffffff) 做软件delay,然后让LED闪烁。相关代码甚为简单,却发现产品的一致性不好,LED 闪烁有的快有的慢。
反复排查代码原因,未发现程序逻辑错误。后来尝试将LED 驱动脚的Output Speed设置从very high调整为 low 后一切正常。

2、Audio 噪声
某客户使用STM32芯片做产品开发。其中有I2S的音频播放功能。客户在调试时用到Printf串口打印,发现使用printf输出时会出现噪音,如果关闭printf则正常。
后来,反复查看代码,直到将UART的TX输出端口的管脚输出速率由very high改为Low后噪声消失。

3、SPI通信异常
有人使用STM32芯片开发产品,其中用到SPI通信。STM32做主,其它外围器件做从,有时发现SPI读取数据总是出错。
对于这里的通信出错,如果SPI通信端口脚的输出速率选择跟实际通信速率不合适的话也会出现。相比实际速率需求,过高或过低了都会导致通信出错。

好,抛砖引玉似地罗列上面几个案例。这里顺便聊下跟GPIO输出速率有关的I/O补偿单元。

目前STM32家族的9大系列里面,其中高性能的STM32F2/STM32F4/STM32F7系列的芯片,都带有GPIO补偿单元。
3.jpg
该补偿单元的功能就是对GPIO的输出摆率进行合理控制以降低I/O噪声和功耗。当你在产品开发中需要配置50M或更高的输出速率时,强烈建议开启该补偿单元。

总之,对于STM32 GPIO输出速率的选择问题,我们在开发应用中应多加注意。如果因为这个输出速率选择导致麻烦,原因往往比较隐晦,很难直接从代码语句或程序逻辑上找到突破。在满足实际应用需求的前提下,速率就低不就高,这对降低功耗、减少噪声、改善EMI都有好处。当然,如果选择过低于实际需求的输出速率也不可取,那样会导致输出失真、通信异常等问题,自然也违背了ST设计多档位输出速率的初衷。





文章来源:微信公众号  融创芯城(一站式电子元器件、PCB、PCBA购买服务平台,电子项目众包平台)

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表