STM32F4关键寄存器总结

——

整理自STM32F4中文参考手册(ST)、STM32F4开发指南-寄存器版本(正点原子)、cortex m3与m4权威指南(英文)。更新中。

目录

    • NVIC
    • GPIO
    • EXIT
    • USART
    • TIM(2~5)
      • 基本设置
      • PWM相关
    • ADC

NVIC

此章节与内核相关,未在参考手册中出现,需参考权威指南。

ISER1~8
(Interrupt Set-Enable Registers)中断使能寄存器组。CM4 内核支持 256 个中断,用 8 个 32 位寄存器来控制,每个位控制一个中断。由于STM32F4 的可屏蔽中断最多只有 82 个,所以仅ISER[0~2]有效,其中ISER[0]的 bit0~31 分别对应中断0~31;ISER[1]的 bit0~32 对应中断 32~63;ISER[2]的 bit0~17 对应中断 64~81。设置相应的 ISER 位为 1,使特定中断被使能。

具体每一位对应哪个中断,请参考 stm32f4xx.h 里面的第 188 行处。

ICER1~8
(Interrupt Clear-Enable Registers)中断除能寄存器组。用来清除某个中断的使能。其对应位所代表的中断和 ISER 相同。通过置位来清除中断位。

ISPR1~8
(Interrupt Set-Pending Registers)中断挂起控制寄存器组。其对应位所代表的中断和 ISER 相同。通过置 1,可以将正在进行的中断挂起,执行同级或更高级别的中断。

ICPR1~8
(Interrupt Clear-Pending Registers)中断解挂控制寄存器组。其作用与 ISPR 相反,对应位所代表的中断和 ISER 相同。通过设置 1,可以将挂起的中断解挂。

IABR1~8
(Interrupt Active Bit Registers)中断激活标志位寄存器组,属于只读寄存器。其对应位所代表的中断和 ISER 相同。如果为 1,则表示该位所对应的中断正在被执行。在中断执行完毕后由硬件自动清零。

IP1~240
(Interrupt Priority Registers)中断优先级控制寄存器组。由 240 个 8bit的寄存器组成,每个可屏蔽中断占用 8bit,这样总共可以表示 240 个可屏蔽中断( STM32F4只用到了其中的 82 个)。IP[81]~IP[0]分别对应中断 81~0。每个可屏蔽中断高 4 位(低四位不用)分为抢占优先级和子优先级。抢占优先级在前,子优先级在后,根据 SCB->AIRCR 中的中断分组设置来决定而这两个优先级各占几个位。

GPIO

IO 配置常用的 8 个寄存器:4 个 32 位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、
GPIOx_OSPEEDR 和 GPIOx_PUPDR)、2 个 32 位数据寄存器(GPIOx_IDR 和GPIOx_ODR)和 2 个 32 位复用功能选择寄存器(GPIOx_AFRH 和 GPIOx_AFRL)。

GPIOx_MODER
GPIO端口模式寄存器 (GPIO port mode register)用于控制GPIOx端口的工作模式。
每组IO下有16个IO口,该寄存器共32位,每2个位控制1个IO:
00-IN;01-OUT;10-AF;11-AN;

GPIOx_OTYPER
GPIO 端口输出类型寄存器 (GPIO port output type register)仅用于输出模式。
该寄存器低 16 位有效,每一个位控制一个 IO 口。
0-PP;1-OD

GPIOx_OSPEEDR
GPIO 端口输出速度寄存器 (GPIO port output speed register),仅用于输出模式,该寄存器用于控制 GPIOx 的输出速度,该寄存器每 2 个位控制一个 IO 口。
00-25MHZ;01-50MHZ;10-75MHZ;11-100MHZ

GPIOx_PUPDR
GPIO 端口上拉/下拉寄存器(GPIO port pull-up/pull-down register)该寄存器每 2 个位控制一个 IO 口,用于设置上下拉。
00-NOPULL;01-UP;10-DOWN

GPIOx_ODR
GPIO 端口输出数据寄存器 (GPIO port output data register)用于设置某个 IO 输出低电平(ODRy=0)还是高电平(ODRy=1).

GPIOx_IDR
GPIO 端口输入数据寄存器 (GPIO port input data register)用于读取某个 IO 的电平,如果对应的位为 0(IDRy=0),则说明该 IO 输入的是低电平,如果是 1(IDRy=1),则表示输入的是高电平。

EXIT

STM32F4的EXTI控制器支持23 个外部中断/事件请求。

EXTI_IMR
中断屏蔽寄存器(Interrupt mask register)。前 23 位有效。位 x 对应线 x 上的中断请求。当位 x 设置为 1 时,则开启这个线上的中断。

EXTI_EMR
事件屏蔽寄存器(Event mask register)。类似IMR,只是该寄存器是针对事件的屏蔽和开启。

EXTI_RTSR
上升沿触发选择寄存器(Rising trigger selection register)。前 23位有效。当位 x 设置为 1 时,则开启这个线上的上升沿触发中断/事件。

