目录
STM32F103ZET6有144个引脚,一共有7组IO口,每组IO口有16个IO。一共有16x7=112个IO口。
GPIOA,GPIOB-->>GPIOG
通过芯片手册可以查看哪些引脚可以作为GPIO,有FT标准说明它可以容忍5V,也可看到哪些GPIO可以复用功能
GPIO的工作方式
四种输入模式:
输入浮空:
VDD和VSS所在路径的两个开关同时断开。此时没有上拉和下拉的情况,所以当IO口没有接输入的时候,此时的电平会是一个不确定的值,也就是我们所说的浮空。电平会处于一个跳变的状态,一会高,一会低。只有输入了一个高/低电平才会确定下来。
输入上拉:
VDD所在上拉电阻开关闭合,下拉电阻的开关断开。在没有信号输入的时候,读取到的电平就是高电平。
输入下拉:
VDD所在上拉电阻开关断开,下拉电阻的开关闭合。在没有信号输入的时候,读取到的电平就是低电平
模拟输入:
对一个模拟信号进行读取。
四种输出模式
开漏输出:
④⑤⑥⑦是读取的过程。开漏输出的电路路径是①②③④。当我们给一个低电平的时候,N-MOS管关闭,此时输出的电压就是一个浮空,即不确定的电压。如果给一个高电平,那么MOS管导通,相当于IO口与VSS相连,此处就输出了一个低电平电压。
优势①
虽然我们可以看到开漏输出是没有办法在内部输出一个高电平,但是这一个看似是缺点。其实实际上是一种优点。我们可以得到,当给一个低电平的时候,MOS管没有导通,此时电压不确定导致无法输出高电平,但是一旦我们在外部增加一个上拉,那么这一个缺点就会被有效避免。并且,因为是我们自己设计一个上拉,这个上拉的电压是由我们自己确定,这样我们就可以根据外部电路需要多少V的高电平来给这一个上拉的电压,可以更好的适应更多情况。
优势②
开漏输出的实质其实就是一个OD门(OD:漏极输出(Open Drain))。而在数电中,OD门有一个非常重要的特性就是可以实现线与的功能,简单来说,就是在像IIC这样的总线协议中,只要有一个给低电平,那么总线都会被拉低。

开漏复用功能:
推挽式输出:
推挽输出就是需要利用两个不同的MOS管来实现输出。P-MOS和N-MOS是不同的控制方式,当给一个高电平的时候,N-MOS导通,P-MOS不导通,此时IO口接通在VSS,此时输出的是低电平。当给一个低电平的时候,P-MOS导通,N-MOS不导通,此时IO口接通在VDD电源上面,此时输出的是高电平。
优势
带载能力强。
推挽式复用功能:
可以设置三种最大翻转速度:
2MHZ
10MHZ
50MHZ
GPIO相关配置寄存器
每组GPIO端口的寄存器包括:
两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),
两个32位数据寄存器(GPIOx_CRL,GPIOx_CRH),
一个32位置位/复位寄存器(GPIOx_BSRR),
一个16位复位寄存器(GPIOx_BRR),
一个32位锁定寄存器(GPIOx_LCKR).
注意每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字节或字节访问)
GPIOx_CRL :端口配置低寄存器
比如配置PA0到PA7引脚IO工作模式
GPIOx_CRH:端口配置高寄存器
比如配置PA8到PA15引脚IO工作模式