野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 328|回复: 0

STM32的GPIO配置不同输出速度会有什么影响?

[复制链接]
发表于 2019-9-17 17:05:27 | 显示全部楼层 |阅读模式

今天有人问:GPIO配置不同输出速度会有什么影响? 你知道答案吗?

http://www.makeru.com.cn/live/3523_1747.html?s=69821

1写在前面
这个问题看起来比较简单,我相信很多人都能说出答案。

但是,很多人都只是停留在表面,至于深层次的含义,估计很少有人思考。

需要更深理解其中含义,可能需要结合特定场景来说,我自己也是在项目中才深刻体会其中含义。

2GPIO输出速度
不管标准外设库,还是STM32CubeMX配置GPIO输出引脚,都会有速度GPIO_InitStruct.Speed这个选项。

类似如下:

GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

根据不同MCU型号,速度选项,有些有3个,有些有4个。一般定义在xxx_gpio.h文件中。

#define GPIO_Speed_2MHz GPIO_Speed_Level_1 /*!< I/O output speed: Low 2 MHz /
#define GPIO_Speed_10MHz GPIO_Speed_Level_2 /!< I/O output speed: Medium 10 MHz /
#define GPIO_Speed_50MHz GPIO_Speed_Level_3 /!< I/O output speed: High 50 MHz */

#define GPIO_SPEED_FREQ_LOW (0x00000000u) /*!< Low speed /
#define GPIO_SPEED_FREQ_MEDIUM (0x00000001u) /!< Medium speed /
#define GPIO_SPEED_FREQ_HIGH (0x00000002u) /!< High speed /
#define GPIO_SPEED_FREQ_VERY_HIGH (0x00000003u) /!< Very high speed */

对于普通输出GPIO,使用STM32CubeMX配置,默认配置低:


当然,如果配置成其他模式,有可能是中,或高。

比如:配置UART、CAN引脚,速度会是高。

提问:你想过为什么会是低、高吗?

3实验:测量GPIO输出波形
不知道大家用示波器测量过GPIO输出波形没有,特别是在高速(单位M)的时候。

我以前经常测量MCO引脚输出时钟,测量过的人应该都知道,如果输出速度和配置速度不匹配,会明显看到波形不正常。

波形会出现不完整,幅度低等失真现象。

相信不用我说,有一定常识的人都能理解。

4具体原因
速度的配置,就是决定IO口驱动电路的响应速度。

我们需要结合实际情况配置速度,不同速度会有不同的影响。

高低速差异:

配置高速:输出频率高,噪音大,功耗高,电磁干扰强;

配置低速:输出频率低,噪音小,功耗低,电磁干扰弱;提高系统EMI(电磁干扰)性能;

看到差异,相信很多人就能理解了。

实际情况中,比如:低功耗的产品,你会考虑功耗。

环境不好的场合,通信不稳定,你会考虑电磁干扰等。

举例:

如果你使用9600波特率UART通信,建议速度配置为低。

所以,如果你想使产品更加完美,速度配置也是关键的一项。




资料.zip

3.74 KB, 下载次数: 8

回复

使用道具 举报

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

本版积分规则

联系站长|手机版|站点地图|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号-2 ) 大学生ARM嵌入式2群

GMT+8, 2020-8-11 23:06 , Processed in 0.144488 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表