STM32复位和时钟控制(RCC)

合集下载

STM32L4复位和时钟控制(RCC)介绍

STM32L4复位和时钟控制(RCC)介绍
• MSI by default
Clocks: PLL
• 3 PLLs
• Each with 3 independent outputs • PLLs input frequency must be between 4 and 16 MHz • PLL input can be MSI/HSI or HSE f(VCO clock) = (f(PLL clock input)/PLLM) × PLLN f(PLL_P) = f(VCO clock) / PLLP f(PLL_Q) = f(VCO clock) / PLLQ f(PLL_R) = f(VCO clock) / PLLR PLLM from 1 to 8 PLLN from 8 to 86 PLLP = 7 or 17 PLLQ = 2, 4, 6, 8 PLLR = 2, 4, 6, 8
100 kHz, 200 kHz, 400 kHz, 800 kHz, 1 MHz, 2 MHz, 4 MHz (reset value), 8 MHz, 16 MHz, 24 MHz, 32 MHz, 48 MHz.
89
• After Reset and Shutdown, MSI frequency is 4 MHz, selected by MSISRANGE in RCC_CSR register • After Standby: Frequency selected from 1, 2, 4 or 8 MHz with MSISRANGE in RCC_CSR register. • MSIRGSEL must be set in RCC_CR to switch to the frequency selected by MSIRANGE

STM32微控制器寄存器说明

STM32微控制器寄存器说明

PLLXTPRE:HSE 分频器作为 PLL 输入(HSE divider for PLL entry)。由软件
置‘1’或清‘0’来分频 HSE 后作为 PLL 输入时钟。只能在关闭 PLL 时才能
写入此位。
0:HSE 不分频; 1:HSE 2 分频
PLLSRC:PLL 输入时钟源(PLL entry clock source)。由软件置‘1’或清‘0’
保 HSI HSI
留 RDY ON
位 31:26 位 25 位 24
位 23:20 位 19 位 18
位 17
位 16
位 15:8 位 7:3
保留,始终读为 0。 PLLRDY:PLL 时钟就绪标志(PLL clock ready flag)。PLL 锁定后由硬件置‘1’。 0:PLL 未锁定; 1:PLL 锁定。 PLLON:PLL 使能(PLL enable)。由软件置‘1’或清零。当进入待机和停止 模式时,该位由硬件清零。当 PLL 时钟被用作或被选择将要作为系统时钟时, 该位不能被清零。 0:PLL 关闭; 1:PLL 使能。 保留,始终读为 0。 CSSON:时钟安全系统使能(Clock security system enable)。由软件置‘1’或 清零以使能时钟监测器。 0:时钟监测器关闭; 1:如果外部 4-16MHz 振荡器就绪,时钟监测器开启。 HSEBYP:外部高速时钟旁路(External high-speed clock bypass)。在调试模式 下由软件置‘1’或清零来旁路外部晶体振荡器。只有在外部 4-16MHz 振荡器 关闭的情况下,才能写入该位。 0:外部 4-16MHz 振荡器没有旁路; 1:外部 4-16MHz 外部晶体振荡器被旁路。 HSERDY:外部高速时钟就绪标志(External high-speed clock ready flag)。由硬 件置‘1’来指示外部 4-16MHz 振荡器已经稳定。在 HSEON 位清零后,该位 需要 6 个外部 4-16MHz 振荡器周期清零。 0:外部 4-16MHz 振荡器没有就绪; 1:外部 4-16MHz 振荡器就绪。 HSEON:外部高速时钟使能(External high-speed clock enable)。由软件置‘1’ 或清零。当进入待机和停止模式时,该位由硬件清零,关闭 4-16MHz 外部振荡 器。当外部 4-16MHz 振荡器被用作或被选择将要作为系统时钟时,该位不能被 清零。 0:HSE 振荡器关闭; 1:HSE 振荡器开启。 HSICAL[7:0]:内部高速时钟校准(Internal high-speed clock calibration)。系统 启动时,这些位被自动初始化。 HSITRIM[4:0]:内部高速时钟调整(Internal high-speed clock trimming)。由软 件写入来调整内部高速时钟,它们被叠加在 HSICAL[7:0]数值上。这些位在

STM32F103的复位及时钟控制模块头文件

STM32F103的复位及时钟控制模块头文件

STM32F103的复位及时钟控制模块头文件在处理器正常工作前,肯定要做一些初始化工作,其中最主要的一个就是初始化各种时钟。

通过对STM32F103的复位及时钟控制(RCC)模块分析之后,自己写了一个RCC的头文件,这样使用起来更方便。

头文件中首先定义了最基本的几个寄存器,然后再对每个寄存器中的域使用结构体做了定义,可以直接使用寄存器中的位来操作。

