跳转到内容
新建笔记

STM32F107 外设寄存器偏移速查

这些偏移用于查阅 STM32F107xB/xC 的 GPIO、RCC、USART、TIM 和 ADC。它们是内存映射外设寄存器,不能与 CPU 的 R0、LR、PC 等核心寄存器混为一谈。

先确认器件与地址基准

跳转到“先确认器件与地址基准”

历史记录写过“STM32F107ZET6”,但 STM32F105/107 数据手册列出的 F107 是128/256 KB Flash、64或100引脚系列;该名称不符合手册中的器件范围。应根据实物丝印、原理图和订货型号确认器件,不擅自将其改认成另一颗芯片。

这里的十六进制数都是相对于相应外设实例基址的字节偏移,不是完整地址。例如 GPIOA 和 GPIOB 的 ODR 偏移相同,但基址不同。基址、字段定义、访问宽度和外设是否存在,应同时对照 RM0008与所选器件头文件。偏移正确不代表随意写入该地址就是正确的初始化步骤。

GPIO:端口配置与输入输出

跳转到“GPIO:端口配置与输入输出”

CRL 对应端口引脚0~7,CRH 对应8~15;IDR 与 ODR 分别反映输入和输出数据。BSRR 的置位/复位字段与 BRR 的复位用途应按手册使用,不能把所有寄存器都当作普通 RAM 任意读改写。以下布局属于 STM32F1,不能替代其他系列的 MODER 等布局。

寄存器名称地址偏移详细介绍
GPIOx_CRL0x00配置低 8 位 GPIO 引脚
GPIOx_CRH0x04配置高 8 位 GPIO 引脚
GPIOx_IDR0x08输入数据寄存器
GPIOx_ODR0x0C输出数据寄存器
GPIOx_BSRR0x10位设置/重置寄存器
GPIOx_BRR0x14位重置寄存器
GPIOx_LCKR0x18配置锁定寄存器

RCC:互联型时钟与复位

跳转到“RCC:互联型时钟与复位”

表中所有偏移都相对于 RCC 基址。STM32F105/107 的互联型 RCC 还包含 AHB 复位与 CFGR2 等寄存器;使用时应选择 RM0008 的互联型章节,不能只套用普通 F103 时钟树。

寄存器名称地址偏移详细介绍
RCC_CR0x00控制寄存器
RCC_CFGR0x04时钟配置寄存器
RCC_CIR0x08时钟中断寄存器
RCC_APB2RSTR0x0CAPB2 外设复位寄存器
RCC_APB1RSTR0x10APB1 外设复位寄存器
RCC_AHBENR0x14AHB 外设时钟使能寄存器
RCC_APB2ENR0x18APB2 外设时钟使能寄存器
RCC_APB1ENR0x1CAPB1 外设时钟使能寄存器
RCC_BDCR0x20备用域控制寄存器
RCC_CSR0x24控制/状态寄存器
RCC_AHBRSTR0x28AHB 外设复位寄存器
RCC_CFGR20x2C互联型附加时钟配置寄存器

USART:状态、数据与通信参数

跳转到“USART:状态、数据与通信参数”

下表对应 USART1~3 的布局。GTPR 用于保护时间和预分频,不是通用计时器寄存器;UART4/5 的功能子集不能仅凭共享的 C 结构体推断。SR 与 DR 的访问还可能参与状态清除序列,要按具体标志说明操作。

寄存器名称地址偏移详细介绍
USART_SR0x00状态寄存器
USART_DR0x04数据寄存器
USART_BRR0x08波特率寄存器
USART_CR10x0C控制寄存器 1
USART_CR20x10控制寄存器 2
USART_CR30x14控制寄存器 3
USART_GTPR0x18保护时间和预分频寄存器

TIM:按具体定时器选择寄存器

跳转到“TIM:按具体定时器选择寄存器”

以下列出原速查中的通用定时器主要项目,可用于对照 TIM2~5。TIM1 的高级控制布局还涉及 RCR、BDTR 等;TIM6/7 是基本定时器,不具有这张表中的全部捕获比较功能。共享 TIM_TypeDef 中有某个成员,不表示所有 TIM 实例都实现它。表中的空隙也不能当作可以使用的寄存器。

寄存器名称地址偏移详细介绍
TIMx_CR10x00控制寄存器 1
TIMx_CR20x04控制寄存器 2
TIMx_SMCR0x08从模式控制寄存器
TIMx_DIER0x0CDMA/中断使能寄存器
TIMx_SR0x10状态寄存器
TIMx_EGR0x14事件生成寄存器
TIMx_CCMR10x18捕获/比较模式寄存器 1
TIMx_CCMR20x1C捕获/比较模式寄存器 2
TIMx_CCER0x20捕获/比较使能寄存器
TIMx_CNT0x24计数寄存器
TIMx_PSC0x28预分频器
TIMx_ARR0x2C自动重装载寄存器
TIMx_CCR10x34捕获/比较寄存器 1
TIMx_CCR20x38捕获/比较寄存器 2
TIMx_CCR30x3C捕获/比较寄存器 3
TIMx_CCR40x40捕获/比较寄存器 4
TIMx_DCR0x48DMA 控制寄存器
TIMx_DMAR0x4CDMA 突发访问寄存器

STM32F107 的 ADC1/ADC2 使用以下偏移。SQR 配置规则序列,JSQR 配置注入序列;JOFR 是注入通道偏移,JDR 保存注入转换数据。序列编码、对齐方式、转换触发与状态清除规则需要继续查对应字段说明。

寄存器名称地址偏移详细介绍
ADC_SR0x00状态寄存器
ADC_CR10x04控制寄存器 1
ADC_CR20x08控制寄存器 2
ADC_SMPR10x0C采样时间寄存器 1
ADC_SMPR20x10采样时间寄存器 2
ADC_JOFR10x14注入通道数据偏移寄存器 1
ADC_JOFR20x18注入通道数据偏移寄存器 2
ADC_JOFR30x1C注入通道数据偏移寄存器 3
ADC_JOFR40x20注入通道数据偏移寄存器 4
ADC_HTR0x24高位阈值寄存器
ADC_LTR0x28低位阈值寄存器
ADC_SQR10x2C常规序列寄存器 1
ADC_SQR20x30常规序列寄存器 2
ADC_SQR30x34常规序列寄存器 3
ADC_JSQR0x38注入序列寄存器
ADC_JDR10x3C注入数据寄存器 1
ADC_JDR20x40注入数据寄存器 2
ADC_JDR30x44注入数据寄存器 3
ADC_JDR40x48注入数据寄存器 4
ADC_DR0x4C数据寄存器

用器件头文件核对布局

跳转到“用器件头文件核对布局”

ST 的 stm32f107xc.h定义了对应外设结构。下面只做编译期布局检查,不访问设备寄存器;工程需要配置相应 CMSIS 与器件头文件搜索路径。

#include <stddef.h>
#include "stm32f107xc.h"
_Static_assert(offsetof(GPIO_TypeDef, ODR) == 0x0C, "GPIO ODR offset");
_Static_assert(offsetof(RCC_TypeDef, CFGR2) == 0x2C, "RCC CFGR2 offset");
_Static_assert(offsetof(USART_TypeDef, GTPR) == 0x18, "USART GTPR offset");
_Static_assert(offsetof(TIM_TypeDef, CCR1) == 0x34, "TIM CCR1 offset");
_Static_assert(offsetof(ADC_TypeDef, DR) == 0x4C, "ADC DR offset");

结构偏移检查只能核对布局。位字段意义、保留位处理、时钟使能、复位状态以及电路条件,还要分别验证。