1.CRL/CRH(端口配置寄存器)
全称:CRL(Port Configuration Low Register)和CRH(Port Configuration High Register)。
作用:每组GPIO有16个引脚,CRL控制低8位(GPIOx0-GPIOx7),CRH控制高8位(GPIOx8-GPIOx15)。每个引脚占用4个比特位(2位用于模式选择,2位用于输出类型/输入配置)。
模式选择(MODE[1:0]):
00:输入模式
01:输出模式(10MHz速度)
10:输出模式(2MHz速度)
11:输出模式(50MHz速度)
配置类型(CNF[1:0]):
输入模式下:00(模拟输入)、01(浮空输入)、10(上拉/下拉输入)
输出模式下:00(推挽输出)、01(开漏输出)、10(复用推挽)、11(复用开漏)
典型应用:
初始化时通过GPIOx>CRL |= 0x03将引脚0配置为50MHz推挽输出。
2.IDR(端口输入数据寄存器)
全称:Input Data Register。
作用:读取GPIO引脚的输入电平状态,低16位有效(每位对应一个引脚)。在输入模式下,读取的是外部信号的实际电平;在输出模式下,读取的是当前输出值(开漏模式时可能受外部电路影响)。
操作特性:
只读寄存器,需通过库函数(如GPIO_ReadInputDataBit())或直接访问GPIOx>IDR获取数据。
3.ODR(端口输出数据寄存器)
全称:Output Data Register。
作用:控制引脚的输出电平(低16位有效),直接写入值可设置高/低电平。例如,GPIOx>ODR |= 0x01将引脚0置高。
局限性:修改ODR需先读取当前值再改写(“读改写”操作),在多任务环境中可能被中断打断,导致数据不一致。
4.BSRR(端口位设置/复位寄存器)
全称:Bit Set/Reset Register。
作用:实现原子操作,低16位用于置位(输出高电平),高16位用于复位(输出低电平)。例如,GPIOx>BSRR = 0x00010002可同时设置引脚1为高电平、引脚0为低电平。
优势:无需中断保护,支持单周期修改多个引脚状态,适用于实时性要求高的场景。
5.BRR(端口位复位寄存器)
全称:Bit Reset Register。
作用:仅低16位有效,用于快速复位引脚电平(等效于BSRR的高16位)。例如,GPIOx>BRR = 0x01将引脚0置低。
兼容性:在STM32F4等新型号中已取消BRR,统一由BSRR替代。
6.LCKR(端口配置锁定寄存器)
全称:Lock Register。
作用:锁定GPIO配置(如CRL/CRH中的设置),防止意外修改。激活锁定需执行特定序列:写1→写0→写1→读0→读1。锁定后,配置仅在系统复位后解除。
应用场景:关键外设(如时钟引脚)的配置保护,确保系统稳定性。
寄存器对比与选型建议
寄存器 | 操作类型 | 适用场景 | 优势 |
ODR | 读写 | 简单电平控制 | 直接控制输出电平 |
BSRR | 原子操作(仅写) | 多引脚同步控制/实时系统 | 避免中断干扰,支持批量操作 |
BRR | 复位操作(仅写) | 快速清除单引脚电平(旧型号兼容) | 代码简洁 |
LCKR | 配置保护 | 防止关键引脚配置被篡改 | 增强系统鲁棒性 |