STM32 中的 CRH 和 CRL 寄存器
STM32 中的 CRH 和 CRL 寄存器
在STM32微控制器中,CRH(Configuration Register High)和CRL(Configuration Register Low)寄存器用于配置GPIO端口的引脚模式。每个GPIO端口都有对应的CRL和CRH寄存器,分别管理该端口低8位(0-7)和高8位(8-15)引脚的配置。
1. 基本概念
- CRL (Configuration Register Low):控制GPIO端口的低8个引脚(0到7),即
PIN_0
至PIN_7
。 - CRH (Configuration Register High):控制GPIO端口的高8个引脚(8到15),即
PIN_8
至PIN_15
。
这两个寄存器决定了每个引脚的工作模式(输入、输出、复用功能等)以及相关的参数设置,如输出速度、上拉/下拉电阻等。
2. 寄存器结构
每个CRL或CRH寄存器由4个字节组成,每个字节配置一个引脚的属性。具体来说,每个引脚有两位用于配置模式(Mode bits)和两位用于配置配置项(Configuration bits)。以下是它们的具体含义:
模式位(Mode bits)
00
: 输入模式(reset state)01
: 输出模式,最大速度10 MHz10
: 输出模式,最大速度2 MHz11
: 输出模式,最大速度50 MHz
配置位(Configuration bits)
- 对于输入模式:
00
: 模拟输入模式(无内部上拉/下拉)01
: 浮空输入(默认状态)10
: 上拉输入(内置上拉电阻)11
: 下拉输入(内置下拉电阻)
- 对于输出模式:
00
: 通用推挽输出01
: 通用开漏输出10
: 复用推挽输出11
: 复用开漏输出
3. 配置过程
/* 1. 开启时钟 */
/* 1.1 串口1外设的时钟 */
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
/* 1.2 GPIO时钟 */
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
/* 2. 配置GPIO引脚的工作模式 PA9=Tx(复用推挽 CNF=10 MODE=11) PA10=Rx(浮空输入 CNF=01 MODE=00)*/
GPIOA->CRH |= GPIO_CRH_CNF9_1;
GPIOA->CRH &= ~GPIO_CRH_CNF9_0;
GPIOA->CRH |= GPIO_CRH_MODE9;
GPIOA->CRH &= ~GPIO_CRH_CNF10_1;
GPIOA->CRH |= GPIO_CRH_CNF10_0;
GPIOA->CRH &= ~GPIO_CRH_MODE10;
4. 注意事项
- 时钟使能:在配置任何GPIO之前,请确保相关外设的时钟已经被正确使能。
- 库函数优先:虽然可以直接通过写入寄存器来配置GPIO,但建议使用STM32的标准外设库或HAL库提供的API函数,因为这些库已经封装了底层细节,使得编程更加简单直观。
- 初始化顺序:在初始化GPIO时,先进行时钟配置,再进行引脚配置,最后才是其他外设的初始化。