0 前言
如果我们只是使用MCU控制LED的亮灭,完全可以不关心GPIO的速度配置。但如果我们使用到了SPI、MII、RMII、FSMC等这些高速总线就必须要清楚每种GPIO速度配置对应的最高速度,避免因为GPIO速度配置过低导致总线速度提不上去。
既然如此,那么GPIO速度是不是越高越好呢?GPIO速度并不是越高越好,越高的速率意味着更大的噪声,会造成EMC方面的问题。通常在满足通讯速度要求下,选择略高于通讯速度要求的那一档GPIO速度即可。
1 STM32F103/F407/H743不同GPIO速度配置对应的最高速度
首先要说明一下最高频率的定义:
满足tr+tf ≤ (2/3)T、占空比在45-55%之间,则认为这是能达到的最高频率。
1.1 STM32F103不同GPIO速度配置对应的最高速度
STM32F103共支持3种GPIO速度,在HAL库的定义如下:
#define GPIO_SPEED_FREQ_LOW (GPIO_CRL_MODE0_1) /*!< Low speed */
#define GPIO_SPEED_FREQ_MEDIUM (GPIO_CRL_MODE0_0) /*!< Medium speed */
#define GPIO_SPEED_FREQ_HIGH (GPIO_CRL_MODE0) /*!< High speed */
GPIO_SPEED_FREQ_LOW:2MHz
GPIO_SPEED_FREQ_MEDIUM:10MHz
GPIO_SPEED_FREQ_HIGH:50MHz
1.2 STM32F407不同GPIO速度配置对应的最高速度
STM32F407共支持4种GPIO速度,在HAL库的定义如下:
#define GPIO_SPEED_FREQ_LOW 0x00000000U
#define GPIO_SPEED_FREQ_MEDIUM 0x00000001U
#define GPIO_SPEED_FREQ_HIGH 0x00000002U
#define GPIO_SPEED_FREQ_VERY_HIGH 0x00000003U
GPIO_SPEED_FREQ_LOW:8MHz
GPIO_SPEED_FREQ_MEDIUM:50MHz
GPIO_SPEED_FREQ_HIGH:100MHz
GPIO_SPEED_FREQ_VERY_HIGH:180MHz
1.3 STM32H743不同GPIO速度配置对应的最高速度
STM32H743共支持4种GPIO速度,在HAL库的定义如下:
#define GPIO_SPEED_FREQ_LOW ((uint32_t)0x00000000U) /*!< Low speed */
#define GPIO_SPEED_FREQ_MEDIUM ((uint32_t)0x00000001U) /*!< Medium speed */
#define GPIO_SPEED_FREQ_HIGH ((uint32_t)0x00000002U) /*!< Fast speed */
#define GPIO_SPEED_FREQ_VERY_HIGH ((uint32_t)0x00000003U) /*!< High speed */
GPIO_SPEED_FREQ_LOW:16MHz
GPIO_SPEED_FREQ_MEDIUM:110MHz
GPIO_SPEED_FREQ_HIGH:166MHz
GPIO_SPEED_FREQ_VERY_HIGH:220MHz