EXTI_FTSR
下降沿触发选择寄存器(Falling trigger selection register)。同 RTSR,设置下降沿触发中断/事件。

在同一中断线上,可以同时设置上升沿和下降沿触发,即任一边沿都可触发中断。

EXTI_SWIER
软件中断事件寄存器(Software interrupt event register)。
SWIERx:线 x 上的软件中断 (Software Interrupt on line x)。.当该位为“0”时,写“1”将设置 EXTI_PR 中相应的挂起位。如果在 EXTI_IMR 和 EXTI_EMR 中允许产生该中断,则产生中断请求。在此位中写入“1”可以清除它(写1清0)。被设置的 SWIER位,将会在 PR 中的对应位清除后清除

EXTI_PR
挂起寄存器(Pending register)。
PRx:挂起位 (Pending bit)。当外部中断线上发生了选择的边沿事件,该寄存器的对应位会被置为 1。在此位中写入“1”可以清除它(写1清0),也可以通过改变边沿检测的极性清除。

SYSCFG_EXTICR1~4

位于中文参考手册 8.2.4~8.2.7

SYSCFG 外部中断配置寄存器( SYSCFG external interrupt configuration register )用来选择 EXTIx 外部中断的源输入。每个EXTICR 只用了其低 16 位,EXTICR[0]只管了 GPIO 的 0~3 端
口,相应的其他端口由 EXTICR[1~3]管理。

USART

USART_SR
状态寄存器 (Status register).
RXNE(Read data register not empty,读取数据寄存器非空):该位被置 1 时表明已经有数据被接收并且可以读取。可以通过读 USART_DR 或直接向该位写 0将该位清零。
TC(Transmission complete,发送完成):当该位被置位的时候,表示 USART_DR 内的数据已经被发送完成了。如果设置了这个位的中断,则会产生中断。该位也有两种清零方式:1)读 USART_SR,写USART_DR。2)直接向该位写 0。
ORE:上溢错误 (Overrun error)
TXE:发送数据寄存器为空 (Transmit data register empty)

USART_DR
数据寄存器 (Data register)这是一个双寄存器,包含了 TDR 和 RDR。当向该寄存器写数据的时候,串口就会自动发送,当收到数据的时候,也是存在该寄存器内。
当使能校验位(USART_CR1 中 PCE 位被置位)进行发送时,写到 MSB 的值(根据数据的长度不同,MSB 是第 7 位或者第 8 位)会被后来的校验位取代。当使能校验位进行接收时,读到的 MSB 位是接收到的校验位。

USART_BRR
波特率寄存器(Baud rate register)
DIV_Fraction:位[3:0](当 OVER8=0 时有效)用来存放小数部分,
DIV_Mantissa:位[15:4]用来存放整数部分 ,最高 16 位未使用。

USART_CR1~3
控制寄存器(Control register)低16位用于串口的功能设置。
OVER8(Oversampling mode)为过采样模式设置位,OVER8=0 时精度高,容错性好,OVER8=1 的时候,容错差,速度快。一般设置位 0,即 16 倍过采样已获得更好的容错性;
UE 为串口使能位,置位以使能串口;
M (Word length)字长选择位,当该位为 0 的时候设置串口为 8 个字长外加 n 个停止位,停止位的个数(n)是根据 USART_CR2 的停止位 (STOP bit)设置来决定的,默认为 0;
PCE (Parity control enable)奇偶校验使能位,设置为1使能校验;
PS (Parity selection)奇偶校验选择位,设置为 0 则为偶校验,否则为奇校验;
TXEIE (TXE interrupt enable)发送缓冲区空中断使能位,设置该位为 1,当 USART_SR 中的 TXE 位为 1 时,将产生串口中断;
TCIE(Transmission complete interrupt enable)传送完成中断使能。此位由软件置 1 为发送完成中断使能位。设置该位为 1,当 USART_SR 中的 TC 位为 1时,将产生串口中断;
RXNEIE:RXNE中断使能 (RXNE interrupt enable)RXNE 为接收缓冲区非空中断使能,设置该位为 1,当 USART_SR 中 的 ORE 或者 RXNE 位为 1 时,将产生串口中断;
TE 为发送使能位,置位将开启串口的发送功能;
RE 为接收使能位,置位将开启串口的接受功能。

TIM(2~5)

基本设置

TIMx_CR(1~2)
TIMx 控制寄存器 (TIMx control register ).
CEN:计数器使能 (Counter enable)
ARPE:自动重载预装载使能 (Auto-reload preload enable)
位为1时TIMx_ARR 寄存器进行缓冲(在每一次更新事件(UEV)时,才把预装载寄存器(ARR)的内容传送到影子寄存器。)

TIMx_DIER
TIMx DMA/中断使能寄存器 (TIMx DMA/Interrupt enable register) 16 位寄存器.
UIE:更新中断使能 (Update interrupt enable)

