一、结构体定义
STM32的初始化结构体定义
GPIO_InitTypeDef GPIO_InitStruct;
二、结构体内容
typedef struct
{
uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of @ref GPIO_pins_define */
GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIOSpeed_TypeDef */
GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins.
This parameter can be a value of @ref GPIOMode_TypeDef */
}GPIO_InitTypeDef;
在后面有英文注释,画线的部分双击高亮选中可以通过Ctrl+F进行搜索,可以跳到它的枚举定义
图1.GPIO初始化结构体注释
如 GPIO_Pin的可填入内容如下图
图2.GPIO_Pin可选择变量的定义
GPIO_Pin填入的变量代表着对应的IO引脚。例如,我想要初始化GPIOA的Pin11那么在初始化结构体时就应该填入GPIO_Pin_11。当然引脚也可以同时选择多个,通常直接使用 “ | ”来间隔所选择的多个引脚,例如我希望初始化 Pin3 和 Pin11 那么我应该填入 GPIO_Pin_3 | GPIO_Pin_11。
图3.GPIO_Speed可选择变量的定义
GPIO_Speed填入的变量代表已选择的引脚输入输出时的运行速度,也可以看做低速,中速,高速,正常使用引脚时选择50MHz即可。这个变量的选择主要看实际应用场景,例如我想要输出频率为25MHz的波形,这时若是选择2MHz或是10Mhz都不能满足输出频率的要求,那么我只能选择50MHz。
图4GPIO_Mode可选择变量的定义
GPIO_Mode可填入的变量代表着现在初始化的引脚的输出或是输入模式。
第一个模式GPIO_Mode_AIN是模拟输入模式,我们可以使用它去获取外部输入的模拟电压,通常在ADC、DAC等外设使用。
第二个模式GPIO_Mode_IN_FLOATING是浮空输入模式,这种模式下的引脚在没有外部输入的时候电压的不能确定的,但是一旦遇到高电平或是低电平就会被直接拉至高电平或是低电平。通常会用到这种模式的情况是在ADC、USART的RX功能、外部中断及信号输入等。
第三个模式GPIO_Mode_IPD是下拉输入模式,它十分适合在没有任何输入时需要保持低电平的情况下。通常可以在CAN_RX、按键输入等情况。
第四个模式GPIO_Mode_IPU是上拉模式,同GPIO_Mode_IPU相似,但它是十分适合没有任何输入时需要保持高电平的情况下。通常可以在外部按键输入、防止浮动、提高信号可靠性提高信号可靠性等情况下使用。
第五个模式GPIO_Mode_Out_OD是开漏输出模式,它的特征是仅能输出低电平,若是想要输出高电平需要外接上拉电阻,它十分适合实现多点控制、减少功耗、灵活的硬件设计等情况下使用。
第六个模式GPIO_Mode_Out_PP是推挽输出模式,它是多数情况都适合使用的,例如适用于控制数字电路、驱动能力强于开漏输出、速度可调等情况下使用。
第七个模式GPIO_Mode_AF_OD是复用开漏输出模式,同GPIO_Mode_Out_OD一样,它是仅能输出低电平的类型,但是区别在于在这个模式下它被赋予了外设的功能,就像是ADC、DAC、外部中断等情况。
第八个模式GPIO_Mode_AF_PP是复用推挽输出模式,同GPIO_Mode_Out_PP一样,但是它被赋予了外设的功能,如I2C的SCL、SDA等情况