对于STM32芯片,其GPIO输出可以根据不同的应用需求而灵活选择不同档次的输出速率。一般分为低、中、高或者很高几个档次,具体速率视不同的STM32芯片而定。
不妨以STM32F407为例,它分四个输出档次,具体的数值范围参考芯片数据手册的I/O的交流特性部分。
这个输出速率主要体现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补偿单元。
该补偿单元的功能就是对GPIO的输出摆率进行合理控制以降低I/O噪声和功耗。当你在产品开发中需要配置50M或更高的输出速率时,强烈建议开启该补偿单元。
总之,对于STM32 GPIO输出速率的选择问题,我们在开发应用中应多加注意。如果因为这个输出速率选择导致麻烦,原因往往比较隐晦,很难直接从代码语句或程序逻辑上找到突破。在满足实际应用需求的前提下,速率就低不就高,这对降低功耗、减少噪声、改善EMI都有好处。当然,如果选择过低于实际需求的输出速率也不可取,那样会导致输出失真、通信异常等问题,自然也违背了ST设计多档位输出速率的初衷。
|