GPIO(General Purose Input Outout)通用输出输入端口
端口电压3.3v 个别端口容忍5v
在stm32中所有的GPIO都是挂载在APB2外设总线上的,GPIO是以GPIOA....C等等来命名,每个GPIO外设有 16个引脚如GPIOA是从PA0---PA15,GPIO模块只要包括 寄存器和驱动器(寄存器只负责存储数据,如果要电灯就需要驱动器来增加驱动能力),内核可以通过APB2总线对GPIO模块内的寄存器进行读写,寄存器的每一位对应一个引脚。
stm32 是32位的 但是对外只有16个引脚,因此高16位没有应用。
GPIO的8种输入模式
浮空输入 :可读取引脚电平 若引脚悬空,则输入电平不稳
上拉输入 :内部连接上拉电阻,悬空时默认高电平
下拉输入:内部连接下拉电阻 悬空是默认低电平
模拟输入 GPIO无效,引脚直接接入ADC
开漏输出: P-MOS断开,NMOS打开 若输出数据寄存器输出低电平时有效,IO端口为低电平,
若是为高电平则NMOS断开 此时IO口若接一个5v的上拉电阻则可以实现输出为5V的电压
推挽输出:P-MOS,N-MOS全都打开 输出数据寄存器输出的电平则为Io口的电平
复用开漏输出:外设控制
复用推挽输出: 外设控制
写入
位设置清除寄存器——>输出数据寄存器——>输出控制——>PMOS/NMOS——>IO
位设置寄存器是对输出数据寄存器的某一位进行设置或者清除
在输入模式下 输出都是无效的,在输出模式下 输入都是有效的 (除了模拟输入情况下 其他7种情况输入都是有效的)
端口配置低寄存器(GPIOx_CRL)(x=A.....E)
CNFy(y=1...7)
MODEy(y=1...7)
占4个字节
端口配置高寄存器(GPIOx_CRH)(x=A.......E)
CNFy(y=8...15)
MODEy(y=8...15)
占4个字节
端口输入数据寄存器(GPIOx_IDR)(x=A...E)
位31:16 保留 始终读为0
位15:0 IDRy 端口输入数据(y=0....15)这些位为只读并只能以字16的形式读出。读出的值对应I/O口的状态。
端口输出数据寄存器(GPIOx_ODR)(x=A...E)
15:0这些位可读可写并只能以16位的形式操作,对于GPIOx_BSRR可分别对ODR位进行设置、清楚