注意设置系统时钟时要先设置好FLASH的等待周期,不然程序就可能会跑飞。

该测试工程是在以前的GPIO实验的基础上增加系统时钟初始化代码,设置系统时钟为72M。

通过流水灯可以看到,比未配置系统时钟之前(8M)流水灯的速度快了很多。

从这里下载完整的测试工程:系统时钟初始化的代码如下://以下时钟配置为最高性能void SystemClockInit(void){//设置flash等待周期为2,否则设置为72M系统时钟时就会跑飞FLASH_ACR=0x32;pbRCC_CR->HSEON=1; //使能外部高速时钟while(!(pbRCC_CR->HSERDY)); //等待外部高速时钟稳定pbRCC_CFGR->MCO=0; //MCO无时钟输出pbRCC_CFGR->USBPRE=1; //USB时钟1.5分频pbRCC_CFGR->PLLMUL=9-2; //PLL倍频设置为9倍(外部时钟8M,PLL输出72M)pbRCC_CFGR->PLLXTPRE=0; //HSE不分频pbRCC_CFGR->PLLSRC=1; //HSE选作做为PLL时钟源输入pbRCC_CFGR->ADCPRE=0; //ADC时钟2分频pbRCC_CFGR->PPRE2=1+6; //APB2设置为1分频pbRCC_CFGR->PPRE1=2+6; //APB1设置为2分频pbRCC_CFGR->HPRE=0; //AHB无分频pbRCC_CR->PLLON=1; //启动PLLwhile(!(pbRCC_CR->PLLRDY)); //等待PLL稳定pbRCC_CFGR->SW=2; //选择PLL输出为时钟源//pbRCC_AHBENR->SRAMEN=1;//pbRCC_AHBENR->FLITFEN=1;//IO口第二功能时钟使能pbRCC_APB2ENR->AFIOEN=1;//各通用IO口时钟使能pbRCC_APB2ENR->IOPAEN=1;pbRCC_APB2ENR->IOPBEN=1;pbRCC_APB2ENR->IOPCEN=1;pbRCC_APB2ENR->IOPDEN=1;pbRCC_APB2ENR->IOPEEN=1;//ADC时钟使能pbRCC_APB2ENR->ADC1EN=1;pbRCC_APB2ENR->ADC2EN=1;//定时器1时钟使能//SPI1时钟使能pbRCC_APB2ENR->SPI1EN=1;//串口1时钟使能pbRCC_APB2ENR->USART1EN=1;//定时器2、3、4时钟使能pbRCC_APB1ENR->TIM2EN=1; pbRCC_APB1ENR->TIM3EN=1; pbRCC_APB1ENR->TIM4EN=1;//窗口看门狗时钟不使能pbRCC_APB1ENR->WWDGEN=0;//SPI2时钟使能pbRCC_APB1ENR->SPI2EN=1;//串口2、3时钟使能pbRCC_APB1ENR->USART2EN=1; pbRCC_APB1ENR->USART3EN=1;//I2C1、2时钟使能pbRCC_APB1ENR->I2C2EN=1;//USB时钟使能pbRCC_APB1ENR->USBEN=1;//CAN时钟使能pbRCC_APB1ENR->CANEN=1;//备份接口时钟使能pbRCC_APB1ENR->BKPEN=1;//电源接口时钟使能pbRCC_APB1ENR->PWREN=1;//外部低速时钟启动pbRCC_BDCR->LSEON=1;pbRCC_BDCR->LSEBYP=0;pbRCC_BDCR->RTCSEL=1; //选择外部时钟为RTC时钟}STM32/STM8意法半导体/ST/STM。

STM32系统时钟RCC(基于HAL库)

STM32系统时钟RCC(基于HAL库)

STM32系统时钟RCC(基于HAL库)基础认识为什么要有时钟:时钟就是单⽚机的⼼脏,其每跳动⼀次,整个单⽚机的电路就会同步动作⼀次。

时钟的速率决定了两次动作的间隔时间。

速率越快,单⽚机在单位时间内所执⾏的动作将越多。

时钟是单⽚机运⾏的基础,时钟信号推动单⽚机内各个部分执⾏相应的指令。

时钟系统就是CPU的脉搏,决定cpu速率。

为什么这么多个时钟源:STM32系统是复杂的,⾼精度、低精度、⾼速、低速等,且可以对每个时钟源进⾏开关操作,可以把不需要使⽤的关闭掉。

这可以让单⽚机适⽤更多的环境中,把选择权利交个了开发者,开发者可以从精度、功耗、资源等多⽅⾯考虑。

