GPIO的工作模式
-
输入模式(模拟/浮空/上拉/下拉)
输入模式中,施密特触发器打开,输出被禁止,可以通过输入数据寄存器GPIOx_IDR读取I/O状态。
- 上拉/下拉:默认的电平由上拉或者下拉决定
- 浮空:输入的电平不确定,完全由外部的输入决定,一般接按键的时候用的是这个模式
- 模拟:用于ADC采集
-
输出模式
输出数据寄存器GPIOx_ODR可控制I/O输出高低电平
-
开漏:只有N-MOS管工作,输出寄存器可控制I/O输出高阻态或低电平,输出速度可配置,有2MHZ,10MHZ,50MHZ的选项,此处输出速度即I/O支持的高低电平状态最高切换频率,支持的频率越高,功耗越大,如果功耗要求不严格,把速度设置成最大即可
输出模式下施密特触发器打开,输入可用,通过输入数据寄存器GPIOx_IDR可读取I/O的实际状态
-
-
复用功能(推挽/开漏)
输出使能,输出速度可配置,可工作在开漏及推挽模式,但是输出信号源于其他外设,输出数据寄存器GPIOx_ODR无效,输入可用,通过输入数据寄存器可获取I/O实际状态,但一般直接用外设的寄存器来获取该数据信号
开启外设时钟
设置完 GPIO 的引脚,控制电平输出,以为现在总算可以点亮 LED 了吧,其实还差最后一步。由 于 STM32 的外设很多,为了降低功耗,每个外设都对应着一个时钟,在芯片刚上电的时候这些 时钟都是被关闭的,如果想要外设工作,必须把相应的时钟打开
所有的GPIO都挂载到APB2总线上,具体的时钟由APB2外设时钟使能寄存器(RCC_APB2ENR)来控制
B2外设时钟使能寄存器(RCC_APB2ENR)来控制