1、AFIO 时钟何时需要打开?要用到引脚重映射和外部中断时。STM32 的 IO 口的 8 种配置(GPIO)1 8 种可能的配置(1) 浮空输入 _IN_FLOATING(2)带上拉输入_IPU(3)带下拉输入_IPD(4)模拟输入_AIN(5)开漏输出_OUT_OD(6)推挽输出_OUT_PP(7)复用功能的推挽输出_AF_PP(8)复用功能的开漏输出_AF_OD1.1 I/O 口的输出模式下,有 3 种输出速度可选(2MHz、10MHz 和 50MHz),这个速度是指 I/O 口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在 I/O 口 的输出部分安排了多个响
2、应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声 控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的 EMI 性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。关键是 GPIO 的引脚速度跟应用匹配(推荐 10 倍以上?)。比如:1.1.1 对于串口,假如最大波特率只需 115.2k,那么用 2M 的 GPIO 的引脚速度就够了,既省电也噪声小。1.1.2 对于 I2C 接口,假如使用 400k 波特率,若想把余
3、量留大些,那么用 2M 的GPIO 的引脚速度或许不够,这时可以选用 10M 的 GPIO 引脚速度。1.1.3 对于 SPI 接口,假如使用 18M 或 9M 波特率,用 10M 的 GPIO 的引脚速度显然不够了,需要选用 50M 的 GPIO 的引脚速度。1.2 GPIO 口设为输入时,输出驱动电路与端口是断开,所以输出速度配置无意义。1.3 在复位期间和刚复位后,复用功能未开启,I/O 端口被配置成浮空输入模式。1.4 所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。1.5 GPIO 口的配置具有上锁功能,当配置好 GPIO 口后,可以通过程序锁住配置组合,直到下
4、次芯片复位才能解锁。2 在 STM32 中如何配置片内外设使用的 IO 端口首先,一个外设经过 配置输入的时钟和 初始化后即被激活(开启);如果使用该外设的输入输出管脚,则需要配置相应的 GPIO 端口(否则该外设对应的输入输出管脚可以做普通 GPIO 管脚使用);再对外设进行详细配置。对应到外设的输入输出功能有下述三种情况:一、外设对应的管脚为输出:需要根据外围电路的配置选择对应的管脚为复用功能的推挽输出或复用功能的开漏输出。二、外设对应的管脚为输入:则根据外围电路的配置可以选择浮空输入、带上拉输入或带下拉输入。三、ADC 对应的管脚:配置管脚为模拟输入。 如果把端口配置成复用输出功能,则引
5、脚和输出寄存器断开,并和片上外设的输出信号连接。将管脚配置成复用输出功能后,如果外设没有被激活,那么它的输出将不确定。 3 通用 IO 端口(GPIO)初始化:3.1 GPIO 初始化3.1.1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | B | C, ENABLE):使能 APB2 总线外设时钟3.1.2 RCC_ APB2PeriphResetCmd (RCC_APB2Periph_GPIOA | B | C, DISABLE):释放GPIO 复位3.2 配置各个 PIN 端口(模拟输入_AIN、输入浮空_IN_FLOATING、输入上拉_I
6、PU、输入下拉_IPD、开漏输出_OUT_OD、推挽式输出_OUT_PP、推挽式复用输出_AF_PP、开漏复用输出_AF_OD)3.3 GPIO 初始化完成(1) 浮空输入_IN_FLOATING 浮空输入,可以做 KEY 识别,RX1 。(2)带上拉输入 _IPUIO 内部上拉电阻输入。(3)带下拉输入_IPD IO 内部下拉电阻输入。(4) 模拟输入_AIN 应用 ADC 模拟输入,或者低功耗下省电。(5)开漏输出_OUT_OD IO 输出 0 接 GND,IO 输出 1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为 1 时,IO 口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样 IO 口也就可以由外部电路改变为低电平或不变。可以读 IO 输入电平变化,实现 C51 的 IO 双向功能。(6)推挽输出_OUT_PP IO 输出 0-接 GND, IO 输出 1 -接 VCC,读输入值是未知的。(7)复用功能的推挽输出_AF_PP 片内外设功能(I 2C 的 SCL,SDA)(8)复用功能的开漏输出_AF_OD片内外设功能(TX1,MOSI,MISO.SCK)