STM32时钟:从时钟源的⾓度可分为:l 外部时钟(E)l 内部时钟(I)从时钟速率的⾓度分为:l ⾼速时钟(HS)l 低速时钟(LS)STM32在芯⽚复位后默认选⽤的是内部的⾼速时钟(HSI)进⾏⼯作,如果需要使⽤外部⾼速时钟(HSE)的话需要经过软件操作相关的寄存器配置。

外部时钟模式外部的⾼速和低速时钟均有这三个可选项⽬,图中是CubeMX提供的外部时钟选择:可选类型为l Disable(关闭,不使⽤外部时钟)l BYPASS Clock Source(旁路时钟源)l Crystal/Ceramic Resonator(外部晶体/陶瓷谐振器)外部晶体/陶瓷谐振器模式该模式较为常见,这可以为系统时钟提供较为精确的时钟源。

该时钟源是由外部⽆源晶体与MCU内部时钟驱动电路共同配合形成,有⼀定的启动时间,精度较⾼。

为了减少时钟输出的失真和缩短启动稳定时间,晶体/陶瓷谐振器和负载电容必须尽可能地靠近振荡器引脚。

负载电容值必须根据所选择的晶体来具体调整。

整体上讲,陶瓷晶体和⽯英晶体的主要区别就在于精度和温度稳定性上。

⽯英晶体⽐陶瓷晶体精度要⾼,温度稳定性要好。

旁路时钟源模式该模式下必须提供外部时钟。

外部时钟信号(50%占空⽐的⽅波、正弦波或三⾓波)必须连到SOC_IN引脚,此时OSC_OUT引脚对外呈⾼阻态。

stm32基于库函数--RCC时钟配置

stm32基于库函数--RCC时钟配置

