STM32微控制器通过寄存器来配置和控制各种外设功能。以下是最常用的外设寄存器分类介绍。
1. 控制寄存器(xxx_CR)
用于配置外设的工作模式、使能外设等。
寄存器 | 功能 | 示例 |
---|---|---|
GPIOx_CRL/GPIOx_CRH | 配置GPIO引脚的模式(输入/输出/复用/模拟)和速度 | CRL控制0-7引脚,CRH控制8-15引脚 |
USART_CR1 | 配置串口的工作模式、数据位、校验等 | UE位使能USART,M位设置数据长度 |
TIMx_CR1 | 配置定时器的计数模式、预分频等 | CEN位启动定时器,DIR设置计数方向 |
2. 数据寄存器(xxx_DR)
存储外设输入或输出的数据。
寄存器 | 功能 | 示例 |
---|---|---|
GPIOx_IDR | 读取GPIO引脚的输入数据 | IDR0-IDR15对应引脚0-15的输入状态 |
GPIOx_ODR | 设置GPIO引脚的输出数据 | ODR0-ODR15对应引脚0-15的输出状态 |
USART_DR | 存储串口发送或接收的数据 | 写入数据发送,读取数据接收 |
3. 状态寄存器(xxx_SR)
实时更新外设的运行状态(标志位)。
寄存器 | 功能 | 示例 |
---|---|---|
USART_SR | 指示串口状态 | TC位表示发送完成,RXNE表示接收数据就绪 |
ADC_SR | 指示ADC转换状态 | EOC位表示转换完成 |
TIMx_SR | 定时器状态标志 | UIF位表示更新事件 |
4. 中断相关寄存器
管理外设的中断触发和优先级。
寄存器 | 功能 | 示例 |
---|---|---|
NVIC_ISER | 使能中断 | SETENA位对应不同中断通道 |
EXTI_IMR | 配置外部中断屏蔽 | MR0-MR19对应不同外部中断线 |
USART_CR1 | 配置串口中断 | RXNEIE使能接收中断,TCIE使能发送完成中断 |
5. 时钟控制寄存器(RCC相关)
配置外设的时钟源和使能时钟。
寄存器 | 功能 | 示例 |
---|---|---|
RCC_AHB1ENR | 使能AHB1总线上的外设时钟 | GPIOAEN位使能GPIOA时钟 |
RCC_APB1ENR | 使能APB1总线上的外设时钟 | USART2EN位使能USART2时钟 |
RCC_CFGR | 配置系统时钟源和分频 | SW位选择系统时钟源 |
6. DMA相关寄存器
配置DMA传输的源地址、目标地址和数据长度。
寄存器 | 功能 | 示例 |
---|---|---|
DMAx_CPAR | 设置DMA外设地址 | 配置外设数据寄存器地址 |
DMAx_CMAR | 设置DMA内存地址 | 配置内存缓冲区地址 |
DMAx_CNDTR | 设置传输数据量 | 设置要传输的数据字节数 |
7. 定时器专用寄存器
配置定时器的计数、捕获比较、PWM生成等。
寄存器 | 功能 | 示例 |
---|---|---|
TIMx_ARR | 自动重装载值 | 设置定时器溢出值 |
TIMx_CCR1 | 捕获/比较值 | 设置PWM占空比 |
TIMx_PSC | 预分频器 | 设置定时器时钟分频 |
8. ADC/DAC相关寄存器
配置模数/数模转换的参数和启动转换。
寄存器 | 功能 | 示例 |
---|---|---|
ADC_CR2 | 控制ADC转换 | ADON位使能ADC,SWSTART启动转换 |
DAC_DHR12R1 | DAC数据保持寄存器 | 设置DAC通道1的12位右对齐输出值 |
ADC_SQR1 | 配置ADC转换序列 | L位设置转换序列长度 |
9. 其他常用寄存器
寄存器 | 功能 | 示例 |
---|---|---|
AFIO_MAPR | 复用功能重映射 | 重定时器通道到不同引脚 |
PWR_CR | 电源控制 | 设置低功耗模式 |
BKP_DR1 | 备份寄存器 | 掉电后保持数据 |
寄存器操作示例
GPIO配置示例:
// 设置GPIOA的引脚5为输出模式
GPIOA->CRL &= ~(0xF << 20); // 清除原有配置
GPIOA->CRL |= (0x3 << 20); // 推挽输出模式,最大速度50MHz
GPIOA->ODR |= (1 << 5); // 输出高电平
USART配置示例:
// 使能USART1时钟
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
// 配置USART1波特率115200 (假设系统时钟72MHz)
USART1->BRR = 0x1D4C; // 72000000/(16 * 115200) = 39.0625
// 使能USART1
USART1->CR1 |= USART_CR1_UE | USART_CR1_TE | USART_CR1_RE;
**注意:**不同STM32系列和型号的寄存器可能略有差异,具体使用时请参考对应芯片的参考手册。