IO接口
一个图连带着复习下微机和数电.

基本上所有的STM32的GPIO都长这样,最外面是保护二极管和上下拉电阻(可控),然后连输入驱动器和输出驱动器.
4个输入模式:
a.模拟输入 信号直接走analog那一支,只有在当前引脚配置成ADC的时候使用.
b.上拉输入 上拉电阻打开,输入信号走schmitt触发器进来.对于按键检测功能,如果没有输入为高电平,有输入会拉低.
c.下拉输入 和上拉相反,下拉电阻打开.输入信号也是走schmitt触发器进来.对于按键检测功能,如果没有输入为低电平,有输入会拉高.
d.浮空输入 上拉电阻和下拉电阻全部关闭,输入信号直接是走schmitt触发器进来,电压是不确定的,用于UART等串行通信.
4个输出模式
推拉输出 开漏输出 复用推拉输出 复用开漏输出
推拉输出:两个MOS管都工作,直接出高电平/低电平.驱动能力一般.
复用功能:SPI,PWM,SDIO等
开漏输出:和OC门类似.只有NMOS管工作(注意PMOS上那个大叉),不能直接出高电平/低电平,需要配合外面的上拉电阻工作,输出电平可调,负载能力也可调.自带"线与".用于IIC等.
复用功能:IIC
STM32程序(HAL)库用法:不同的硬件可能有差异,下面给的是针对STM32H7的HAL库
先查表确定复用功能,如果要复用就在GPIO_InitTypeDef结构里面填上复用的功能(IIC/SPI/UART/TIM/...)并配置成"复用推拉输出".IIC注意是复用开漏输出.如果是普通输出就填GPIO_MODE_OUT_PP(推拉输出)或者GPIO_MODE_OUT_OD(开漏输出).如果是按键根据原理图配置上拉输入或者下拉输入,也可同时绑定外部中断.
Speed点成高速(IIC的点成低速).
Pull根据需求打开上拉或者下拉或者关闭.
Pin是初始化的引脚.可以用位运算一次初始化一堆引脚.
举个栗子
把E13,E14,E15,E12配置成推拉输出
或者是配置IIC的回调函数 把B8,B9复用成I2C1.把B10,B11复用成I2C2