stm32基于库函数--RCC时钟配置1.时钟复位RCC_DeInit();2.开启HSERCC_HSEConfig(RCC_HSE_ON);3.选择PLL倍频HSERCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);4.设置系统时钟为PLL后的时钟RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);5.设置系统各部分时钟/* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */RCC_HCLKConfig(RCC_SYSCLK_Div1);/* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */RCC_PCLK2Config(RCC_HCLK_Div1);/* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */RCC_PCLK1Config(RCC_HCLK_Div2);6.开启功能时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);7.综合示例代码void RCC_Configuration(void) {/* 定义枚举类型变量 HSEStartUpStatus */ErrorStatus HSEStartUpStatus;/* 复位系统时钟设置*/RCC_DeInit();/* 开启HSE*/RCC_HSEConfig(RCC_HSE_ON);/* 等待HSE起振并稳定*/HSEStartUpStatus = RCC_WaitForHSEStartUp();/* 判断HSE起是否振成功,是则进入if()内部 */if(HSEStartUpStatus == SUCCESS) {/* 选择HCLK(AHB)时钟源为SYSCLK 1分频 */RCC_HCLKConfig(RCC_SYSCLK_Div1);/* 选择PCLK2时钟源为 HCLK(AHB) 1分频 */RCC_PCLK2Config(RCC_HCLK_Div1);/* 选择PCLK1时钟源为 HCLK(AHB) 2分频 */RCC_PCLK1Config(RCC_HCLK_Div2);/* 设置FLASH延时周期数为2 */FLASH_SetLatency(FLASH_Latency_2);/* 使能FLASH预取缓存 */FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/* 使能PLL */RCC_PLLCmd(ENABLE);/* 等待PLL输出稳定 */while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);/* 选择SYSCLK时钟源为PLL */RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/* 等待PLL成为SYSCLK时钟源 */while(RCC_GetSYSCLKSource() != 0x08); }/* 打开APB2总线上的GPIOA时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_AP B2Periph_USART1, ENABLE);}2018-7-15 11:41:46 meetwit。

STM32F0系列寄存器操作02RCC时钟配置

STM32F0系列寄存器操作02RCC时钟配置

STM32F0系列寄存器操作02RCC时钟配置对于STM32F0系列的RCC时钟配置,以下是一个超过1200字的例子:RCC(Reset and Clock Control)是用于配置和控制STM32F0系列微控制器的时钟的模块。

时钟系统对于微控制器的运行非常重要,因为它影响到系统的性能、功耗和稳定性。

在使用STM32F0系列微控制器时,首先需要配置RCC模块的寄存器,以确定各种时钟源的频率、分频系数和使能状态。

以下是配置RCC模块的步骤:1.选择系统时钟源:RCC_CFGR寄存器用于选择系统时钟源。

主要的时钟源有内部高速时钟HSI(高速内部),外部晶体时钟HSE(高速外部),外部低速时钟LSI(低速内部)和外部低速时钟LSE(低速外部)。

可以使用RCC_CFGR寄存器的SW位域来选择时钟源。

2.设置时钟频率和分频系数:根据应用的需求,可以设置时钟的频率和分频系数。

RCC_CFGR寄存器的HPRE、PPRE、和PLLMUL位域用于设置时钟的分频系数。

同时,还可以使用RCC_CFGR2和RCC_CFGR3寄存器来设置PLL(锁相环)的输入时钟和分频因子。

3.使能时钟源:RCC_APB2ENR、RCC_APB1ENR和RCC_AHBENR寄存器用于使能各个外设的时钟源。

可以使用这些寄存器的位域来控制外设时钟的使能状态。

4.时钟安全配置:RCC_CFGR寄存器的MCO和MCOPRE位域用于配置主要时钟输出的时钟安全特性。

可以设置MCO和MCOPRE位域来输出主时钟信号、内部时钟信号或外部时钟信号。

配置完毕后,需要等待时钟系统配置完成。

通过读取RCC_CFGR寄存器的SWS位域,可以确保时钟系统配置已经生效。

一旦配置完成后,系统将按照配置的时钟源和频率来运行。

在使用STM32F0系列微控制器时,正确配置RCC时钟是非常重要的。

这样可以确保系统的稳定性、性能和功耗都能达到预期的要求。

通过操作RCC模块的相关寄存器,可以实现对时钟源和频率的灵活配置,以满足不同应用的需求。

STM32 RCC复位时钟配置寄存器

RCCSTM32 的RCC看起来还是蛮复杂的,英文全称是Reset Clock Config,复位时钟配置,以下基本网上贴的,整理了一下,非原创哈。

一、时钟概述STM32有多个时钟源,分别是:HSI: 内部高速时钟(上电默认启动),因精度不高所以先不采用,以后如果需要再使用LSI:内部低速时钟,精度不高,一般用于IWDGCLKHSE:外部高速时钟,系统时钟一般采用它,经过PLL倍频作为系统同时钟LSE:外部低速时钟,一般专门用于RTC,等到RTC模块时再使用二、配置流程1.将RCC寄存器重新设置为默认值RCC_DeInit(default 默认)2.打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON);3.等待外部高速时钟晶振工作HSEStartUpStatus = RCC_WaitForHSEStartUp();4.设置AHB时钟RCC_HCLKConfig;5.设置高速APB2时钟 RCC_PCLK2Config;6.设置低速速APB1时钟RCC_PCLK1Config7.设置PLL RCC_PLLConfig8.打开PLL RCC_PLLCmd(ENABLE);9.等待PLL工作while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)10.设置系统时钟RCC_SYSCLKConfig11.判断是否PLL是系统时钟while(RCC_GetSYSCLKSource() != 0x08)至此系统时钟已经配置完成,STM32的每个模块都有自己的时钟,如果要使用某个模块,必须使能这个模块的时钟。

使能对应模块的时钟,STM32有个库函数,RCC_APB2PeriphClockCmd(对应模块,ENABLE)(72MHZ)或者RCC_APB1PeriphClockCmd(对应模块,ENABLE)(36MHZ);其中不同的模块有不同的时钟源,下面列举各个模块的时钟源:AHB2 时钟用于以下资源:(APB2:72MHZ)RCC_APB2Periph_AFIO 功能复用 IO 时钟RCC_APB2Periph_GPIOA GPIOA 时钟RCC_APB2Periph_GPIOB GPIOB 时钟RCC_APB2Periph_GPIOC GPIOC 时钟RCC_APB2Periph_GPIOD GPIOD 时钟RCC_APB2Periph_GPIOE GPIOE 时钟RCC_APB2Periph_ADC1 ADC1 时钟RCC_APB2Periph_ADC2 ADC2 时钟RCC_APB2Periph_TIM1 TIM1 时钟RCC_APB2Periph_SPI1 SPI1 时钟RCC_APB2Periph_USART1 USART1 时钟RCC_APB2Periph_ALL 全部 APB2外设时钟AHB1 时钟用于以下资源:(APB1:36MHZ)RCC_APB1Periph_TIM2 TIM2 时钟RCC_APB1Periph_TIM3 TIM3 时钟RCC_APB1Periph_TIM4 TIM4 时钟RCC_APB1Periph_WWDG WWDG时钟RCC_APB1Periph_SPI2 SPI2 时钟RCC_APB1Periph_USART2 USART2 时钟RCC_APB1Periph_USART3 USART3 时钟RCC_APB1Periph_I2C1 I2C1 时钟RCC_APB1Periph_I2C2 I2C2时钟RCC_APB1Periph_USB USB 时钟RCC_APB1Periph_CAN CAN时钟RTC 时钟来源:RCC_RTCCLKSource_LSE 选择 LSE 作为RTC 时钟RCC_RTCCLKSource_LSI 选择 LSI 作为RTC 时钟RCC_RTCCLKSource_HSE_Div128 选择 HSE 时钟频率除以 128 作为 RTC时钟ADC 时钟来源:该时钟源自 APB2 时钟(PCLK2)RCC_PCLK2_Div2 ADC 时钟= PCLK / 2RCC_PCLK2_Div4 ADC 时钟= PCLK / 4RCC_PCLK2_Div6 ADC 时钟= PCLK / 6RCC_PCLK2_Div8 ADC 时钟= PCLK / 8USB 时钟来源:该时钟来源于PLLCLK时钟的预分频三、RCC配置实例代码,与解析void RCC_Configuration(void){ErrorStatus HSEStartUpStatus;RCC_DeInit();//复位RCC模块的寄存器,复位成缺省值RCC_HSEConfig(RCC_HSE_ON);//开启HSE时钟,咱是用HSE的时钟作为PLL的时钟源HSEStartUpStatus = RCC_WaitForHSEStartUp();//获取HSE启动状态if(HSEStartUpStatus == SUCCESS) //如果HSE启动成功{FLASH_PrefetchBufferCmd(ENABLE);//开启FLASH的预取功能FLASH_SetLatency(FLASH_Latency_2);//FLASH延迟2个周期,RCC_HCLKConfig(RCC_SYSCLK_Div1);//配置HCLK,PCLK2,PCLK1,PLLRCC_PCLK2Config(RCC_HCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2);RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);RCC_PLLCmd(ENABLE);//启动PLLwhile(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET){}//等待PLL启动完成RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置系统时钟while(RCC_GetSYSCLKSource() !=0x80)//检查是否将HSE 9倍频后作为系统时钟{}}}和STM32超频比较相关,Ourdev上有个超频的帖蛮有意思的有兴趣的可以看看,附上网址:/bbs/bbs_content_all.jsp?bbs_sn=3554410总之,STM32的时钟看起来比较复杂,但是可以不用去深究,使用STM32的库函数还是很好用的,虽然效率低了点,但是其实只使用很少的次数,无所谓了,要想STM32跑起来,按照上述配置就好了,千万不要忘记为使用的模块分配时钟,不要像我,跑个LED,忘记给IO分配时钟,还在纳闷呢,为什么不亮.(摘自网络).总结:我比这位原作者好点,我第一次让STM32跑两个灯一下就顺利了.就是第一次KEIL联不上STM32有点郁闷,在网上升级了,STLINK还是不行.后来得知,原来STLINK升级版本好几个了,找了新的版本总算跟4.12联上了.我的STLINK版本号J1STM32有五个时钟源:HSI、HSE、LSI、LSE、PLL1.1HSI:高速内部时钟、RC振荡器、频率为8MHz、时钟精度较差(上电默认启动),可作为备用时钟源(时钟安全系统CSS)。

STM32技术参考手册第4章复位和时钟控制(上)

4 复位和时钟控制4.1 复位STM32F支持三种复位形式,分别为系统复位、上电复位和备份区域复位。

4.1.1 系统复位系统复位将复位除时钟控制寄存器CSR中的复位标志和备份区域中的寄存器以外的所有寄存器(见图3)。

当以下事件中的一件发生时,产生一个系统复位:1. NRST管脚上的低电平(外部复位)2. 窗口看门狗计数终止(WWDG复位)3. 独立看门狗计数终止(IWDG复位)4. 软件复位(SW复位)5. 低功耗管理复位可通过查看RCC_CSR控制状态寄存器中的复位状态标志位来确认复位事件来源。

软件复位通过将Cortex-M3中断应用和复位控制寄存器中的SYSRESETREQ位置1,可实现软件复位。

请参考Cortex技术参考手册获得进一步信息。

低功耗管理复位在以下两种情况下可产生低功耗管理复位:1. 在进入待机模式时产生低功耗管理复位:通过将用户选择字节中的nRST_STDBY位置1将使能该复位。

这时,即使执行了进入待机模式的过程,系统将被复位而不是进入待机模式。

2. 在进入停止模式时产生低功耗管理复位:通过将用户选择字节中的nRST_STOP位置1将使能该复位。

这时,即使执行了进入停机模式的过程,系统将被复位而不是进入停机模式。

关于用户选择字节的进一步信息,请参考STM32F10x闪存编程手册。

4.1.2 电源复位当以下事件中之一发生时,产生电源复位:1. 上电/掉电复位(POR/PDR复位)2. 从待机模式中返回电源复位将复位除了备份区域外的所有寄存器。

(见图3)图中复位源将最终作用于RESET管脚,并在复位过程中保持低电平。

复位入口矢量被固定在地址0x0000_0000~0x0000_0004。

图4-1.复位电路备份区域拥有两个专门的复位,它们只影响备份区域。

4.1.3 备份域复位当以下事件中之一发生时,产生备份区域复位。

1. 软件复位,备份区域复位可由设置备份区域控制寄存器RCC_BDCR中的BDRST位产生。

STM32固件与寄存器关系整理

常用图标:1:2:3:一.RCC模块:复位和时钟设置1.RCC寄存器结构RCC 寄存器结构,RCC_TypeDeff,在文件“stm32f10x_map.h”中定义如下:typedef struct{vu32 CR;vu32 CFGR;vu32 CIR;vu32 APB2RSTR;vu32 APB1RSTR;vu32 AHBENR;vu32 APB2ENR;vu32 APB1ENR;vu32 BDCR;vu32 CSR;} RCC_TypeDef;寄存器描述CR 时钟控制寄存器RCC_CR :HSI、HSE、PLL时钟使能以及就绪标志。

(默认HIS时钟使能)。

CFGR 时钟配置寄存器RCC_CFGR:系统时钟、PLL时钟切换,AHB、APB1、APB2、ADC、USB分频系数设置,PLL倍频系数设置CIR 时钟中断寄存器:HSI、HSE、LSI、LSE、PLL就绪中断使能和中断标志以其清除各就绪中断。

(默认HSI作为系统时钟,HSI时钟2分频后作为PLL输入时钟,)APB2RSTR APB2外设复位寄存器:APB2相连接的外设进行复位。

APB1RSTR APB1外设复位寄存器:APB1相连接的外设进行复位。

AHBENR AHB外设时钟使能寄存器:与AHB相连的DMA1时钟、DMA2时钟、SRAM 时钟(默认)、闪存接口电路时钟(默认)、CRC时钟、FSMC时钟、SDIO时钟使能。

APB2ENR APB2外设时钟使能寄存器:APB2相连接的外设时钟使能。

APB1ENR APB1外设时钟使能寄存器:APB1相连接的外设时钟使能。

BDCR 备份域控制寄存器:外部低速振荡器、RTC时钟使能和就绪标志以其旁路,RTC时钟源选择,备份域软件复位。

CSR 控制/状态寄存器:内部低速振荡器使能和就绪标志,各种复位标志和清除复位标志。

STM32嵌入式开发常见缩写

ARM:Advanced RISC MachineAAPCS:ARM Architecture Process call standard ARM体系结构过程调用标准DMA:Direct Memory Access 存储器直接访问EXTI: External Interrupts 外部中断FSMC: Flexible static memory controller 可变静态存储控制器FPB:flash patch and breakpoint FLASH 转换及断电单元HSE:Hign speed externalHSI: High speed internalLSE: Low Speed externalLSI: Low Speed InternalLSU: load store unit 存取单元PFU:prefetch unit 预取单元ISR:Interrupt Service Routines 中断服务程序NMI:Nonmaskable Interrupt 不可屏蔽中断NVIC: Nested Vectored Interrupt Controller 嵌套向量中断控制器MPU: Memory Protection Unit 内存保护单元MIPS:million instructions per second 每秒能执行的百万条指令的条数RCC:Reset and clock control 复位和时钟控制RTC: Real-Time Clock 实时时钟RISC:Reduced Instruction Set Computer 精简指令集计算机RTOS:Real Time Operating System 实时操作系统IWDG: independent watchdog 独立看门狗WWDG:Window watchdog 窗口看门狗TIM:timer 定时器TIM1:高級控制定時器GAL:generic array logic 通用阵列逻辑PAL:programmable array logic 可编程阵列逻辑ASIC:Application Specific Integrated Circuit 专用集成电路FPGA:Field-Programmable Gate Array 现场可编程门阵列CPLD:Complex Programmable Logic Device 可编程逻辑器件端口AFIO:alternate function IO 复用IO端口GPIO:general purpose input/output 通用IO端口IOP(A-G):IO port A - IO port G (例如:IOPA:IO port A)CAN:Controller area network 控制器局域网FLITF:The Flash memory interface 闪存存储器接口I2C:Inter-integrated circuit 微集成电路IIS:integrate interface of sound 集成音频接口JTAG:joint test action group 联合测试行动小组,調試接口SPI:Serial Peripheral Interface 串行外围设备接口SDIO: SD I/OUART: Universal Synchr./Asynch. Receiver Transmitter 通用异步接收/发送装置,串口USB: Universal Serial Bus 通用串行总线寄存器相关CPSP:Current Program Status Register 当前程序状态寄存器SPSP:saved program status register 程序状态备份寄存器CSR:clock control/status register 时钟控制状态寄存器LR:link register 链接寄存器SP:stack pointer 堆栈指针MSP: main stack pointer 主堆栈指针PSP:process stack pointer 进程堆栈指针PC:program counter 程序计数器调试相关ICE:in circuit emulator 在线仿真ICE: Breaker 嵌入式在线仿真单元DBG:debug 调试IDE:integrated development environment 集成开发环境DWT: data watchpoint and trace 数据观测与跟踪单元ITM: instrumentation trace macrocell 测量跟踪单元ETM:embedded trace macrocell 嵌入式追踪宏单元TPIU:trace port interface unit 跟踪端口接口单元TAP:test access port 测试访问端口DAP: debug access prot 调试访问端口TP: trace port 跟踪端口DP:debug port 调试端口SWJ-DP: serial wire JTAG debug port 串行-JTAG 调试接口SW-DP: serial wire debug port 串行调试接口JTAG-DP:JTAG debug port JTAG 调试接口系统类IRQ:interrupt request 中断请求FIQ:fast interrupt request 快速中断请求SW:software 软件SWI:software interrupt 软中断RO:read only 只读(部分)RW:read write 读写(部分)ZI:zero initial 零初始化(部分)BSS:Block Started by Symbol 以符号开始的块(未初始化数据段)总线Bus Matrix总线矩阵Bus Splitter 总线分割AHB-AP:advanced High-preformance Bus-access port APB:advanced peripheral busAPB1: low speed APB APB2: high speed APBPPB:Private Peripheral Bus 专用外设总线杂类ALU:Arithmetic Logical Unit 算术逻辑单元CLZ:count leading zero 前导零计数(指令)SIMD:single instruction stream multiple data stream单指令流,多数据流VFP:vector floating point 矢量浮点运算词汇/词组Big Endian 大端存储模式Little Endian 小端存储模式context switch 任务切换(上下文切换)(CPU 寄存器内容的切换)task switch 任务切换literal pool 数据缓冲池词汇类/单词arbitration 仲裁access 访问assembler 汇编器disassembly 反汇编binutils 连接器bit-banding 位段(技术)bit-band alias 位段别名bit-band region 位段区域banked 分组buffer 缓存/ceramic 陶瓷fetch 取指decode 译码execute 执行Harvard 哈佛(架构)handler 处理者heap 堆stack 栈latency 延时load (LDR) 加载(存储器内容加载到寄存器Rn)store (STR) 存储(寄存器Rn内容存储到存储器)Loader 装载器optimization 优化process 进程/过程thread 线程prescaler 预分频器prefetch 预读/预取指perform 执行pre-emption 抢占tail-chaining 尾链late-arriving 迟到resonator 共振器指令相关instructions 指令pseudo-instruction 伪指令directive 伪操作comments 注释FA full ascending 满栈递增(方式)EA empty ascending 空栈递增(方式)FD full desending 满栈递减(方式)ED empty desending 空栈递减(方式)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

复位
STM32F10xxx支持三种复位形式,分别为系统复位、电源复位和备份区域复位。

1、系统复位
系统复位将所有寄存器设置成复位值,除了RCC_CSR(控制状态寄存器)中的相关复位标志位,通过查看RCC_CSR寄存器,可以识别复位源。

系统复位可由以下5种方式产生:
1)外部引脚NRST复位(低电平触发);
2)窗口看门狗(WWDG)计数终止
3)独立看门狗(IDOG)计数终止
4)软件复位(SW RESET),通过将中断应用和复位控制寄存器
(Application Interrupt and Reset Control Register )中SYSRESETREQ位置1。

具体参考Cortex-M3 programming manual。

5)低功耗管理复位:
①通过进入等待模式(StandBy)产生复位:
通过User Option Bytes中设置nRST_STDBY位使能这种复
位模式。

这时,即使执行了进入待机模式的过程,系统将
被复位而不是进入待机模式。

②通过进入停止模式(STOP)产生复位:
通过User Option Bytes中设置nRST_STOP位使能这种复
位模式。

这时,即使执行了进入停止模式的过程,系统将
被复位而不是进入停止模式。

2、电源复位
电源复位设置所有寄存器置初始值,除了备份区域。

电源复位可由以下2种方式产生:
1)上电复位和掉电复位(POR/PDR reset)
2)退出等待(StandBy)模式
这些复位源都作用在NRST引脚上,并且在复位延迟期间保持低电平。

提供给设备的系统复位信号都由NRST引脚输出,对每一个内部/外部复位源,脉冲发生器都将保证一个20us最小复位周期。

对于外部复位,当NRST位置低时,将产生复位信号。

3、备份区复位
备份区复位仅仅影响被分区域,有以下两种产生方式:
1)软件复位,设置备份区域控制寄存器RCC_BDCR BDRST= 1;
2)在V DD和V BAT两者掉电的前提下,V DD或V BAT上电。

时钟
系统时钟(SYSCLK)可由3种时钟源驱动:
●内部高速震荡时钟(HSI)
●外部高速震荡时钟(HSE)
●PLL时钟
设备有如下2种二级时钟源:
●40KHz的内部低速RC震荡时钟(LSI),用来驱动独立看门狗
(IDOG)、或驱动用来从停止/等待模式中恢复的RTC时钟;
●32.768KHz的低速外部晶振时钟(LSE),用来驱动RTC时钟
以上5中时钟都可以独立的打开或关闭。

时钟树如下:
1、外部高速震荡时钟(HSE)
外部时钟信号来源:
①外部时钟信号。

在这种模式下,OSC_IN 接时钟输入信号,OSC_OUT
引脚悬空,输入信号是最高25Mhz的占空比是50%的方波、正弦波、三角波信号。

使能方式:RCC_CR→HSEBYP 和HSEON 置1
②外部晶体/陶瓷谐振产生信号,晶振频率范围在4~16Mhz。

通过
RCC_CR→ HSEON 可以开/关外部晶振
2、内部高速震荡时钟(HSI)
内部高速时钟由一个8MHz的RC震荡电路产生,能直接用作系
统时钟(SYSCLK)或2分频后作为PLL输入端信号。

HEI比HSE有跟快的启动延迟,但时钟信号不如HSE精确。

当HSE停止工作时,HSI自动为系统提供时钟。

通过RCC_CR→HSION
可以开/关内部时钟。

3、PLL时钟
PLL主要用来倍频内部高速时钟(HSI)和外部高速时钟(HSE)。

在是能PLL之前,需要选择PLL输入信号(HIS/2、HSE)、配置倍
频因子。

当在应用中使用USB接口时,PLL输出必须配置成48MHz
或72MHz。

4、外部低速时钟(LSE)
外部低速时钟信号由一个32.768KHz的低速外部谐振器产生,可以为RTC时钟/日历提供低功耗,高精确度的时钟信号。

可以通过发(Backup domain control register)RCC_BDCR LSEON 来控制LSE 的开关。

此外,外部低速时钟也可以通过旁路(bypass)产生,时钟周期最高位1MHz,具体配置流程可参照外部高速时钟(HSE)。

5、内部低速时钟(LSI)
内部低速时钟主要用来在停止(STOP)模式和等待(StandBy)模式为独立看门狗(IWDG)和自动唤醒单元(AWU)提供提供低功耗时钟信号,时钟信号在40KHz左右(30~60KHz之间)。

内部低速时钟可以通过人工校正,具体流程参见STM32参考手册Page87~88。

系统时钟(SYSCLK)
系统复位后,内部高速时钟(HSI)作为默认的系统时钟,当时钟源直接或通过PLL倍频后作为系统时钟源后,将不能被停止。

只有当目标始终源准备就绪(经过时钟开启延迟和PLL延迟),从一个时钟源切换到另一个时钟源才可能执行。

否则必须等到目标时钟准备好再执行。

在时钟控制寄存器(RCC_CR)里的状态位指示哪个时钟已经准备好了,哪个时钟目前被用作系统时钟。

RTC时钟
RTC时钟源可由HSE/128、LSE或LSI时钟提供。

通过修改备份
区控制寄存器RCC_BDCR→RTCSEL[1:0]来选择。

注意:除非复位备
份区,否则时钟选择后不能被修改。

LSE时钟在备份区,HSE和LSI不在。

1)如果LSE被选择作为RTC的时钟源,则当V DD掉电时,RTC不会
停止工作,只要V BAT仍然保持。

2)如果LSI被选择作为自动唤醒单元(AWU)的时钟源,则当V DD
掉电时,AWU的状态不能够被保证。

3)如果HSE的128分频作为RTC的时钟源,取消后备区写保护位要
置位:PWR_CR→DPB = 1(允许写入RTC和后备区寄存器)。


果VDD掉电,或者器件内部的电压调节器掉电时,RTC的状态不能被保证。

看门狗(Watchdog)时钟
如果独立看门狗已经由硬件选项或软件启动,LSI振荡器将被强制在打开状态,并且不能被关闭。

在LSI振荡器稳定后,时钟供应给IWDG。

时钟输出(Clock-Out)功能
时钟信号可由MCO 引脚对外输出,相应的GPIO端口寄存器必须被配置为相应功能。

通过配置RCC_CFGR→MCO[2:0]来选择输出时钟信号源:
1)系统时钟(SYSCLK)
2)外部高速时钟(HSE)
3)内部高速时钟(HSI)
4)PLL时钟2分频(PLL/2)。

相关文档
最新文档