GPIO的结构和功能
1.STM32提供通用的输入输出引脚(GPIO)
• 输出高低电平控制外设
• 输入0、1检测外设状态
2.可配置为复用的输入输出引脚(AFIO)
• 大多数GPIO都有默认的复用功能: 可作为片上外设(如串口、ADC等)的I/O引脚
• 部分GPIO还有重映射功能: 把原来是A引脚的默认复用功能,映射到B引脚使用
通用I/O端口GPIO
STM32F10x微控制器有7组通用I/O端口
• 用GPIOx(x是A、B、C、D、E、F、G)表示 即GPIOA、GPIOB、 ……GPIOG
• 每组端口有16个引脚 分别用Px0、Px1、 ……Px15(x是A~G)表示
每个引脚可以由软件分别配置成多种模式:
• 浮空输入/上拉输入/下拉输入/模拟输入;
• 开漏输出/推挽式输出;
• 推挽式复用功能/开漏复用功能
GPIO工作方式
输入模式
浮空输入模式
输出缓冲器被禁止,施密特触发输入被激活,不接上拉和下拉电阻,出现在I/O脚上的数据在每个APB2时 钟被采样到输入数据寄存器
上拉输入模式
输出缓冲器被禁止,施密特触发输入被激活,上拉电 阻接通,不接下拉电阻,当I/O引脚无输入信号时, 读取到的数据为1,即高电平
下拉输入模式
输出缓冲器被禁止,施密特触发输入被激活,上拉电 阻不接,下拉电阻接通,当I/O引脚无输入信号时, 读取到的数据为0,即低电平
模拟输入模式
输出缓冲器被禁止,禁止施密特触发输入,实现了每个模拟I/O 引脚上的零消耗。施密特触发输出值被强置为’0’ ;上拉和下拉 电阻被禁止; I/O引脚的信号交由片上外设(比如ADC)处理。
输出模式
推挽输出
输出缓冲器被激活,施密特触发输入被激活,上拉电阻和下拉 电阻被禁止,若通过输出数据寄存器输出1,则P-mos管导通, N-MOS管截止,I/O脚得到高电平;输出0,则相反
复用推挽输出
开漏输出
输出缓冲器被激活,施密特触发输入被激活,上拉电阻和下拉 电阻被禁止,输出寄存器上的’0’激活N-MOS,端口得到低电平; 而输出寄存器上的’1’将端口置于高阻状态(P-MOS从不被激活)。
复用开漏输出
输出对比
• 推挽输出: 可以输出高低电平,连接数字器件,两个MOS管轮流导通,使其负载能力 和开关速度都比普通方式有很大提高
• 开漏输出: 只可以输出低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电 极。要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。
• 非复用输出方式其输出值由cpu执行指令控制,复用 输出方式其输出值来自片上外设
输出引脚的速度:2Mhz / 5Mhz / 50Mhz
• “速度”指输出驱动电路的响应速度,并不是输出信号的速度。芯片内部在 I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据 自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模 块,达到最佳的噪声控制和降低功耗的目的。
• GPIO的引脚速度应与应用相匹配,如果输出信号的频率超过了驱动电路的 响应速度,就有可能信号失真。(比如:信号频率为10MHz,而你配置了 2MHz的带宽,则10MHz的方波很可能就变成了正弦波),另一方面,速度 配置越高,噪声越大,功耗越大。
• 常用的选择:
① USART串口,若最大波特率只需115.2k,那用2M的速度就够了,既省 电也噪声小。
② I2C接口,若使用400k波特率,若想把余量留大些,可以选用10M的 GPIO引脚速度。
③ SPI接口,若使用18M或9M波特率,需要选用50M
• 当GPIO的I/O引脚配置为输入模式时,不需要配置输出速度。