STM32F10系列开发板的GPIO介绍
1.GPIO介绍
GPIO 是控制或者采集外部器件的信息的外设,即负责输入输出。它按组分配,每组 16 个
IO 口,组数视芯片而定。STM32F103ZET6 芯片是 144 脚的芯片,具有 GPIOA、GPIOB、GPIOC、
GPIOD、GPIOE、GPIOF 和 GPIOG 七组 GPIO 口,共有 112 个 IO 口可供我们编程使用
2.GPIO八种功能模式
2.1、输入浮空
输入浮空模式:上拉/下拉电阻为断开状态,施密特触发器打开,输出被禁止。输入浮空模
式下,IO口的电平完全是由外部电路决定。如果IO引脚没有连接其他的设备,那么检测其输
入电平是不确定的。该模式可以用于按键检测等场景。
2.2、输入上拉
输入上拉模式:上拉电阻导通,施密特触发器打开,输出被禁止。在需要外部上拉电阻的
时候,可以使用内部上拉电阻,这样可以节省一个外部电阻,但是内部上拉电阻的阻值较大,
所以只是“弱上拉”,不适合做电流型驱动。
2.3、输入下拉
输入下拉模式:下拉电阻导通,施密特触发器打开,输出被禁止。在需要外部下拉电阻的
时候,可以使用内部下拉电阻,这样可以节省一个外部电阻,但是内部下拉电阻的阻值较大,
所以不适合做电流型驱动。
2.4、模拟输入
模拟功能:上下拉电阻断开,施密特触发器关闭,双MOS管也关闭。其他外设可以通过模
拟通道输入输出。该模式下需要用到芯片内部的模拟电路单元单元,用于ADC、DAC、MCO
这类操作模拟信号的外设。
2.5、开漏输出
开漏输出模式:STM32的开漏输出模式是数字电路输出的一种,从结果上看它只能输出低
电平Vss或者高阻态,常用于IIC通讯(IIC_SDA)或其它需要进行电平转换的场景。
开漏模式下,IO是这样工作的:
P-MOS被“输出控制”控制在截止状态,因此IO的状态取决于N-MOS的导通状况;
只有N-MOS还受控制于输出寄存器,“输出控制”对输入信号进行了逻辑非的操作;
施密特触发器是工作的,即可以输入,且上下拉电阻都断开了,可以看成浮空输入;
2.6、推挽输出
推挽输出模式:STM32的推挽输出模式,从结果上看它会输出低电平VSS或者高电平
VDD。推挽输出跟开漏输出不同的是,推挽输出模式P-MOS管和N-MOS管都用上。
2.7、开漏式复用功能
开漏式复用功能:一个IO口可以是通用的IO口功能,还可以是其他外设的特殊功能引脚,
这就是IO口的复用功能。一个IO口可以是多个外设的功能引脚,我们需要选择作为其中一个
外设的功能引脚。当选择复用功能时,引脚的状态是由对应的外设控制,而不是输出数据寄存
器。除了复用功能外,其他的结构分析请参考开漏输出模式。
另外在开漏式复用功能模式下,施密特触发器也是打开的,我们可以读取IO口的电平状
态,同时外设可以读取IO口的信息。
2.8、推挽式复用功能
推挽式复用功能:和开漏式复用功能类似,只是推挽式复用功能P-MOS和N-MOS都启用了
3.GPIO寄存器
STM32F1每组(这里是A~D)通用GPIO口有7个32位寄存器控制,包括:
2个32位端口配置寄存器(CRL和CRH)
2个32位端口数据寄存器(IDR和ODR)
1个32位端口置位/复位寄存器(BSRR)
1个16位端口复位寄存器(BRR)
1个32位端口锁定寄存器(LCKR)
3.1 端口配置寄存器
配置寄存器就是用来配置GPIO的相关工作模式和工作速度,它们通过不同的
配置组合方法,就决定我们所说的8种工作模式。
3.1.1 GPIOx_CRL寄存器
偏移地址:0x00
复位值:0x44444444
3.1.2 GPIOx_CRH寄存器
偏移地址:0x04
复位值:0x44444444
3.2 端口数据寄存器
3.2.1端口输出数据寄存器(GPIOx_ODR)
地址偏移:0Ch
复位值:0x00000000
端口输出数据寄存器用于控制GPIOx的输出高电平或者低电平。
该寄存器低16位有效,分别对应每一组GPIO的16个引脚。
3.2.2端口输入数据寄存器(GPIOx_IDR)
地址偏移:0x08
复位值:0x0000XXXX
端口输出数据寄存器用于接收GPIOx的输入高电平或者低电平。
该寄存器低16位有效,分别对应每一组GPIO的16个引脚。
3.3 端口位设置/清除寄存器(GPIOx_BSRR)
地址偏移:0x10
复位值:0x00000000
3.4 端口位复位寄存器(GPIOx_BRR)
地址偏移:0x14
复位值:0x0000 0000
3.5 端口配置锁定寄存器(GPIOx_LCKR)
当执行正确的写序列设置了位16(LCKK)时,该寄存器用来锁定端口位的配置。位[15:0]用于锁
定GPIO端口的配置。在规定的写入操作期间,不能改变LCKP[15:0]。当对相应的端口位执行了
LOCK序列后,在下次系统复位之前将不能再更改端口位的配置。
每个锁定位锁定控制寄存器(CRL, CRH)中相应的4个位。
地址偏移:0x18
复位值:0x0000 0000