GPIO
在STM32中所有GPIO都是挂在APB2外设总线上的,GPIO外设命名GPIOA,GPIOB,GPOIC......
GPIO基本结构
寄存器是一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写 ,从而完成输出或者读取电平功能。寄存器的每一位都对应一个引脚。STM32是32位的,寄存器也都是32位的,多以寄存器只有低16为对应端口,高16位没有用到。驱动器是增加信号的驱动能力。
GPIO位结构
如果导通上拉电阻不导通下拉电阻,默认为是高电平输入(如果是低电平输入,则电流由Vdd经过上拉电阻流入输入的低电平,则信号无法进入芯片)
如果导通下拉电阻不导通上拉电阻,默认为是低电平输入(如果是高电平输入,则电流由输入的高电平经过下拉电阻流入Vss,则信号无法进入芯片)
开漏模式可以作为通讯协议的驱动方式,在多机通讯的情况下避免各个设备的互相干扰。另外开漏模式可以作为5V的输出,外部Vcc(5V)接上拉电阻后接入I/O引脚,当输出低电平是N-MOS导通,输出IO脚输出低电平(Vss),当输出高电平N-MOS断开,IO脚由外界Vcc输出5V。
当IO脚设置为输入模式时P-MOS和N-MOS都关闭。
操作STM32的GPIO总共需要三个步骤
1使用RCC开启GPIO的时钟
2使用GPIO_Init函数初始话GPIO
GPIO_Mode_AIN = 0x0, //模拟输入
GPIO_Mode_IN_FLOATING = 0x04,//浮空输入
GPIO_Mode_IPD = 0x28,//下拉输入
GPIO_Mode_IPU = 0x48,//上拉输入
GPIO_Mode_Out_OD = 0x14,//开漏输出
GPIO_Mode_Out_PP = 0x10,//推挽输出
GPIO_Mode_AF_OD = 0x1C,//复用开漏
GPIO_Mode_AF_PP = 0x18//复用推挽
3使用输出或输入函数控制GPIO口
(涉及到RCC和GPIO两个外设)
在Library中可以找到rcc.h和gpio.h头文件,查看两个外设的库函数。
RCC主要用到
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
//AHB外设时钟控制
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
//APB2外设时钟控制
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
//APB1外设时钟控制