TIMx_SR
TIMx 状态寄存器 (TIMx status register)用来标记当前与定时器相关的各种事件/中断是否发生。
UIF:更新中断标志 (Update interrupt flag)
● 该位在发生更新事件时通过硬件置 1。但需要通过软件清零。

TIMx_PSC
TIMx 预分频器 (TIMx prescaler)
预分频器值。

TIMx_CNT
TIMx 计数器 (TIMx counter).
计数器值。

TIMx_SMCR
TIMx 从模式控制寄存器 (TIMx slave mode control register)

TIMx_ARR
TIMx 自动重载寄存器 (TIMx auto-reload register)含影子寄存器。
自动重载值。

PWM相关

TIMx_CCMR1~2

TIMx_CCMR1 控制 CH1 和 2,而 TIMx_CCMR2控制 CH3 和 4。
此寄存器的所有位(CCXS)在输入模式和输出模式下的功能均不同。

TIMx 捕获/比较模式寄存器 (TIMx capture/compare mode register)
OCxM:(Output compare x mode)模式设置位 ,此部分由 3位组成。总共可以配置成 7 种模式。PWM 模式1/2可设置为 110/111。这两种 PWM 模式的区别就是输出电平的极性相反。
CCxS :捕获/比较 x 选择 (Capture/Compare x selection),用于设置通道的方向(输入/输出)默认输出。注意:TIM14 仅有 1 个通道,只有低八位有效。

TIMx_CCER
TIMx 捕获/比较使能寄存器 (TIMx capture/compare enable register).
CCxE :捕获/比较 x 输出使能 (Capture/Compare x output enable)

TIMx_CCR1~4

该寄存器总共有 4 个,对应 4 个通道 CH1~4.

TIMx 捕获/比较寄存器 x (TIMx capture/compare register x)在输出模式下,该寄存器的值与 CNT 的值比较,根据比较结果产生相应动作。

高级定时器还需要配置:刹车和死区寄存器(TIMx_BDTR)

ADC

ADC_CR1
ADC 控制寄存器 1 (ADC control register 1)
SCAN :该位用于设置扫描模式,由软件设置和清除,置1使用扫描模式。在扫描模式下,由 ADC_SQRx 或 ADC_JSQRx 寄存器选中的通道被转换。如果设置了 EOCIE 或 JEOCIE,只在最后一个通道转换完毕后才会产生 EOC 或 JEOC 中断。
RES:分辨率 (Resolution)用于设置 ADC 的分辨率:00-12;01-10;10-8;11-6

ADC_CR2
ADON :A/D 转换器开启 / 关闭 (A/D Converter ON / OFF)。置1使能ADC。
CONT :连续转换 (Continuous conversion)置0单次转换,置1多次转换。
ALIGN :数据对齐 (Data alignment),置0右对齐,置1左对齐。
EXTEN:规则通道的外部触发使能 (External trigger enable for regular channels)使用软件触发设置这 2 个位为 0 即可。
SWSTART :开始转换规则通道 (Start conversion of regular channels)每次转换(单次转换模式下)都需要向该位写1。

ADC_CCR
ADC 通用控制寄存器 (ADC common control register)
TSVREFE :温度传感器和 VREFINT 使能 (Temperature sensor and VREFINT enable)
ADCPRE:ADC 预分频器 (ADC prescaler)用于设置ADC 输入时钟分频,00~11 分别对应2/4/6/8 分频。STM32F4 的 ADC 最大工作频率是 36Mhz, 而 ADC时钟(ADCCLK)来自APB2( 84Mhz),通常设置 ADCPRE=01(4 分频)使得ADCCLK 频率为 21Mhz。
MULTI:多重 ADC 模式选择 (Multi ADC mode selection)。独立模式时设置该5位为0.

ADC_SMPR1~2
ADC 采样时间寄存器 (ADC sample time register )。用于设置通道 0~18 的采样时间,每个通道占用 3 个位。

ADC_SQR1~3
ADC 规则序列寄存器 (ADC regular sequence register )
L:规则通道序列长度 (Regular channel sequence length)可定义规则通道转换序列中的转换总数。
SQ:存储了规则序列中通道的编号(0~18)。

ADC_JSQR
ADC 注入序列寄存器 (ADC injected sequence register)

ADC_DR
ADC 规则数据寄存器 (ADC regular data register)规则序列中的 AD 转化结果都将被存在这个寄存器里面,该寄存器的数据可以通过 ADC_CR2 的 ALIGN 位设置左对齐还是右对齐。

ADC_JDR1~4
ADC 注入数据寄存器 (ADC injected data register x)。注入通道的转换结果被保存在该寄存器里面。

ADC_SR
ADC 状态寄存器 (ADC status register)该寄存器保存了 ADC 转换时的各种状态。
EOC :规则通道转换结束 (Regular channel end of conversion),该位为 1时表示转换已完成。

你可能感兴趣的:(STM32)