当前位置:文档之家› Stm32寄存器列表

Stm32寄存器列表

Stm32寄存器列表
Stm32寄存器列表

PWR电源相关寄存器

PWR_CR(电源控制寄存器)

31302928272625242322212019181716

保留

1514131211109876543210保留DBP PLS[2:0]PVDE CSBF CWUF PDDS LPDS

8位:DBP取消后备区域写保护。复位值为0。定义:0为禁止写入,1为允许写入。注:如果rtc时钟是HSE/128,必须保持为1

7-5位:PVD电源电压检测器的电压阀值。定义:000(2.2v),001(2.3v),010(2.4v),011(2.5v),100(2.6v),101(2.7v),110(2.8v),111(2.9v)

4位:PVDE电源电压检测器(PVD)使能。定义:0(禁止PVD),1(开启PVD)

3位:CSBF清除待机位(始终输出为0)定义:0(无功效),1(清除SBF待机位(写)

2位:CWUF清除唤醒位(始终输出为0)定义:0(无功效),1(2个系统时钟周期后清除WUF唤醒位(写)

1位:PDDS掉电深睡眠(与LPDS位协同操作)定义:0(当CPU进入深睡眠时进入停机模式,调压器状态由LPDS位控制),1(CPU进入深睡眠时进入待机模式)

0位:LPDS深睡眠下的低功耗(PDDS=0时,与PDDS位协同操作)定义:0(在待机模式下电压调压器开启),1(在待机模式下电压调压器处于低功耗模式)

PWR_CSR(电源控制/状态寄存器)

31302928272625242322212019181716

保留

1514131211109876543210保留EWUP保留PVDO SBF WUF

8位:EWUP使能WKUP引脚。定义:0(WKUP为通用IO),1(用于待机唤醒模式,WKUP引脚被强置为输入下拉的配置(WKUP引脚上的上升沿将系统从待机模式唤醒)

注:复位时清除这一位

2位:PVDO-PVD输出(当PVD被PVDE位使能后该位才有效)定义:0(VDD/VDDA高于PLS[2-0]选定的PVD阀值),1(VDD/VDDA低于PLS[2-0]选定的PVD阀值)

注:在待机模式下PVD被停止,因此,待机模式后或复位后,直到设置PVDE位之前,该位为0

1位:SBF待机标志位(该位由硬件设置,并只能由POR/PDR(上电/掉电复位)或设置电源控制寄存器(PWR_CR)的CSBUF位清除)定义:0(不在待机)1(已待机)

0位:WUF唤醒标志(该位由硬件设置,并只能由POR/PDR(上电/掉电复位)或设置电源控制寄存器(PWR_CR)的CWUF位清除)

定义:0(没有唤醒事件),1(在WKUP引脚上发生唤醒事件或出现RTC脑中事件)

1514131211109876543210

15-0位:备份数据由用户来写数据。注:BKP——DRx寄存器不会被系统复位,电源复位,待机唤醒所复位

它可以由备份域复位来复位或(如果入侵检测引脚TAMPER功能被开启时)由浸入引脚事件复位

BKP_RTCCR(RTC时钟校准寄存器)

1514131211109876543210保留ASOS ASOE CCO CAL[6:0]

9位:ASOS闹钟或秒输出(当设置ASOE位,ASOS位可用于选择在TAMPER引脚上输出的是RTC秒脉冲还是闹钟脉冲信号)定义:0(输出RTC闹钟脉冲),1(输出秒脉冲)注:后8位:ASOE允许输出闹钟或秒脉冲(根据ASOS位的置位,该位允许RTC闹钟或秒脉冲输出到TAMPER引脚。脉冲宽度为1个RTC时钟周期。置位时不能开启TAMPER功能)

7位:CCO校准时钟输出。定义:0(无影响),1(此位置1可在侵入检引脚输出经64分频后的RTC时钟。当CCO位置1时,必须关闭侵入检测)注:vdd断电,该位清除

6-0位:CAL校准值。表示在每2的20次方个时钟脉冲内将有多少个脉冲被跳过。这可用来对RTC进行校准,以1000000/(2的20次方比例减慢时钟)可用被减慢0-121ppm

BKP_CR(备份控制寄存器)

1514131211109876543210

保留TPAL TPE

1位:TPAL侵入检测TAMPER引脚有效电平。定义:0(检测TAMPER脚高电平清除备份数据)1(检测TAMPER脚低电平清除备份数据)

2位:TPE启动入侵检测TAMPER引脚。定义:0(TAMPER脚为普通IO),1(开启检测)

注:TPAL、TPE同时置为可用,但同时清零则会出问题。所以推荐在TPE为0时才改变TPAL位状态。

BKP_CSR(备份控制/状态寄存器)

1514131211109876543210保留TIF TEF保留TPIE CTI CTE

9位:TIF侵入中断标志(当检测有侵入事件且TPIE为1时,此为硬件置1,通过向CTI位写1来清除标志位(同时也清除中断)。如果TPIE被清除,此位也会被清除。

定义:0(无侵入),1(检测到侵入)注:仅当系统复位或由待机模式唤醒后才复位该位

8位:TEF侵入事件标志(当检测到侵入事件时此位由硬件置1。通过向CTE位写1可清除此标志位)定义:0(无侵入事件),1(有侵入事件)

注:侵入事件会复位所有的BKP_DRx寄存器。只要TEF为1,所有的BKP_DRx寄存器就一直保持复位状态。当此位被置1时,若对BKP_DRx写操作,则不会保存。

2位:TPIE:允许侵入TAMPER引脚中断。定义0(禁止侵入检测中断),1(允许(BKP_CR寄存器TPE位也必须置1)

注:1、侵入检测无法将系统内核从低功耗模式唤醒,2、仅当系统复位或由待机模式唤醒后才复位该位

1位:CTI清除侵入检测中断(只能写入,读出值为0)定义:0(无效)1(清除侵入检测中断和TIF侵入检测中断标志)

0位:CTE清除侵入检测事件(只能写入,读出值为0)定义:0(无效)1(清除TEF侵入检测事件标志(并复位侵入检测器)

RCC时钟相关寄存器

RCC_CR(时钟控制寄存器)

31302928272625242322212019181716保留PLLRDY PLLON保留CSSON HSEBYP HSERDY HSEON 1514131211109876543210 HSICAL[7:0]HSITRIM[4:0]保留HSIRDY HSION

25位:PLLRDY-PLL时钟就绪标志(PLL锁定后由硬件置1)定义:0(未锁定),1(锁定)

24位:PLLON-PLL使能(手动)定义:0(PLL关闭),1(PLL使能)。进入待机或停机模式时,该位由硬件清零当PLL用作系统始终时,该位不能被清零。

19位:CSSON时钟安全系统使能(由软件置1或清零)定义:0(时钟监测器关闭),1(如果外部4-16M振荡器就绪,时钟监测器开启)

18位:HSEBYP外部高速时钟旁路。定义:0(晶振4-16M),1(有源晶振25M)。调试模式下由软件控制。只有在4-16M振荡器关闭情况下,才能写入该位。

17位:HSERDY外部高速时钟就绪标志(自动)在HSEON位清零后,需6个外部4-25M振荡器周期清零。定义:0(4),

16位:HSEON外部高速时钟使能(软件控制)定义:0(HSE关闭),1(HSE开启)。待机或停机模式硬件清零,当用作系统系统时钟时,该位不能清零。

15-8位:HSICAL[7:0]-内部高速时钟校准。系统启动时,这些位被自动初始化。

7-3位:HSITRIM[4:0]-内部高速时钟调整(软件控制,与HSICAL叠加,相当于手动微调)

1位:HSIRDY内部高速时钟就绪标志硬件置1,在HSION清零后,该位需要6个内部8M振荡周期清零。定义:0(没有就绪),1(有就绪)

0位:HSION内部高速时钟使能(软件控制)当从待机或停机返回用或外部振荡故障时由硬件置1。若使用内部时钟做系统时钟则不能清零。定义:0(关),1(开)

RCC_CFGR(时钟配置寄存器)

31302928272625242322212019181716保留MCO[3:0]保留OTGFSPRE PLLMUL[3:0]PLLXTPRE PLLSRC 1514131211109876543210 ADCPRE[1:0]PPRE2[2:0]PPRE1[2:0]HPRE[3:0]SWS[1:0]SW[1:0]

27-24位:MCO微控制器时钟输出(手动)注:该时钟输出在启动和切换MCO时钟源时可能会被截断。在系统时钟作为MCO引脚时,需保证输出不高于50M

定义:00xx(无输出),0100(系统时钟sysclk输出),0101(内部8M输出),0110(外部25M输出),0111(PLL时钟2分频输出),1000(PLL2输出)

1001(PLL3时钟2分频输出),1010(XT1外部25M输出(为以太网),1011(PLL3时钟输出)

21-18位:PLLMUL-PLL倍频系数(手动)注:只有在PLL关闭的情况下才能被写入,且PLL的输出频率不能超过72M

定义:000x,10xx,1100(保留),0010(PLL4倍),0011(PLL5倍),0100(PLL6倍),0101(PLL7倍),0110(PLL8倍),0111(PLL9倍),1101(PLL6.5倍)

17位:PLLXTPRE-PREDIV1分频因子低位(软件控制)与RCC_CFGR2的0位为同一位。如果RCC_CFGR2[3:1]为000,则该位控制PREDIV1对输入时钟进行2分频(PLLXPRE=1), 或不对输入时钟分频(PLLXPRE=0),只能在关闭PLL时才写入此位

16位:PLL输入时钟源(软件控制,且只能在关闭PLL时才写入此位)定义:0(HIS时钟2分频做PLL输入),1(PREDIV1输出做PLL输入)

注:当改变主PLL的输入时钟源时,必须在选定了新的时钟源后才能关闭原来的时钟源

15/14位:ADCPRE-ADC预分频(手动)定义:00(PCLK2-2分频),01(PCLK2-4分频),10(PCLK2-6分频),11(PCLK2-8分频)

13-11位:PPRE2[2:0]-APB2预分频(手动)定义:0xx(HCLK不分频),100(HCLK2分频),101(HCLK4分频),110(HCLK8分频),111(HCLK16分频)

10-8位:PPRE1[2:0]-APB1预分频(手动)定义:0xx(HCLK不分频),100(HCLK2分频),101(HCLK4分频),110(HCLK8分频),111(HCLK16分频),注小于36

7-4位:HPRE[3:0]-AHB预分频(手动)定义:0xxx(SYSCLK不分频),1000(2分频),1001(4分频),1010(8分频),1011(16分频)

1100(64分频),1101(128分频),1110(256分频),1111(512分频).注:AHB时钟预分频大于1时,必须开预取缓冲器。当使用以太网模块时,频率至少25M

3-2位:SWS[1:0]系统时钟切换状态(自动)定义:00(HIS作为系统时钟),01(HSE做系统时钟),10(PLL做系统时钟),11(不可用)

1-0位:SW系统时钟切换(手动,自动,自动时时钟安全须开启)定义:00(HIS做系统时钟),01(HSE做系统时钟),10(PLL做系统时钟),11(不可用)

RCC_CIR(时钟中断寄存器)

31302928272625242322212019181716保留CSSC保留PLLRDYC HSERDYC HISRDYC LSERDYC LSIRDYC 1514131211109876543210保留PLLRDYIE HSERDYIE HSIRDYIE LSERDYIE LSIRDYIE CSSF保留PLLRDYF HSERDYF HSIRDYF LSERDYF LSIRDYF

23位:CSSC清除时钟安全系统中断(软件置1)定义:0(无作用),1、清除CSSF安全系统中断标志

20位:PLLRDYC清除PLL就绪中断(手动)定义:0(无作用),1(清除PLL就绪中断标志位PLLRDYF)

19位:HSERDYC清除HSE就绪中断(手动)定义:0(无作用),1(清除HSE就绪中断标志位HSERDYF)

18位:HSIRDYC清除HSE就绪中断(手动)定义:0(无作用),1(清除HSI就绪中断标志位HSIRDYF)

17位:LSERDYC清除HSE就绪中断(手动)定义:0(无作用),1(清除LSE就绪中断标志位LSERDYF)

16位:LSIRDYC清除HSE就绪中断(手动)定义:0(无作用),1(清除LSI就绪中断标志位LSIRDYF)

12位:PLLRDYIE-PLL就绪中断使能(手动)定义:0(PLL就绪中断关闭),1(PLL就绪中断使能)

11位:HSERDYIE-HSE就绪中断使能(手动)定义:0(HSE就绪中断关闭),1(HSE就绪中断使能)

10位:HSIRDYIE-HSI就绪中断使能(手动)定义:0(HSI就绪中断关闭),1(HSI就绪中断使能)

9位:LSERDYIE-LSE就绪中断使能(手动)定义:0(LSE就绪中断关闭),1(LSE就绪中断使能)

8位:LSIRDYIE-LSI就绪中断使能(手动)定义:0(LSI就绪中断关闭),1(LSI就绪中断使能)

7位:CSSF时钟安全系统中断标志(自动置1,手动CSSC清除)定义:0(无HSE时钟失效产生的中断),1(HSE时钟失效产生中断)

4位:PLLRDYF-PLL3就绪中断标志(自动置1,手动PLLRDYC清除)定义:0(无PLL上锁产生的时钟就绪中断),1(PLL上锁导致中断)

3位:HSERDYF-HSE就绪中断标志(自动置1,手动HSERDYC清除)0(无中断),1(有中断)

2位:HSIRDYF-HSI就绪中断标志(自动置1,手动HSERDYC清除)0(无中断),1(有中断)

1位:LSERDYF-LSE就绪中断标志(自动置1,手动HSERDYC清除)0(无中断),1(有中断)

0位:LSIRDYF-LSI就绪中断标志(自动置1,手动HSERDYC清除)0(无中断),1(有中断)

RCC_APB2RSTR(APB2外设复位寄存器)

31302928272625242322212019181716

保留

1514131211109876543210 ADC3RST USART1RST TIM8RST SPI1RST TIM1RST ADC2RST ADC1RST IOPGRST IOPFRST IOPERST IOPDRST IOPCRST IOPBRST IOPARST保留AFIORST

12位:SPI1RSTRST-SPI1接口复位(手动)定义:0(无作用),1(复位SPI1接口)

11位:TIM1RST-TIM1接口复位(手动)定义:0(无作用),1(复位TIM1接口)

10位:ADC2RST-ADC2接口复位(手动)定义:0(无作用),1(复位ADC2接口)

9位:ADC1RST-ADC1接口复位(手动)定义:0(无作用),1(复位ADC1接口)

8位:IOPGRST-IOPG接口复位(手动)定义:0(无作用),1(复位IOPG接口)

7位:IOPFRST-IOPF接口复位(手动)定义:0(无作用),1(复位IOPF接口)

6位:IOPERST-IOPE接口复位(手动)定义:0(无作用),1(复位IOPE接口)

5位:IOPDRST-IOPD接口复位(手动)定义:0(无作用),1(复位IOPD接口)

4位:IOPCRST-IOPC接口复位(手动)定义:0(无作用),1(复位IOPC接口)

3位:IOPBRST-IOPB接口复位(手动)定义:0(无作用),1(复位IOPB接口)

2位:IOPARST-IOPA接口复位(手动)定义:0(无作用),1(复位IOPA接口)

0位:AFIORST辅助功能IO复位(手动)定义:0(无作用),1(复位辅助功能)

RCC_APB1RSTR(APB1外设复位寄存器)

31302928272625242322212019181716保留DACRST PWRRST BKPRST保留CANRST保留USBRST I2C2RST I2C1RST UART5RST UART4RST UART3RST UART2RST保留1514131211109876543210 SPI3RST SPI2RST保留WWDGRST保留TIM7RST TIM6RST TIM5RST TIM4RST TIM3RST TIM2TST

29位:DACRST-DAC复位接口(手动)定义:0(无作用),1(复位DAC接口)

28位:PWRRST电源复位接口(手动)定义:0(无作用),1(复位PWR接口)

27位:BKPRST-备份复位接口(手动)定义:0(无作用),1(复位BKP接口)

25位:CANRST-CAN复位接口(手动)定义:0(无作用),1(复位CAN接口)

23位:USBRST-USB复位接口(手动)定义:0(无作用),1(复位USB接口)

22位:I2C2RST-I2C2复位接口(手动)定义:0(无作用),1(复位I2C2接口)

21位:I2C1RST-I2C1复位接口(手动)定义:0(无作用),1(复位I2C1接口)

20位:UART5RST-UART5复位接口(手动)定义:0(无作用),1(复位UART5接口)

19位:UART4RST-UART4复位接口(手动)定义:0(无作用),1(复位UART4接口)

14位:SPI2RST-SPI2复位接口(手动)定义:0(无作用),1(复位SPI2接口)

11位:WWDGRST-WWDG复位接口(手动)定义:0(无作用),1(复位WWDG接口)

5位:TIM7RST-TIM7复位接口(手动)定义:0(无作用),1(复位TIM7接口)

4位:TIM6RST-TIM6复位接口(手动)定义:0(无作用),1(复位TIM6接口)

3位:TIM5RST-TIM5复位接口(手动)定义:0(无作用),1(复位TIM5接口)

2位:TIM4RST-TIM4复位接口(手动)定义:0(无作用),1(复位TIM4接口)

1位:TIM3RST-TIM3复位接口(手动)定义:0(无作用),1(复位TIM3接口)

0位:TIM2RST-TIM2复位接口(手动)定义:0(无作用),1(复位TIM2接口)

RCC_AHBENR(外设时钟使能寄存器)

31302928272625242322212019181716

保留

1514131211109876543210保留SDIOEN保留FSMCEN保留CRCEN保留FLITFEN保留SRAMEN DMA2EN DMA1EN

10位:SDIOEN-SDIO时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

8位:FSMCEN-FSMC时钟使能(手动)定义:0(时钟关闭),2(时钟开启)

6位:CRCEN-CRC时钟使能(手动)定义:0(时钟关闭),3(时钟开启)

4位:FLITFEN-FLITF时钟使能(手动)定义:0(时钟关闭),4(时钟开启)

2位:SRAMEN-SRAM时钟使能(手动)定义:0(时钟关闭),5(时钟开启)

1位:DMA2EN-DMA2时钟使能(手动)定义:0(时钟关闭),6(时钟开启)

0位:DMA1EN-DMA1时钟使能(手动)定义:0(时钟关闭),7(时钟开启)

RCC_APB2ENR(APB2外设时钟使能寄存器)

31302928272625242322212019181716

保留

1514131211109876543210

ADC3EN USART1EN TIM8EN SPI1EN TIM1EN ADC2EN ADC1EN IOPGEN IOPFEN IOPEEN IOPDEN IOPCEN IOPBEN IOPAEN保留AFIOEN

15位:ADC3EN:ADC3接口时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

13位:TIM8EN:TIM8接口时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

12位:SPI1EN:SPI1接口时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

11位:TIM1EN:TIM1接口时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

10位:ADC2EN:ADC2接口时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

9位:ADC1EN:ADC1接口时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

8位:IOPGEN:IOPG接口时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

7位:IOPFEN:IOPF接口时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

6位:IOPEEN:IOPE接口时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

5位:IOPDEN:IOPD接口时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

4位:IOPCEN:IOPC接口时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

3位:IOPBEN:IOPB接口时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

2位:IOPAEN:IOPA接口时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

0位:AFIOEN:AFIO接口时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

RCC_APB1ENR(APB1外设时钟使能寄存器)

31302928272625242322212019181716保留DACEN PWREN BKPEN保留CANEN保留USBEN I2C2EN I2C1EN UART5EN UART4EN UART3EN UART2EN保留1514131211109876543210 SPI3EN SPI2EN保留WWDGEN保留TIM7EN TIM6EN TIM5EN TIM4EN TIM3EN TIM2EN

29位:DACRST-DAC时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

28位:PWRRST电源时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

27位:BKPRST-备份时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

25位:CANRST-CAN时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

23位:USBRST-USB时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

22位:I2C2RST-I2C2时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

21位:I2C1RST-I2C1时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

20位:UART5RST-UART5时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

19位:UART4RST-UART4时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

18位:UART3RST-UART3时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

15位:SPI3RST-SPI3时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

14位:SPI2RST-SPI2时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

11位:WWDGRST-WWDG时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

5位:TIM7RST-TIM7时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

4位:TIM6RST-TIM6时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

3位:TIM5RST-TIM5时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

2位:TIM4RST-TIM4时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

1位:TIM3RST-TIM3时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

0位:TIM2RST-TIM2时钟使能(手动)定义:0(时钟关闭),1(时钟开启)

RCC_BDCR(备份时钟控制寄存器)

31302928272625242322212019181716

保留BDRST 1514131211109876543210 RTCEN保留RTCSEL[1:0]保留LSEBYP LSERDY LSEON

16位:BDRST备份域软件复位(手动)定义:0(复位未激活),1(复位整个备份域)

15位:RTCEN-RTC时钟使能(手动)定义:0(RTC时钟关闭),1(RTC时钟开启)

9-8位:RTCSEL[1:0]RTC时钟源选择(手动)一旦选定,则直到下次后被域被复位前不能改变,可通过设置BDRST来清除

定义:00(无时钟),01(LSE为时钟),10(LSI为时钟),11(HSE振荡器在128分频后做时钟)

2位:LSEBYP低速时钟振荡器旁路(手动)只有在外部振荡器关闭时,才能写入该位低速振荡器周期才被清零。定义:0(无旁路),1(有旁路)

1位:LSERDY外部低速LSE就绪(自动)在LSEON被清零后,该位需要6个低速周期才被清零。定义:0(外部振荡器未就绪),1(外部振荡器就绪)

0位:LSEON外部低速振荡器使能(软件)定义:0(外部振荡器关闭),1(外部振荡器开启)

RCC_CSR(RCC时钟控制/状态寄存器)

31302928272625242322212019181716 LPWRRSTF WWDGRSTF IWDGRSTF SFTRSTF PORRSTF PINRSTF保留RMVF保留

1514131211109876543210

保留LSIRDY LSION

31位:LWRRSTF低功耗复位标志(自动),由软件通过写RMVF位清除,定义:0(无低功耗管理复位发生),1(发生低功耗管理复位)

30位:WWDGRSTF窗口看门狗复位标志(自动),由软件通过写RMVF位清除,定义:0(无复位发生),1(有复位发生)

28位:SFTRSTF软件复位标志(自动)由软件通过写RMVF位清除,定义:0(无复位发生),1(有复位发生)

27位:PORRSTF上电掉电复位标志(自动),由软件通过写RMVF位清除,定义:0(无复位发生),1(有复位发生)

26位:PINRSTF-NRST引脚复位标志(自动),由软件通过写RMVF位清除,定义:0(无复位发生),1(有复位发生)

24位:RMVF清除复位标志(手动),定义:0(无作用),1(清除复位标志)

1位:LSIRDY内部低速振荡器就绪(自动),在LSION清零后,3个内部40K振荡周期后LSIRDY被清零,定义:0(内部未就绪),1(内部RC振荡器开启)

ODR15ODR14ODR13ODR12ODR11ODR10ODR9ODR8ODR7ODR6ODR5ODR4ODR3ODR2ODR1ODR0

15-0位:ODRy端口输出数据(y=15-0)这些位可读可写并只能以字的形式操作。注:对GPIOx_BSRR,可以分别的对各个ODR位进行独立的设置/清除。

GPIOx_BSRR(端口位设置/清除寄存器x=A…e)

31302928272625242322212019181716 BR15BR14BR13BR12BR11BR10BR9BR8BR7BR6BR5BR4BR3BR2BR1BR0 1514131211109876543210 BS15BS14BS13BS12BS11BS10BS9BS8BS7BS6BS5BS4BS3BS2BS1BS0

31-16位:BRy清除端口x的位,这些位只能写入并只能以字的形式操作,定义:0(对应的ODRy位不产生影响),1(清除对应ODRy位为0)

15-0位:Bsy设置端口x的位,这些位只能写入并只能以字的形式操作,定义:0(对应的ODRy位不产生影响),1(设置对应ODRy位为1)

注:如果同时设置了Bsy和Bry的对应位,Bsy位起作用。

GPIOx_BRR(端口位清除寄存器x=A…E)

31302928272625242322212019181716

保留

1514131211109876543210 BR15BR14BR13BR12BR11BR10BR9BR8BR7BR6BR5BR4BR3BR2BR1BR0

15-0位:Bry清除端口x的位(y=15-0)这些位只能写入并只能以字的形式操作,定义:0(对对应位无影响),1(清除对应位的ODR位为0)

GPIOx_LCKR(端口配置锁定寄存器x=A…E)

31302928272625242322212019181716

保留LCKK 1514131211109876543210 LCK15LCK14LCK13LCK12LCK11LCK10LCK9LCK8LCK7LCK6LCK5LCK4LCK3LCK2LCK1LCK0

16位:LCKK锁键,该位可随时读出,它只可通过锁键写入序列修改,定义:0(端口配置锁键位激活),1(端口配置锁位被激活,下次复位前GPIOx_LCKR被锁住)

锁键写序列:写1-》写0-》写1-》读0-》读1 最后一个读可省略,但可以用来确认锁键已被激活

注:在操作锁键的写入序列时,不能改变LCK[15-0]的值,且操作写入序列中的任何错误将不能激活锁键

15-0位:LCKy端口x的锁位y(y=0-15)这些位可读可写但只能在LCKK位为0时写入,定义:0(不锁定端口的配置),1(锁定端口的配置)

AFIO_EVCR(事件控制寄存器)

31302928272625242322212019181716

保留EVOE PORT[2:0]PIN[3:0]

7位:EVOE允许事件输出(手动)当设置该位后,Cortex的EVENOUT将连接到由PORT[2:0]和PIN[3:0]选定的IO口

6-4位:PORT[2:0]端口选择,选择用于输出Cortex的EVENTOUT信号的端口。定义:000(PA),001(PB),010(PC),011(PD),100(PE)

3-0位:PIN[3:0]引脚选择,选择用于输出Cortex的EVENTOUT信号引脚,

定义:0000(选择Px0),0001(选择Px1),0010(选择Px2),0011(选择Px3),0100(选择Px4),0101(选择Px5),0110(选择Px6),0111(选择Px7)

1000(选择Px8),1001(选择Px9),1010(选择Px10),1011(选择Px11),1100(选择Px12),1101(选择Px13),1110(选择Px14),1111(选择Px15)

AFIO_MAPR(复用重映射和调试IO配置寄存器)

31302928272625242322212019181716保留SWJ_CFG[2:0]保留ADC2REG ADC2INJ ADC1REG ADC1INJ TIM5CH4 1514131211109876543210 PD01CAN_REMAP[1:0]TIM4TIM3_REMAP TIM2_REMAP TIM1_REMAP USART3_REMAP USART3USART1I2C SPI1

26-24位:SWJ_CFG[2:0]串行线JTAG配置,这些位只可由软件写,读这些位将返回未定义的数值。用于配置SWJ和跟踪复用功能IO口。SWJ(串行JTAG)

支持JTAG或SWD访问Cortex的调试端口。系统复位后的默认状态时启用SWJ但没有跟踪功能,这种状态下可以通过JTMS/JTCK脚上的特定信号选择JTAG或SW模式 定义:000(完全SWJ,复位状态),001(完全SWJ,但没有NJTRST),010(关闭JATG启动SW),100(关闭JATG,关闭SW)

20位:ADC2_ETRGREG_REMAP-adc2规则转换外部触发重映射(手动)它控制与ADC2注入转换外部触发相连的触发输入。当该位置0时,

ADC2规则转换外部触发与EXTI11相连;当该位置1时,ADC2规则转换外部触发与TIM8_TRGO相连

19位:ADC2_ETRGINJ_REMAP-ADC2注入转换外部触发重映射(手动),它控制与ADC2注入转换外部触发相连的触发输入。当该位置0时

ADC2注入转换外部触发与EXTI15相连;当该位置1时,ADC2注入转换外部触发与TIM8通道4相连。

18位:ADC1_ETRGREG_REMAP-adc1规则转换外部触发重映射(手动)它控制与ADC1注入转换外部触发相连的触发输入。当该位置0时,

ADC1规则转换外部触发与EXTI11相连;当该位置1时,ADC1规则转换外部触发与TIM8_TRGO相连

17位:ADC1_ETRGINJ_REMAP-ADC1注入转换外部触发重映射(手动),它控制与ADC1注入转换外部触发相连的触发输入。当该位置0时

ADC1注入转换外部触发与EXTI15相连;当该位置1时,ADC1注入转换外部触发与TIM8通道4相连。

16位:TIM5CH4_IREMAP-TIM5通道4内部重映射(手动)它控制TIM5通道4内部映像。定义:0(TIM5_CH4与PA3相连),1(LSI内部振荡器与TIM5_CH4相连,对LSI校准)15位:PD01_REMAP端口D0/端口D1映像到OSC_IN/OSC_OUT(手动)当不使用HSE时PD0和PD1可映像到这两个管脚,定义:0(不映像),1(PD0-IN,PD1-OUT)

14-13位:CAN_REMAP[1:0]CAN复用功能重影像(手动)在只有单个CAN接口的产品上控制复用功能的重映像

11-10位:TIM3_REMAP[1:0]定时器3重映像(手动),控制定时器3的1-4通道在GPIO端口的映像

9-8位:TIM2_REMAP[1:0]定时器2重映像(手动)控制定时器2的1-4通道和外部触发ETR在GPIO端口的映像

7-6位:TIM1_REMAP[1:0]定时器1的重映像(手动)控制定时器1的通道1-4、1N-3N、外部触发和刹车输入在GPIO的映像5-4位:USART3_REMAP[1:0]USART3的重映像(手动)控制USART3的CTS、RTS、CK、TX、RX复用功能在GPIO端口的映像3位:USART2_REMAP[1:0]USART3的重映像(手动)控制USART2的CTS、RTS、CK、TX、RX复用功能在GPIO端口的映像

2位:USART1_REMAP-USART1的重映像(手动)控制USART1的TX、RX复用功能在GPIO端口的映像

1位:I2C1_REMAP-I2C1的重映像控制I2C1的SCL和SDA复用功能在GPIO端口的映像

0位:SPI1_REMAP-SPI1的重映像控制SPI1的NSS、SCK、MISO、MOSI复用功能在GPIO端口的映像

中断和事件相关寄存器

AFIO_EXTICR1(外部中断配置寄存器1)

31302928272625242322212019181716

保留

1514131211109876543210 EXTI3[3:0]EXTI2[3:0]EXTI1[3:0]EXTI0[3:0]

15-0位:EXTI[3:0]EXTIx(x=0-3)配置(手动)用于选择EXTIx外部中断输入源

定义:0000(PA[x]引脚),0001(PB[x]引脚),0010(PC[x]引脚),0011(PD[x]引脚),0100(PE[x]引脚),0101(PF[x]引脚),0110(PG[x]引脚)

AFIO_EXTICR2(外部中断配置寄存器2)

31302928272625242322212019181716

保留

1514131211109876543210 EXTI7[3:0]EXTI6[3:0]EXTI5[3:0]EXTI4[3:0]

15-0位:EXTI[3:0]EXTIx(x=4-7)配置(手动)用于选择EXTIx外部中断输入源

定义:0000(PA[x]引脚),0001(PB[x]引脚),0010(PC[x]引脚),0011(PD[x]引脚),0100(PE[x]引脚),0101(PF[x]引脚),0110(PG[x]引脚)

AFIO_EXTICR3(外部中断配置寄存器3)

31302928272625242322212019181716

保留

1514131211109876543210 EXTI11[3:0]EXTI10[3:0]EXTI9[3:0]EXTI8[3:0]

15-0位:EXTI[3:0]EXTIx(x=8-11)配置(手动)用于选择EXTIx外部中断输入源

定义:0000(PA[x]引脚),0001(PB[x]引脚),0010(PC[x]引脚),0011(PD[x]引脚),0100(PE[x]引脚),0101(PF[x]引脚),0110(PG[x]引脚)

AFIO_EXTICR4(外部中断配置寄存器4)

31302928272625242322212019181716

EXTI15[3:0]EXTI14[3:0]EXTI13[3:0]EXTI12[3:0]

15-0位:EXTI[3:0]EXTIx(x=12-15)配置(手动)用于选择EXTIx外部中断输入源

定义:0000(PA[x]引脚),0001(PB[x]引脚),0010(PC[x]引脚),0011(PD[x]引脚),0100(PE[x]引脚),0101(PF[x]引脚),0110(PG[x]引脚)

EXTI_IMR(中断屏蔽寄存器)

31302928272625242322212019181716

保留MR19MR18MR17MR16 1514131211109876543210 MR15MR14MR13MR12MR11MR10MR9MR8MR7MR6MR5MR4MR3MR2MR1MR0

19-0位:MRx线x上的事件屏蔽,定义:0(屏蔽来自线x上的事件请求),1(开放来自线x上的时间请求)注:19只用于互联型,对其他芯片保留

EXTI_EMR(中断屏蔽寄存器)

31302928272625242322212019181716

保留MR19MR18MR17MR16 1514131211109876543210 MR15MR14MR13MR12MR11MR10MR9MR8MR7MR6MR5MR4MR3MR2MR1MR0

19-0位:MRx线x上的事件屏蔽,定义:0(屏蔽来自线x上的事件请求),1(开放来自线x上的时间请求)注:19只用于互联型,对其他芯片保留

EXTI_RTSR(上升沿触发选择寄存器)

31302928272625242322212019181716

保留TR19TR18TR17TR16 1514131211109876543210 TR15TR14TR13TR12TR11TR10TR9TR8TR7TR6TR5TR4TR3TR2TR1TR0

0-19位:TRx线x的上升沿触发时间配置位,定义:0(禁止输入线x上的上升沿触发(中断和事件),1(允许输入线x上的上升沿触发(中断和时间)注19位用于互联型

EXTI_FTSR(下降沿触发选择寄存器)

31302928272625242322212019181716

保留TR19TR18TR17TR16 1514131211109876543210 TR15TR14TR13TR12TR11TR10TR9TR8TR7TR6TR5TR4TR3TR2TR1TR0

EXTI_SWIER

31302928272625242322212019181716

保留SWIER19SWIER18SWIER17SWIER16 1514131211109876543210 SWIER15SWIER14SWIER13SWIER12SWIER11SWIER10SWIER9SWIER8SWIER7SWIER6SWIER5SWIER4SWIER3SWIER2SWIER1SWIER0

19-0位:SWIERx线x上的软件中断,当该位为0时,写1将设置EXTI_PR中相应的挂起位。如果在EXTI_IMR和EXTI_EMR中允许产生中断,则此时将产生一个中断。

注:通过清除EXTI_PR的对应位(写1),可清除该位为0,19位为互联型,对其他芯片为保留

EXTI_PR(挂起寄存器)

31302928272625242322212019181716

保留PR19PR18PR17PR16 1514131211109876543210 PR15PR14PR13PR12PR11PR10PR9PR8PR7PR6PR5PR4PR3PR2PR1PR0

19-0位:PRx挂起位,定义:0(没有发生触发请求),1(发生了选择的触发请求) 注:19位用于互联型,对其他产品为保留位

当在外部中断线上发生了选择的边沿事件,该位被置1。在该位中写入1可以清除它,也可以通过改变边沿检测的极性清除。

DMA相关寄存器

DMA_ISR(DMA中断状态寄存器

31302928272625242322212019181716保留TEIF7HTIF7TCIF7GIF7TEIF6HTIF6TCIF6GIF6TEIF5HTIF5TCIF5GIF5 1514131211109876543210 TEIF4HTIF4TCIF4GIF4TEIF3HTIF3TCIF3GIF3TEIF2HTIF2TCIF2GIF2TEIF1HTIF1TCIF1GIF1

27,23,19,15,11,7,3位:TEIFx通道x的传输错误标志(x=1…7)(硬件控制)在DMA_IFCR寄存器的相应位写1可清除这些标志位,定义:0(无错),1(有错)

26,22,18,14,10,6,2位:HTIFx通道x的办传输标志(x=1…7)(硬件控制)在DMA_IFCR寄存器的相应位写1可清除这写位,定义:0(无半传输事件),1(有)

25,21,17,13,9,5,1位:TCIFx通道x的传输完成标志(x=1…7)(硬件控制)在DMA_IFCR寄存器的相应位写入1可清除这些位,定义:(传输没完成),1(传输完成)24,20,16,12,8,4,0位:GIFx通道x的全局中断标志(x=1…7)(硬件控制)在DMA_IFCR寄存器的相应位写入1可清除这些位,定义:0(没有TE/HT/TC事件),1(有)

DMA_IFCR(DMA中断标志清除寄存器)

31302928272625242322212019181716保留CTEIF7CHTIF7CTCIF7CGIF7CTEIF6CHTIF6CTCIF6CGIF6CTEIF5CHTIF5CTCIF5CGIF5 1514131211109876543210 CTEIF4CHTIF4CTCIF4CGIF4CTEIF3CHTIF3CTCIF3CGIF3CTEIF2CHTIF2CTCIF2CGIF2CTEIF1CHTIF1CTCIF1CGIF1

27,23,19,15,11,7,3位:CTEIFx清除通道x的传输错误标志(x=1…7)(手动)定义:0(无效),1(清除DMA_ISR寄存器中的对应TEIF标志)

26,22,18,14,10,6,2位:CHTIFx清除通道x的办传输标志(x=1…7)(手动)定义:0(无效),1(清除DMA_ISR寄存器中的对应HTIF标志)

25,21,17,13,9,5,1位:CTCIFx清除通道x的传输完成标志(x=1…7)(手动)定义:0(无效),1(清除DMA_ISR寄存器中的对应HTIF标志)

24,20,16,12,8,4,0位:CGIFx清除通道x的全局中断标志(x=1…7)(手动)定义:0(无效),1(清除DMA_ISR寄存器中的对应HTIF标志)

DMA_CCRx(DMA通道x配置寄存器x=1…7)

31302928272625242322212019181716

保留

1514131211109876543210保留MEM2MEM PL[1:0]MSIZE[1:0]PSIZE[1:0]MINC PINC CIRC DIR TEIE HTIE TCIE EN

11和10位:MSIZE[1:0]存储器数据宽度(手动)定义:00(8位),01(16位),10(32位),11(保留)

9和8位PSIZE[1:0]外设数据宽度(手动)定义:00(8位),01(16位),10(32位),11(保留)

7位:MINC存储器地址增量模式(手动)定义:0(不执行存储器地址增量操作),1(执行存储器地址增量操作)

6位:PINC外设地址增量模式(手动)定义:0(不执行存储器地址增量操作),1(执行存储器地址增量操作)

5位:CIRC循环模式(手动)定义:0(不执行循环操作),1(执行循环操作)

4位:DIR数据传输方向(手动)定义:0(从外设读),1(从存储器读)

3位:TEIE允许传输错误中断(手动)定义:0(禁止TE中断),1(允许TE中断)

2位:HEIE允许半传输中断(手动)定义:0(禁止TE中断),1(允许TE中断)

1位:TCIE允许传输完成中断(手动)定义:0(禁止TE中断),1(允许TE中断)

0位:EN开启通道(手动)定义:0(不工作),1(开启)

DMA_CNDTRx(DMA通道x传输数量寄存器x=1…7)

31302928272625242322212019181716

保留

1514131211109876543210

NDT

15-0位:DNT[15:0]数据传输数量,数据传输数量为0到65535。这个寄存器只能在通道不工作(DMA_CCRx的EN=0)时写入,通道开启后该寄存器变为只读指令剩余的

待传输字节数目。寄存器内容在每次DMA传输后递减。数据传输结束后,寄存器的内容或者变为0,或者当该通道配置为自动重加载模式时,寄存器的内容将

被自动重新加载为之前配置时的数值。当寄存器的内容为0时,无论通道是否开启,都不会发生任何数据传输

DMA_CPARx(DMA通道x外设地址寄存器x=1…7)

31302928272625242322212019181716

PA

1514131211109876543210

PA

31-0位:PA[31:0]外设地址,外设数据寄存器的基地址,作为数据传输的源或目标,当开启通道(DMA_CCRx的EN=1)时不能写该寄存器,

当PSIZE=01(16位),不使用PA[0]位。操作自动的与半字节地址对齐,当PSIZE=10(32位)时,不使用PA[1:0]位。操作自动的与字地址对齐

DMA_CMARx(DMA通道x存储器地址寄存器x=1…7)

31302928272625242322212019181716

MA

STM32库函数操作和寄存器操作

STM32库函数操作和寄存器操作 首先,两个都是C语言。从51过渡过来的话,就先说寄存器操作。每个MCU都有自己的寄存器,51是功能比较简单的一种,相应的寄存器也比较少,我们常用的就那么几个,像P0 P1 SMOD TMOD之类的,这些存在于标准头文件reg.h里面,因为少,所以大家就直接这么去操作了,每一位对应的意义随便翻一下手册就看得到,甚至做几个小项目就记的很清楚了。所以做51开发的时候大多数都是直接操作寄存器。 到了STM32,原理一样,也是有自己的寄存器,但是作为一款ARM 内核的芯片,功能多了非常多,寄存器自然也就多了很多,STM32的手册有一千多页,这时候想去像51那样记住每个寄存器已经不现实了,所以ST的工程师就给大家提供了库函数这么一个东西。这是个神器。库函数里面把STM32的所有寄存器用结构体一一对应并且封装起来,而且提供了基本的配置函数。我们要去操作配置某个外设的时候不需要再去翻眼花缭乱的数据手册,直接找到库函数描述拿来就可以用,这样就能把精力放在逻辑代码的开发上,而不是去费力的研究一个芯片的外设要怎么配置寄存器才能驱动起来。简单讲就是这些了,库函数是为了让开发者从大量繁琐的寄存器操作中脱离出来的一个文件包,在使用一个外设的时候让开发者直接去调用相应的驱动函数而不是自己去翻手册一个一个配置寄存器。有人说用库函数掌握不到芯片的精髓,见仁见智了。熟悉一款芯片是在不断的开发使用中逐渐了解并掌握的,调试的过程中会遇到很多问题,会要求我们去跟踪相关寄存器的状态,在整个框架都已经建立起来的基础上再去对照手册做具体到寄存器每一位的分析,代码对照现象,很快就能积累起来经验,祝成功。

STM32单片机GPIO寄存器的功能解析

STM32单片机GPIO寄存器的功能解析 1、GPIO的寄存器按照功能可以分为以下几类: A、配置寄存器 B、数据寄存器 C、位寄存器 D、锁定寄存器 2、对于GPIO端口,每个端口有16个引脚,每个引脚的模式由寄存器的四个位控制,每四位又分为两位控制引脚配置(CNFy[1:0]),两位控制引脚的模式及最高速度(MODEy [1:0]),其中y表示第y个引脚。配置GPIO引脚模式的一共有两个寄存器,CRH是高寄存器,用来配置高8位引脚,还有CRL配置低八位引脚。 3、端口位设置\清除寄存器(GPIOx_BSRR) 一个引脚y的输出数据由GPIOx_BSRR寄存器位的2个位来控制分别为BRy (Bit Reset y)和BSy (Bit Set y),BRy位用于写1清零,使引脚输出低电平,BSy位用来写1置1,使引脚输出高电平。而对这两个位进行写零都是无效的。 4、Cortex-M3有32根地址线,所以它的 寻址空间大小为2 bit=4GB。ARM公司设计时,预先把这4GB的寻址空间大致地分配好了。它把地址从0x4000 0000至0x5FFF FFFF(512MB )的地址分配给片上外设。 5、stm32f10x.h这个文件中重要的内容就是把STM32的所有寄存器进行地址映射。如同51单片机的头文件一样,stm32f10x.h像一个大表格,我们在使用的时候就是通过宏定义进行类似查表的操作。 6、STM32总线有AHB总线、APB2总线、APB1总线 7、时钟系统。 A、从时钟频率来说分为告诉时钟和低速时钟,高速时钟是提供给芯片主体时钟,而低速时钟只是提供给芯片中的RTC及独立看门狗使用。 B、从芯片角度来说,时钟源分为内部时钟与外部时钟源,内部时钟是在芯片内部RC振

STM32f103寄存器说明

CRC寄存器 (一种算法,用以确认发送过程中是否出错)数据寄存器:CRC_DR 可读写,复位值:0xFFFF FFFF; 独立数据寄存器:CRC_IDR 临时存放任何8位数据; 控制寄存器:CRC_CR 只零位可用,用于复位CRC,对其写1复位,由硬件清零; PWR电源控制(控制和管理电源) 电源控制寄存器:PWR_CR 控制选择系统的电源 电源控制/状态寄存器:PWR_CSR 睡眠或待机模式电源控制 BKP备份寄存器(用以控制和管理备份数据) 备份数据寄存器x:BKP_DRx (x = 1 … 10) 10个16位数据寄存器用以存储用户数据 RTC时钟校准寄存器:BKP_RTCCR 控制实时时钟的运行 备份控制寄存器:BKP_CR 控制选择清除备份数据的类型

备份控制/状态寄存器:BKP_CSR 对侵入事件的控制 RCC寄存器(时钟的选择、复位、分频) 时钟控制寄存器(RCC_CR) 各时钟状态显示 时钟配置寄存器(RCC_CFGR) 时钟分频 时钟中断寄存器(RCC_CIR) 控制就绪中断使能与否 APB2外设复位寄存器(RCC_APB2RSTR) APB1外设复位寄存器(RCC_APB1RSTR) 复位APB各功能寄存器 AHB外设时钟使能寄存器(RCC_AHBENR) AHB时钟使能控制 APB2外设时钟使能寄存器(RCC_APB2ENR) APB1外设时钟使能寄存器(RCC_APB1ENR) APB1时钟使能控制 备份域控制寄存器(RCC_BDCR) 备份域时钟控制 控制/状态寄存器(RCC_CSR) 复位标志寄存器 AHB外设时钟复位寄存器(RCC_AHBRSTR) 复位以太网MAC模块 时钟配置寄存器2(RCC_CFGR2) 时钟选择与分频

STM32使用BSRR和BRR寄存器快速操作

STM32使用BSRR和BRR寄存器快速操作 GPI0端口STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSR和GPIOx_BRF寄存器,通过这两个寄存器可以直接对对应的GPIOx端口置“或置“ 0。“ GPIOx_BSRR勺高16位中每一位对应端口x的每个位,对高16位中的某位置“狈『端口x的对应位被清“0;“寄存器中的位置“0, “则对它对应的位不起作 用。 GPIOx_BSRR的氐16位中每一位也对应端口x的每个位,对低16位中的某位置“1则“它对应的端口位被置“1;“寄存器中的位置“0,“则对它对应的端口不起作用。 简单地说GPIOx_BSR的高16位称作清除寄存器,而GPIOx_BSR的低氐16 位称作设置寄存器。另一个寄存器GPIOx_BRfl只有低16位有用,与GPIOx_BSR 的高16位具有相同功能。 举个例子说明如何使用这两个寄存器和所体现的优势。例如GPIOE的16个IO都被设置成输出,而每次操作仅需要改变低8位的数据而保持高8位不变,假设新的8 位数据在变量Newdata 中, 这个要求可以通过操作这两个寄存器实现,STM32的固件库中有两个函数GPIO_SetBits和GPIO_ResetBits使用了这两个寄存器操作端口。 上述要求可以这样实现: GPI0_SetBits(GPI0E, Newdata & 0xff); GPI0_ResetBits(GPI0E, (~Newdata & 0xff)); 也可以直接操作这两个寄存器: GPI0E->BSRR = Newdata & 0xff; GPI0E->BRR = ~Newdata & 0xff; 当然还可以一次完成对8位的操作:

stm32 BKP寄存器操作操作寄存器+库函数

stm32 BKP 寄存器操作操作寄存器+库函数 BKP 是BACKUP 的缩写,stm32f103RCTE 的内部配备了10 个16 位宽度 的BKP 寄存器。在主电源切断或系统产生复位时间时,BKP 寄存器仍然可以 在备用电源的支持下保持其内容。BKP 在实际应用中可以存入重要数据,防止 被恶意查看,或用于断电等。本例实现对BKP 寄存器的读写操作,和入侵检 测和处理。主程序中写入寄存器后,依次打印出10 个BKP 寄存器数据,然后 触发GPIOC13 的入侵中断(输入低电平),在中断中打印出入侵事件发生后的 寄存器内容(复位为0 )。直接操作寄存器用到的寄存器描述如下:备份数据 寄存器x(BKP_DRx) (x = 1 10):低16 位[15:0]有效,用来写入或读出备份数据。备份控制寄存器(BKP_CR):低两位有效。TPAL[1]:侵入检测TAMPER 引脚有效电平(TAMPER pin active level)0:侵入检测TAMPER 引脚上的高电平会清除所有数据备份寄存器(如果TPE 位为1) 1:侵入检测TAMPER 引脚 上的低电平会清除所有数据备份寄存器(如果TPE 位为1)TPE[0]:启动侵入检 测TAMPER 引脚(TAMPER pin enable)0:侵入检测TAMPER 引脚作为通用IO 口使用1:开启侵入检测引脚作为侵入检测使用备份控制/状态寄存器 (BKP_CSR): TIF[9]:侵入中断标志(Tamper interrupt flag) 0:无侵入中断1:产生侵入中断当检测到有侵入事件且TPIE 位为1 时,此位由硬件置1。通过向CTI 位 写1 来清除此标志位(同时也清除了中断)。如果TPIE 位被清除,则此位也会被 清除。TEF[8]:侵入事件标志(Tamper event flag) 0:无侵入事件1:检测到侵入事件当检测到侵入事件时此位由硬件置1。通过向CTE 位写1 可清除此标 志位TPIE[2]:允许侵入TAMPER 引脚中断(TAMPER pin interrupt enable)0:禁止侵入检测中断1:允许侵入检测中断(BKP_CR 寄存器的TPE 位也必须被置1)注

(整理)基于STM32的LCD操作

嵌入式系统》课程报告 基于 STM32的 LCD 操作 组长:曾昭智 组员:邓 宁、张小扬、牛洪澄 光电学院 电信 2班、3 班 2014.05.29 姓名 学院 班级 完成日期

目录 1、原理方案(功能框图介绍) (1) 2、电路连线及资源分配. (2) 3、所用主要器件或模块说明. (3) 4、程序流程图. (4) 5、调试心得. (5) 6、源代码 (6)

1.TFT-LCD 原理 1.1 TFT-LCD 简介 TFT-LCD即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display 。TFT-LCD与无源TN-LCD、STN-LCD 的简单 矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFT-LCD也被叫做真彩液晶显示器。 上一节介绍了OLED模块,这一节,我们给大家介绍ALIENTEK TFTLC模D 块,该模块有如下特点: 1,2.4 '/2.8 '两种大小的屏幕可选。 2,320×240的分辨率。 3,16位真彩显示。 4,自带触摸屏,可以用来作为控制输入。 5,通用的接口,除了ALIENTEK MiniSTM32开发板,该液晶模块还可以使用在优异特、STMSK、Y 红牛等开发板上。 本节,我们以 2.8 寸的ALIENTEKT FTLCD模块为例介绍,该模块采用的是显尚光电的DST2001PHT FTLCD,DST2001PH的控制器为ILI9320 ,采用26 万色的TFTLCD 屏,分辨率为320×240,采用16 位的80并口。 1.2 80 并口 ALIENTEK TFTLCD 模块采用80并口口方与外部链接,采用16位数据线(低了速度太慢,用彩色就没什么效果了)。该模块的80并口有如下一些信号线:CS:TFTLCD 片选信号。 WR:向TFTLCD 写入数据。 RD:从TFTLCD 读取数据。 D[15:0] :16位双向数据线。 RST:硬复位TFTLCD 。 RS:命令/数据标志(0,读写命令;1,读写数据)。 TFTLCD 模块的RST信号线和OLED 模块一样,也是直接接到STM32 的复位脚上,并 不由软件控制,这样可以省下来一个IO 口。另外我们还需要一个背光控制线来控制TFTLCD 的背光。所以,我们总共需要的IO 口数目为21 个。 1.3 ILI9320 模块的控制器为ILI9320 ,该控制器自带显存,其显存总大小为172820 (240*320*18/8 ),即18位模式(26万色)下的显存量。模块的16位数据线与显寸的对应关系为565 方式,如下图所示: 1.4 GRAM显示方向设置

STM32_IO口操作

1、不使用库函数的IO口操作 Systick 部分内容属于NVIC控制部分,一共有4个寄存器 SysTick_CTRL, 0xE000E010 -- 控制寄存器默认值:0x0000 0004 SysTick_LOAD, 0xE000E014 -- 重载寄存器默认值:0x0000 0000 SysTick_VAL, 0xE000E018 -- 当前值寄存器默认值:0x0000 0000 SysTick_CALIB, 0xE000E01C -- 校准值寄存器默认值:0x0002328 SysTick_CTRL 寄存器内有4个bit具有意义 第0位:ENABLE,Systick 使能位(0:关闭Systick功能;1:开启Systick功能) 第1位:TICKINT,Systick 中断使能位(0:关闭Systick中断;1:开启Systick中断) 第2位:CLKSOURCE,Systick时钟源选择(0:使用HCLK/8 作为Systick时钟;1:使用HCLK 作为系统时钟) 第16位:COUNTFLAG,Systick计数比较标志 IO口的位操作实现 该部分代码实现对STM32各个IO口的位操作,包括读入和输出。当然在这些函数调用之前,必须先进行IO口时钟的使能和IO口功能定义。此部分仅仅对IO口进行输入输出读取和控制。代码如下: #define BITBAND(addr,bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) #define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) #define BIT_ADDR(addr,bitnum) MEM_ADDR(BITBAND(addr,bitnum)) //IO口地址映射 #define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C #define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C #define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C #define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C #define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C #define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C #define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C #define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808 #define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08 #define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008 #define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408 #define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808 #define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08 55

STM32中使用GPIO的总结超强

STM32 GPIO使用 操作步骤: 使能GPIO对应的外设时钟 例如://使能GPIOA、GPIOB、GPIOC对应的外设时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC , ENABLE); 声明一个GPIO_InitStructure结构体 例如: GPIO_InitTypeDef GPIO_InitStructure; 选择待设置的GPIO管脚 例如:/* 选择待设置的GPIO 7、8、9管脚位,中间加“|”符号*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; 4. 设置选中GPIO管脚的速率 例如:/* 设置选中GPIO管脚的速率为最高速率2MHz */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //最高速率2MHz GPIO5. 设置选中管脚的模式*/ 设置选中GPIO管脚的模式为开漏输出模式/* 例如://开漏输出模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIOX

中指定的参数初始化外设6. 根据GPIO_InitStructureGPIOC */ GPIO_InitStructure中指定的参数初始化外设根据例如:/* 1 / 16 GPIO_Init(GPIOC, &GPIO_InitStructure); 7.其他应用 例:将端口GPIOA的 10、15脚置1(高电平) GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15); 例:将端口GPIOA的 10、15脚置0(低电平) GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15); GPIO寄存器: 寄存器描述 端口配置低寄存器CRL 端口配置高寄存器CRH 端口输入数据寄存器IDR 端口输出数据寄存器ODR 端口位设置BSRR /复位寄存器 端口位复位寄存器BRR 端口配置锁定寄存器LCKR 事件控制寄存器EVCR

STM32的寄存器操作

STM32的寄存器操作和C51的操作有很大的不同。 要操作STM32可以通过库函数操作,也可直接操作寄存器。 下面分析一下寄存器的操作,以控制PE4脚输出高低电平为例: 首先找到GPIOE的寄存器基地址,如下图:(STM32F4xx中文参考手册.pdf) 找到GPIOE的基地址为:0x4002 1000 我们要操作PE4脚,首先找到BSRR位操作寄存器,如下图 BSRR寄存器偏移地址为:0x18 由于我我们要操作PE4,即操作BSRR寄存器的第4位。 下面编写代码: 首先定义一个指向uint32_t型的指针,之后将该指针指向BSRR寄存器地址:

0x4002 1018 = 0x4002 1000 + 0x0000 00018 此时要操作BSRR寄存器,直接向*p赋值就可以了,如下图: 该代码即可实现PE4脚的高低电平输出。 假如不加延时,如下图: 系统也可正常运行,但在这两行处打断点调试,会发现无法进入,分析原因是两行代码中间无延时,实际运行时几乎可以忽略该代码的操作,所以编译器在编译时自动优化了,此时我们只需要在声明变量的时候为其指明__IO类型变量(volatile)即可,如下图: 上面的例子从最基本的寄存器分析操作STM32的,下面来分析下官方库函数是如何操作寄存器的。 首先定义GPIO寄存器组,通过结构体将寄存器组封包,如下图:

由于以上寄存器地址是连续的,所以可以分在一个结构体中 然后定义GPIOE寄存器组 这里的GPIOE_BASE为GPIOE寄存器的基地址:0x4002 1000 定义了GPIO_TypeDef类型指针GPIOE,并指向了GPIOE寄存器的基地址。此时我们要操作PE4脚状态只需要操作GPIOE->BSRR就可以了, 其它寄存器的操作参考上面的分析即可实现。

Stm32之寄存器列表

学习STM32,官方提供一个库,但如果刚入手的话,肯定连功能都不太清楚,所以用不太习觉得还是操作寄存器来的直接,所以就整理了STM32的大部分寄存器共大家参考。版权归 基本上都是103的,其中107的RCC,USB,和以太网等一些不太重要的没有,但大部分都有我只是把数据手册中的寄存器整理了一下方便大家看。如果有什么不对的,请通知我,也好联系方式:qq 526083029 小树 PWR电源相关寄存器 PWR_CR(电源控制寄存器) 31302928272625242322212019181716 保留 1514131211109876543210保留DBP PLS[2:0]PVDE CSBF CWUF PDDS LPDS 8位:DBP取消后备区域写保护。复位值为0。定义:0为禁止写入,1为允许写入。注:如果rtc时钟是HSE/128,必须保持为1 7-5位:PVD电源电压检测器的电压阀值。定义:000(2.2v),001(2.3v),010(2.4v),011(2.5v),100(2.6v),101(2.7v),110(2.8v),4位:PVDE电源电压检测器(PVD)使能。定义:0(禁止PVD),1(开启PVD) 3位:CSBF清除待机位(始终输出为0)定义:0(无功效),1(清除SBF待机位(写) 2位:CWUF清除唤醒位(始终输出为0)定义:0(无功效),1(2个系统时钟周期后清除WUF唤醒位(写) 1位:PDDS掉电深睡眠(与LPDS位协同操作)定义:0(当CPU进入深睡眠时进入停机模式,调压器状态由LPDS位控制),1(CPU进入深睡眠时进入待机模0位:LPDS深睡眠下的低功耗(PDDS=0时,与PDDS位协同操作)定义:0(在待机模式下电压调压器开启),1(在待机模式下电压调压器处于低功耗模式 PWR_CSR(电源控制/状态寄存器) 31302928272625242322212019181716 保留 1514131211109876543210保留EWUP保留PVDO SBF WUF 8位:EWUP使能WKUP引脚。定义:0(WKUP为通用IO),1(用于待机唤醒模式,WKUP引脚被强置为输入下拉的配置(WKUP引脚上的上升沿将系统从待机模 注:复位时清除这一位 2位:PVDO-PVD输出(当PVD被PVDE位使能后该位才有效)定义:0(VDD/VDDA高于PLS[2-0]选定的PVD阀值),1(VDD/VDDA低于PLS[2-0]选定的PVD阀值 注:在待机模式下PVD被停止,因此,待机模式后或复位后,直到设置PVDE位之前,该位为0 1位:SBF待机标志位(该位由硬件设置,并只能由POR/PDR(上电/掉电复位)或设置电源控制寄存器(PWR_CR)的CSBUF位清除)定义:0(不在待机 0位:WUF唤醒标志(该位由硬件设置,并只能由POR/PDR(上电/掉电复位)或设置电源控制寄存器(PWR_CR)的CWUF位清除) 定义:0(没有唤醒事件),1(在WKUP引脚上发生唤醒事件或出现RTC脑中事件) 注:当WKUP引脚已经是高电平时,在(通过设置EWUP位)使能WKUP引脚时,会检测到一个额外事件 BKP——DRx(x=1...10)(备份数据寄存器) 1514131211109876543210 15-0位:备份数据由用户来写数据。注:BKP——DRx寄存器不会被系统复位,电源复位,待机唤醒所复位 它可以由备份域复位来复位或(如果入侵检测引脚TAMPER功能被开启时)由浸入引脚事件复位 BKP_RTCCR(RTC时钟校准寄存器) 1514131211109876543210

使用BSRR和BRR寄存器直接操作STM32的IO端口

STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSRR和GPIOx_BRR寄存器,通过这两个寄存器可以直接对对应的GPIOx端口置'1'或置'0'。 GPIOx_BSRR的高16位中每一位对应端口x的每个位,对高16位中的某位置'1'则端口x的对应位被清'0';寄存器中的位置'0',则对它对应的位不起作用。 GPIOx_BSRR的低16位中每一位也对应端口x的每个位,对低16位中的某位置'1'则它对应的端口位被置'1';寄存器中的位置'0',则对它对应的端口不起作用。 简单地说GPIOx_BSRR的高16位称作清除寄存器,而GPIOx_BSRR的低16位称作设置寄存器。另一个寄存器GPIOx_BRR只有低16位有效,与GPIOx_BSRR的高16位具有相同功能。 举个例子说明如何使用这两个寄存器和所体现的优势。例如GPIOE的16个IO都被设置成输出,而每次操作仅需要改变低8位的数据而保持高8位不变,假设新的8位数据在变量Newdata 中, 这个要求可以通过操作这两个寄存器实现,STM32的固件库中有两个函数GPIO_SetBits()和GPIO_ResetBits()使用了这两个寄存器操作端口。 上述要求可以这样实现: GPIO_SetBits(GPIOE, Newdata & 0xff); GPIO_ResetBits(GPIOE, (~Newdata & 0xff)); 也可以直接操作这两个寄存器: GPIOE->BSRR = Newdata & 0xff; GPIOE->BRR = ~Newdata & 0xff; 当然还可以一次完成对8位的操作: GPIOE->BSRR = (Newdata & 0xff) | (~Newdata & 0xff)<<16; 从最后这个操作可以看出使用BSRR寄存器,可以实现8个端口位的同时修改操作。 如果不是用BRR和BSRR寄存器,则上述要求就需要这样实现: GPIOE->ODR = GPIOE->ODR & 0xff00 | Newdata; 使用BRR和BSRR寄存器可以方便地快速地实现对端口某些特定位的操作,而不影响其它位的状态。

STM32寄存器操作举例

如何用寄存器的方法操作STM32 这个文章是摘自阿莫论坛,觉得写得很不错,就收藏下来了,整理成文档,希望更多的人能看到 既然我们要操作IO 口,当然就要看IO口相关的知识。打开STM3210x参考手册.pdf ,我的目的只是操作GPIO 所以我只需要将第五章看完就OK了。章节比较多,懒得看,根据一般的经验(楼主,你缺经验了吧?),不说多 就AVR 和PIC 而已。操作IO一般是两个步骤,第一,操作IO控制寄存器,设置IO为输出,第二就是送数据。 那么很明显,只可能是GPIOx_CRL GPIOx_CRH ,GPIOx_ODR 三个寄存器会有想要 仔细阅读这几个寄存器的介绍后知道,GPIOx_CRL 是控制PIN 0-7 的属性的,GPIOx_CRH 控制PIN 8-15,ODR寄存器 当然就是输出数据了,将数据送到这里就行了。 然后,这几个寄存器的地址是多少?首先看stm32f103ve.pdf 这个是官方的datasheet、,看第四章,Mmeory Mapping 为什么看这章?会英文都能猜到吧?,看PORTB 的地址是0x40010C00 - 0x40010FFF ,这个就是基地址了。基地址 加上偏移量就能找到具体的寄存器。 例如我需要操作GPIOB_CRL 的偏移为00H ,(看STM3210x参考手册.pdf)ODR 寄存器的偏移为0CH 那么很自然得出 GPIOB_CRL = 0x40010C00 GPIOB_ODR = 0x40010C0C 怎么验证我的结论正确?先看keil 给的头文件\Keil\ARM\INC\ST\STM32F10x\stm32f10x_map.h #define PERIPH_BASE ((u32)0x40000000) #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00) 这样怎么算都能算出0x40010C00 出来吧??ODR 寄存器同理 为了点亮LED ,我需要将PB5 (也就是GPIOB5)设置为输出,并且ODR相应的位写入1 ,看资料得出MODE5 是 bit 20 21 控制的,CNF5 是bit 22,23 MODE5应该设置10(0x2) 选择2MHZ 输出,CNF5 选择00(0x0),通用推挽模式,于是将这个值写入(*volatile unsigned long)0x40010C00 = (2<<20) | (0<<22); // 为简单起见,不管其他位了

牛人的STM32学习笔记(寄存器版本)

一、GPIO口的配置 STM32的DGPIO口最多可以有7组(GPIOa~GPIOg),而每一组GPIO口均有16个 双向IO组成。并且没个IO口均可配置成8种模式(4种输入模式,4种输出模式)。不管 配置哪个IO口也不论将其配置成哪种模式(但是配置成哪种模式要看具体应用,参考《中 文参考手册》第105页)都可以按以下步骤来进行配置: (1)使能PORTx(x=A~G)时钟 这里就得操作寄存器RCC_APB2ENR(32为寄存器)了 15 14 13 12 11 10 9 8 ADC3EN USART1EN TIM8EN SPI1EN TIM1EN ADC2EN ADC1EN IOPGEN 7 6 5 4 3 2 1 0 IOPFEN IOPEEN IOPDEN IOPCEN IOPBEN IOPAEN 保留AFIOEN RCC_APB2ENR的0~15位(06~32位保留) 第2~8分别是使能GPIOA~GPIOG时钟的,只要将其置“1”即可,如 RCC_APB2ENR|=1<<2;就是使能GPIOA的时钟;其余IO口的始终使能一次类推。 (2)对相应的IO模式进行配置,低8位配置GPIOx_CRL;高8位配置GPIOx_CRH 31 30 29 28 27 26 25 24 CNF7[1:0] MODE7[1:0] CNF6[1:0] MODE6[1:0] 23 22 21 20 19 18 17 16 CNF5[1:0] MODE5[1:0] CNF4[1:0] MODE4[1:0] 15 14 13 12 11 10 9 8 CNF3[1:0] MODE3[1:0] CNF2[1:0] MODE2[1:0] 7 6 5 4 3 2 1 0 CNF1[1:0] MODE1[1:0] CNF0[1:0] MODE0[1:0] GPIOx_CRL(x=A~G(端口配置低寄存器x=A…E) 该寄存器用于配置GPIOx的低8位,具体8种模式的配置见《中文参考手册》例如: GPIOD->CRL&=0XFFFFF0FF;GPIOD->CRL|=0X00000300;/PD.2推挽输出;其余IO口的 低8位以此类推。 31 30 29 28 27 26 25 24 CNF15[1:0] MODE15[1:0] CNF14[1:0] MODE14[1:0] 23 22 21 20 19 18 17 16 CNF13[1:0] MODE13[1:0] CNF12[1:0] MODE12[1:0] 15 14 13 12 11 10 9 8 CNF11[1:0] MODE11[1:0] CNF10[1:0] MODE10[1:0] 7 6 5 4 3 2 1 0 CNF9[1:0] MODE9[1:0] CNF8[1:0] MODE8[1:0] GPIOx_CRH(端口配置高寄存器x=A…E) 该寄存器用于配置GPIOx的高8位,具体8种模式的配置见《中文参考手册》例如: GPIOA->CRH&=0XFFFFFFF0;;GPIOA->CRH|=0X00000003;//PA8 推挽输出;其余IO口 的高8位以此类推。

stm32寄存器

(一种算法,用以确认发送过程中是否出错)数据寄存器:CRC_DR 可读写,复位值:0xFFFF FFFF; 独立数据寄存器:CRC_IDR 临时存放任何8位数据; 控制寄存器:CRC_CR 只零位可用,用于复位CRC,对其写1复位,由硬件清零; PWR电源控制(控制和管理电源) 电源控制寄存器:PWR_CR 控制选择系统的电源 电源控制/状态寄存器:PWR_CSR 睡眠或待机模式电源控制 BKP备份寄存器(用以控制和管理备份数据) 备份数据寄存器x:BKP_DRx (x = 1 … 10) 10个16位数据寄存器用以存储用户数据 RTC时钟校准寄存器:BKP_RTCCR 控制实时时钟的运行 备份控制寄存器:BKP_CR 控制选择清除备份数据的类型 备份控制/状态寄存器:BKP_CSR 对侵入事件的控制

(时钟的选择、复位、分频) 时钟控制寄存器(RCC_CR) 各时钟状态显示 时钟配置寄存器(RCC_CFGR) 时钟分频 时钟中断寄存器(RCC_CIR) 控制就绪中断使能与否 APB2外设复位寄存器(RCC_APB2RSTR) APB1外设复位寄存器(RCC_APB1RSTR) 复位APB各功能寄存器 AHB外设时钟使能寄存器(RCC_AHBENR) AHB时钟使能控制 APB2外设时钟使能寄存器(RCC_APB2ENR) APB1外设时钟使能寄存器(RCC_APB1ENR) APB1时钟使能控制 备份域控制寄存器(RCC_BDCR) 备份域时钟控制 控制/状态寄存器(RCC_CSR) 复位标志寄存器 AHB外设时钟复位寄存器(RCC_AHBRSTR) 复位以太网MAC模块 时钟配置寄存器2(RCC_CFGR2) 时钟选择与分频

STM32的FLASH操作

关于STM32的FLASH操作 说到STM32的FLSAH,我们的第一反应是用来装程序的,实际上,STM32的片内FLASH不仅用来装程序,还用来装芯片配置、芯片ID、自举程序等等。当然,FLASH还可以用来装数据。 FLASH分类 根据用途,STM32片内的FLASH分成两部分:主存储块、信息块。 主存储块用于存储程序,我们写的程序一般存储在这里。 信息块又分成两部分:系统存储器、选项字节。 系统存储器存储用于存放在系统存储器自举模式下的启动程序(BootLoader),当使用ISP方式加载程序时,就是由这个程序执行。这个区域由芯片厂写入BootLoader,然后锁死,用户是无法改变这个区域的。 选项字节存储芯片的配置信息及对主存储块的保护信息。 FLASH的页面 STM32的FLASH主存储块按页组织,有的产品每页1KB,有的产品每页2KB。页面典型的用途就是用于按页擦除FLASH。从这点来看,页面有点像通用FLASH的扇区。 STM32产品的分类 STM32根据FLASH主存储块容量、页面的不同,系统存储器的不同,分为小容量、中容量、大容量、互联型,共四类产品。 小容量产品主存储块1-32KB,每页1KB。系统存储器2KB。 中容量产品主存储块64-128KB,每页1KB。系统存储器2KB。 大容量产品主存储块256KB以上,每页2KB。系统存储器2KB。 互联型产品主存储块256KB以上,每页2KB。系统存储器18KB。 对于具体一个产品属于哪类,可以查数据手册,或根据以下简单的规则进行区分:STM32F101xx、STM32F102xx 、STM32F103xx产品,根据其主存储块容量,一定是小容量、中容量、大容量产品中的一种,STM32F105xx、STM32F107xx 是互联型产品。 互联型产品与其它三类的不同之处就是BootLoader的不同,小中大容量产品的BootLoader只有2KB,只能通过USART1进行ISP,而互联型产品的BootLoader 有18KB,能通过USAT1、4、CAN等多种方式进行ISP。小容量产品、中容量产品的BootLoader与大容量产品相同。 关于ISP与IAP ISP(In System Programming)在系统编程,是指直接在目标电路板上对芯片进行编程,一般需要一个自举程序(BootLoader)来执行。ISP也有叫ICP(In Circuit Programming)、在电路编程、在线编程。 IAP(In Application Programming)在应用中编程,是指最终产品出厂后,由最终用户在使用中对用户程序部分进行编程,实现在线升级。IAP要求将程序分成两部分:引导程序、用户程序。引导程序总是不变的。IAP也有叫在程序中编程。ISP与IAP的区别在于,ISP一般是对芯片整片重新编程,用的是芯片厂的自举程序。而IAP只是更新程序的一部分,用的是电器厂开发的IAP引导程序。综

Stm32f103寄存器整理

313029282726252423222120191817 16151413121110987654321 DBP PVDE CSBF CWUF PDDS LPDS 313029282726252423222120191817 16151413121110987654321 EWUP PVDO SBF WUF 151413121110987654321 15-0位:备份数据由用户来写数据。注:BKP——DRx寄存器不会被系统复位,电源复位,待机唤醒所复位 它可以由备份域复位来复位或(如果入侵检测引脚TAMPER功能被开启时)由浸入引脚事件复位 BKP BKP__RTCCR RTCCR((RTC RTC时钟校准寄存器时钟校准寄存器时钟校准寄存器)) 0位:WUF唤醒标志(该位由硬件设置,并只能由POR/PDR(上电/掉电复位)或设置电源控制寄存器(PWR_CR)的CWUF位清除) 定义:0(没有唤醒事件),1(在WKUP引脚上发生唤醒事件或出现RTC脑中事件) 注:当WKUP引脚已经是高电平时,在(通过设置EWUP位)使能WKUP引脚时,会检测到一个额外事件 BKP——DRx BKP——DRx((x =1......101010)()()(备份数据寄存器备份数据寄存器备份数据寄存器)) 注:复位时清除这一位 2位:PVDO-PVD输出(当PVD被PVDE位使能后该位才有效)定义:0(VDD/VDDA高于PLS[2-0]选定的PVD阀值),1(VDD/VDDA低于PLS[2-0]选定的PVD阀值) 注:在待机模式下PVD被停止,因此,待机模式后或复位后,直到设置PVDE位之前,该位为0 1位:SBF待机标志位(该位由硬件设置,并只能由POR/PDR(上电/掉电复位)或设置电源控制寄存器(PWR_CR)的CSBUF位清除)定义:0(不在待机)1(已待机)3位:CSBF清除待机位(始终输出为0)定义:0(无功效),1(清除SBF待机位(写) 2位:CWUF清除唤醒位(始终输出为0)定义:0(无功效),1(2个系统时钟周期后清除WUF唤醒位(写) 1位:PDDS掉电深睡眠(与LPDS位协同操作)定义:0(当CPU进入深睡眠时进入停机模式,调压器状态由LPDS位控制),1(CPU进入深睡眠时进入待机模式)8位:EWUP使能WKUP引脚。定义:0(WKUP为通用IO),1(用于待机唤醒模式,WKUP引脚被强置为输入下拉的配置(WKUP引脚上的上升沿将系统从待机模式唤醒)0位:LPDS深睡眠下的低功耗(PDDS=0时,与PDDS位协同操作)定义:0(在待机模式下电压调压器开启),1(在待机模式下电压调压器处于低功耗模式) PWR PWR__CSR CSR((电源控制电源控制//状态寄存器状态寄存器)) 保留 保留保留7-5位:PVD电源电压检测器的电压阀值。定义:000(2.2v),001(2.3v),010(2.4v),011(2.5v),100(2.6v),101(2.7v),110(2.8v),111(2.9v)8位:DBP取消后备区域写保护。复位值为0。定义:0为禁止写入,1为允许写入。注:如果rtc时钟是HSE/128,必须保持为1 4位:PVDE电源电压检测器(PVD)使能。定义:0(禁止PVD),1(开启PVD) PWR PWR__CR CR((电源控制寄存器电源控制寄存器)) 保留 保留PLS[2:0]PWR PWR电源相关寄存器电源相关寄存器

STM32使用BSRR和BRR寄存器快速操作GPIO端口方法说明

STM32使用BSRR和BRR寄存器快速操作GPIO端口STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSRR和GPIOx_BRR寄存器,通过这两个寄存器可以直接对对应的GPIOx端口置'1'或置'0'。 GPIOx_BSRR的高16位中每一位对应端口x的每个位,对高16位中的某位置'1'则端口x 的对应位被清'0';寄存器中的位置'0',则对它对应的位不起作用。 GPIOx_BSRR的低16位中每一位也对应端口x的每个位,对低16位中的某位置'1'则它对应的端口位被置'1';寄存器中的位置'0',则对它对应的端口不起作用。 简单地说GPIOx_BSRR的高16位称作清除寄存器,而GPIOx_BSRR的低16位称作设置寄存器。另一个寄存器GPIOx_BRR只有低16位有效,与GPIOx_BSRR的高16位具有相同功能。 举个例子说明如何使用这两个寄存器和所体现的优势。例如GPIOE的16个IO都被设置成输出,而每次操作仅需要改变低8位的数据而保持高8位不变,假设新的8位数据在变量Newdata中, 这个要求可以通过操作这两个寄存器实现,STM32的固件库中有两个函数GPIO_SetBits()和GPIO_ResetBits()使用了这两个寄存器操作端口。 上述要求可以这样实现: GPIO_SetBits(GPIOE, Newdata & 0xff); GPIO_ResetBits(GPIOE, (~Newdata & 0xff)); 也可以直接操作这两个寄存器: GPIOE->BSRR = Newdata & 0xff;

GPIOE->BRR = ~Newdata & 0xff; 当然还可以一次完成对8位的操作: GPIOE->BSRR = (Newdata & 0xff) | (~Newdata & 0xff)<<16; 从最后这个操作可以看出使用BSRR寄存器,可以实现8个端口位的同时修改操作。 如果不是用BRR和BSRR寄存器,则上述要求就需要这样实现: GPIOE->ODR = GPIOE->ODR & 0xff00 | Newdata; 使用BRR和BSRR寄存器可以方便地快速地实现对端口某些特定位的操作,而不影响其它位的状态。 比如希望快速地对GPIOE的位7进行翻转,则可以: GPIOE->BSRR = 0x80; // 置'1' GPIOE->BRR = 0x80; // 置'0' 如果使用常规'读-改-写'的方法: GPIOE->ODR = GPIOE->ODR | 0x80; // 置'1' GPIOE->ODR = GPIOE->ODR & 0xFF7F; // 置'0' 有人问是否BSRR的高16位是多余的,请看下面这个例子: 假如你想在一个操作中对GPIOE的位7置'1',位6置'0',则使用BSRR非常方便:

基于寄存器操作的STM32高级定时器TIM1的四路PWM输出程序讲解

经过一天的努力,终于把stm32 tim1的四路pwm输出搞了出来,为了使大家快速的用起tim1,打算写这篇文档与大家分享。 stm32 tim1功能丰富。针对pwm输出与tim2只有细小的差别,之前在网上找了一些网友的程序,发现大部分都是基于库文件写的,不能对tim1的pwm输出有深层次的理解,个人认为一个合格的程序员,想要最大程度的用好一个片子的话还是要针对寄存器直接操作,完全了解定时器的运行过程,可以对片子的结构有一定的了解。 高级控制定时器(TIM1 和TIM8) 由一个16位的自动装载计数器组成,它由一个可编程的预分频器驱动。它适合多种用途,包含测量输入信号的脉冲宽度( 输入捕获) ,或者产生输出波形( 输出比较、PWM、嵌入死区时间的互补PWM等)。使用定时器预分频器和RCC 时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。 高级控制定时器(TIM1 和TIM8) 和通用定时器(TIMx) 是完全独立的,它们不共享任何资源。 请读者仔细阅读一下信息: 脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。在TIMx_CCMRx寄存器中的OCxM位写入’110’(PWM 模式1) 或’111’(PWM 模式2) ,能够独立地设置每个OCx输出通道产生一路PWM。必须通过设置TIMx_CCMRx寄存器的OCxPE位使能相应的预装载寄存器,最后还要设置TIMx_CR1 寄存器的ARPE 位,( 在向上计数或中心对称模式中)使能自动重装载的预装载寄存器。仅当发生一个更新事件的时候,预装载寄存器才能被传送到影子寄存器,因此在计数器开始计数之前,必须通过设置TIMx_EGR寄存器中的UG位来初始化所有的寄存器。OCx的极性可以通过软件在TIMx_CCER寄存器中的CCxP位设置,它可以设置为高电平有效或低电平有效。OCx的输出使能通过(TIMx_CCER和TIMx_BDTR寄存器中)CCxE、CCxNE、MOE、OSSI和OSSR 位的组合控制。详见TIMx_CCER寄存器的描述。在PWM模式(模式1或模式2) 下,TIMx_CNT 和TIMx_CCRx始终在进行比较,( 依据计数器的计数方向)以确定是否符合TIMx_CCRx≤TIMx_CNT或者TIMx_CNT≤TIMx_CCRx。根据TIMx_CR1 寄存器中CMS位的状态,定时器能够产生边沿对齐的PWM信号或中央对齐的PWM信号。 根据以上信息的提示,我们可以归纳出寄存器操作的步骤: (1)使能相应的定时器时钟线。 (2)配置tim1四路pwm输出引脚为复用功能输出。 (3)配置tim1的分频比和计数装载值。 (4)配置相应通道的pwm输出模式和使能预装载。 (5)打开自动重装载预装载允许位。 (6)根据需要选择向上或者是向下计数模式。 (7)打开相应通道的输出使能。 (8)配置各通道的占空比。 (9)开启开启OC和OCN。 (10)最后使能定时器1. 关于分频比和计数装载值的选择: Tim1的最大时钟频率为72M,假设我们想得到一个频率为4KHZ,占空比0~100%步进为1的pwm。根据计数器的时钟频率(CK_CNT) 等于f CK_PSC/( PSC[15:0]+1)。因为占空比0~100%步进为1,所以我们把计数值设为100.比较值可以设为0~100之间,实现占空比的调节。计数器的时钟频率(CK_CNT)应为4KHZ X 100=400KHZ。所以PSC = 179。ARR=100。有不明白的请看手册。

相关主题
文本预览
相关文档 最新文档