1、先了解io口
32的io口可以由软件配置寄存器为8种模式:
1、输入浮空 5、开漏输出
2、输入上拉 6、推挽输出
3、输入下拉 7、推挽式复用功能
4、模拟输入 8、开漏复用功能
单io口寄存器必须按32位字被访问
32 的每个 io端口 都有 7 个寄存器控制:
两个32位 端口配置 寄存器-- CRL和CRH
两个32位 数据 寄存器-- IDR和ODR
一个32位 置位/复位 寄存器-- BSRR
一个16位 复位 寄存器-- BRR
一个32位 锁存 寄存器-- LCKR
常用的4个寄存器-- CRL、CRH、IDR、ODR
2、来看CRL和CEH:
CRL 和 CRH 控制着每个 IO 口的模式及输出速率
io口配置表:
输出模式配置:
端口低配置寄存器 CRL 的描述:
此寄存器的复位值:0x4444 4444
CRL 控制着那几个IO端口(A–G)的低 8 位端口的模式,
例如:A0—A7由CRL控制,A8—A15由CRH控制
每个IO口占用CRL的4个位,高两位为CNFy[1:0],低两位为MODE
下面有几个配置模式常用的值:
- 0X0 表示模拟输入模式(ADC 用)
- 0X3 表示推挽输出模式(做输出口用,50M 速率)
- 0X8 表示上/下拉输入模式(做输入口用)
- 0XB 表示复用输出(使用 IO 口的第二功能,50M 速率)
举例:将A端口的第11位设置为上拉输入,12位设置为推挽输出
11位和12位属于高8位,由CRH控制,然后一个引脚占4位 11=1000 12=1110 根据上表来配置的
代码的写法:
GPIOC->CRH &= 0XFFF00FFF; //清除原来的设置
GPIOC->CRH |= 0X00038000; //配置11输入 12输出
GPIOC->ODR = 1<<11; //11上拉
3、下面到 IDR 寄存器
IDR 是一个端口输入 数据寄存器,只用了低 16 位。该寄存器为 只读 寄存器,并且只能以 16 位的形式读出
4、ODR 是一个端口输出数据寄存器
也只用了低 16 位。该寄存器为可 读写,从该寄存器读出来的数据可以用于判断当前 IO 口的输出状态。而向该寄存器写数据,则可以控制某个 IO 口的输出电平。该寄存器的各位描述如下图所示
配置好这几个寄存器,就可以让32的IO口来控制LED灯了