RCC_CFGR985 211是什么意思思

没有更多推荐了,
不良信息举报
举报内容:
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!没有更多推荐了,
不良信息举报
举报内容:
STM32时钟初始化函数SystemInit()详解[转]
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!STM32时钟初始化函数SystemInit()详解
10:52:28来源: eefocus 关键字:&&&&
花了一天的时间,总算是了解了SystemInit()函数实现了哪些功能,初学,,现记录如下(有理解错误的地方还请大侠指出):
使用的是3.5的库,用的是STM32F107VC,开发环境RVMDK4.23
我已经定义了STM32F10X_CL,SYSCLK_FREQ_72MHz
函数调用顺序:
startup_stm32f10x_cl.s(启动文件) & SystemInit() && SetSysClock&() &&SetSysClockTo72()
初始化时钟用到的RCC寄存器复位值:
RCC_CR = 0x0000 xx83; RCC_CFGR = 0x;RCC_CIR = 0x; RCC_CFGR2 = 0x;
SystemInit()
在调用 SetSysClock()之前RCC寄存器的值如下(都是一些与运算,或运算,在此就不赘述了):
RCC->CR = 0x; &RCC->CIR = 0x00FF0000; RCC->CFGR2 = 0x;至于这些寄存器都代表着什么意思,详见芯片资料RCC寄存器,该文重点不在此处;
SetSysClock()函数如下:
static void SetSysClock(void)
#ifdef SYSCLK_FREQ_HSE
& SetSysClockToHSE();
#elif defined SYSCLK_FREQ_24MHz
& SetSysClockTo24();
#elif defined SYSCLK_FREQ_36MHz
& SetSysClockTo36();
#elif defined SYSCLK_FREQ_48MHz
& SetSysClockTo48();
#elif defined SYSCLK_FREQ_56MHz
& SetSysClockTo56(); &
#elif defined SYSCLK_FREQ_72MHz //我的定义的是SYSCLK_FREQ_72MHz,所以调用SetSysClockTo72()
& SetSysClockTo72();
SetSysClockTo72()函数如下:
static void SetSysClockTo72(void)
& __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
& &/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ & &
& /* Enable HSE */ & &
& RCC->CR |= ((uint32_t)RCC_CR_HSEON);
& /* Wait till HSE is ready and if Time out is reached exit */
& & HSEStatus = RCC->CR & RCC_CR_HSERDY;
& & StartUpCounter++; &
& } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
& if ((RCC->CR & RCC_CR_HSERDY) != RESET)
& & HSEStatus = (uint32_t)0x01;
& & HSEStatus = (uint32_t)0x00;
& if (HSEStatus == (uint32_t)0x01)
& & /* Enable Prefetch Buffer */
& & FLASH->ACR |= FLASH_ACR_PRFTBE;
& & /* Flash 2 wait state */
& & FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
& & FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; & &
& & /* HCLK = SYSCLK */
& & RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
& & /* PCLK2 = HCLK */
& & RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
& & /* PCLK1 = HCLK */
& & RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
#ifdef STM32F10X_CL
& & /* Configure PLLs ------------------------------------------------------*/
& & /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
& & /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */
& &&RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
& & & & & & & & & & & & & & & RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
& & RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
& & & & & & & & & & & & & & &RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
& & &/* Enable PLL2 */
& & RCC->CR |= RCC_CR_PLL2ON;
& & /* Wait till PLL2 is ready */
& & while((RCC->CR & RCC_CR_PLL2RDY) == 0)
& & & /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */&
& &&RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
& & RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |&
& & & & & & & & & & & & & & RCC_CFGR_PLLMULL9);&
& & /* &PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
& & RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
& & & & & & & & & & & & & & & & & & & & RCC_CFGR_PLLMULL));
& & RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
#endif /* STM32F10X_CL */
& & /* Enable PLL */
& & RCC->CR |= RCC_CR_PLLON;
& & /* Wait till PLL is ready */
& & while((RCC->CR & RCC_CR_PLLRDY) == 0)
& & /* Select PLL as system clock source */
& &&RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
& & RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; &&&
& & /* Wait till PLL is used as system clock source */
& & while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
& { /* If HSE fails to start-up, the application will have wrong clock&
& & & & &configuration. User can add here some code to deal with this error */
1:AHB, APB1,APB2时钟确定
//HCLK = SYSCLK ,从下面的分析可以得出SYSCLK是使用PLLCLK时钟的,也就是72MHZ(至于72MHZ如何得来,请看下面分析)
& &//那么就是HCLK(AHB总线时钟)=PLLCLK = 72MHZ & &
&&& //AHB总线时钟等于系统时钟SYSCLK,也就是 AHB时钟 = HCLK = SYSCLK = 72MHZ
& &/* HCLK = SYSCLK */
&&& RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
& &//PLCK2等于HCLK一分频, 所以PCLK2 = HCLK,HCLK = 72MHZ, 那么PLCK2(APB2总线时钟) = 72MHZ &&
& &//APB2总线时钟等于HCLK的一分频,也就是不分频;APB2 时钟 = HCLK = SYSCLK = 72MHZ&
& & /* PCLK2 = HCLK */
& &&RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
& & //PCLK1 = HCLK / 2;PCLK1 等于HCLK时钟的二分频,那么PCLK1(APB1) = 72MHZ / 2 = 36MHZ & &
&&&&//APB1总线时钟等于HCLK的二分频,也就是&APB1时钟= HCLK / 2 = 36MHZ
& & /* PCLK1 = HCLK */
& & RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
2:如何得出SYSCLK(系统时钟)为72MHZ(外部晶振25MHZ)
//记得参考英文芯片资料的时钟树P115页和RCC时钟寄存器进行理解
RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 | RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
RCC_CFGR2_PREDIV2_DIV5: &PREDIV2 = 5; 5分频
& & & & &&也就是PREDIV2对输入的外部时钟 5分频,那么PLL2和PLL3没有倍频前是25 /5 = 5MHZ
RCC_CFGR2_PLL2MUL8& :&PLL2MUL = 8;&8倍频&&
& & & & &&8倍频后,PLL2时钟 = 5 * 8 = 40MHZ; 因此 PLL2CLK = 40MHZ
RCC_CFGR2_PREDIV1SRC_PLL2&:&RCC_CFGR2的第16位为1, 选择PLL2CLK 作为PREDIV1的时钟源
RCC_CFGR2_PREDIV1_DIV5:PREDIV1 = 5;PREDIV1对输入时钟5分频&PREDIV1CLK&= PLL2CLK / 5 = 8MHZ
以上是对RCC_CFGR2进行的配置
--------------------------------------------------------------------------------------
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |&
&RCC_CFGR_PLLMULL9);&
RCC_CFGR_PLLXTPRE_PREDIV1 :操作的是RCC_CFGR的第17位PLLXTPRE,操作这一位和操作RCC_CFGR2寄存器的 位[3:0]中的最低位是相同的效果 &
RCC_CFGR_PLLSRC_PREDIV1 :选择PREDIV1输出作为PLL输入时钟;PREDIV1CLK = 8MHZ,所以输入给PLL倍频的 时钟源是8MHZ
RCC_CFGR_PLLMULL9 :PLLMUL = 9;PLL倍频系数为9,也就是对&PLLCLK&=&PREDIV1CLK * 8 =&72MHZ
以上是对RCC_CFGR进行的配置
---------------------------------------------------------------------------------------------------
&RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;&& //选择PLLCLK作为系统时钟源&
--------------------------------------------------------------------------------------------------
至此基本配置已经完成,配置的时钟如下所述:
SYSCLK(系统时钟) = 72MHZ
AHB总线时钟 & = 72MHZ
APB1总线时钟 &= 36MHZ
APB2总线时钟 &= 72MHZ
PLL时钟 & = 72MHZ
PLL2时钟 &= 40MHZ
关键字:&&&&
编辑:什么鱼
引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
关注eeworld公众号快捷获取更多信息
关注eeworld服务号享受更多官方福利
网友正在学习IC视频
EEWORLD网友正在观看&&视频
EEWORLD网友正在观看&&视频
EEWORLD网友正在观看&&视频
EEWORLD网友正在观看&&视频
EEWORLD网友正在观看&&视频
STM32学习之路-LCD(3)
相关关键词
热门关键词
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。25m晶振_中华文本库
XS-5032 25M贴片晶振资料_信息与通信_工程科技_专业资料。K32晶振 25MHz晶振 20PF +-20PPM贴片晶振资料P: 2/8 QUARTZ CRYSTAL UNITS SPECIFICATION ...
(4) 试着改换晶体两端的电容,也许晶振就能起振了,电容的大小请 参考晶振的使用说明。 (5) 在 PCB 布线时晶振电路的走线应尽量短且尽可能靠近 IC,杜绝 在...
8M 的速度; 如果 HSE=25M,则 SYSCLK = 25M,即 STM32F407 就会运行在 25M...stm32f4xx.h 中定义的 一个宏,这个宏定义的 值要和实际使用的外部晶振保持...
主演:安泰信 ADS1102C 配角:我是刚来的 首先先请主演先登场吧 第一:检修不触发故障主板时,可以用示波器测 32.768 和 25M(NF 的板)晶振是否起振,非常直观,...
STM32修改外频晶振方法_信息与通信_工程科技_专业资料。在STM32应用过程中, 一般默认的外频晶振是8M, 当要改变外频的时候,比如说12M,往往遇到很大的问题,比如因此...
STM32晶振选型 晶振不起振 晶振及负载电容 晶振参数计算器_电子/电路_工程科技_专业资料。STM32晶振选型 晶振不起振 晶振及负载电容 晶振参数计算器第...
还有一点,关于晶振的选择,如果你的系统能工作在 25M,就尽量不要选 50M 的晶振。时钟频率高, 是高速电路,时钟上升沿陡也是高速电路。在最近的几次板卡设计中,我...
有源晶振封装_信息与通信_工程科技_专业资料。常见有源晶振封装格式 有源晶振封装尺寸及实物图 A、直插封装(Through-Hole) 1、 DIL-14 0.1 - 150 MHz 20.2...
常用贴片晶振(SMD crystal)封装尺寸规格及实物图_专业资料。常用贴片晶振(SMD crystal)封装尺寸规格及实物图 (SMD crystal)封装尺寸规格及实物图 常用贴片晶振(SMD ...
(HSE / 5) * 8 = 40 MHz,也就是说 SetSysClockTo72 函数里的配置是以 外部晶振(HSE)25M 来配置的,因为单单修改 HSE_VALUE 并不能改变这里的配置,所以...STM32时钟初始化函数SystemInit()详解
我的图书馆
STM32时钟初始化函数SystemInit()详解
花了一天的时间,总算是了解了SystemInit()函数实现了哪些功能,初学STM32,,现记录如下(有理解错误的地方还请大侠指出):
使用的是3.5的库,用的是STM32F107VC,开发环境RVMDK4.23
我已经定义了STM32F10X_CL,SYSCLK_FREQ_72MHz
函数调用顺序:
startup_stm32f10x_cl.s(启动文件) → SystemInit() →& SetSysClock&() →&SetSysClockTo72()
初始化时钟用到的RCC寄存器复位值:
RCC_CR = 0x0000 xx83; RCC_CFGR = 0x;RCC_CIR = 0x; RCC_CFGR2 = 0x;
SystemInit()
在调用 SetSysClock()之前RCC寄存器的值如下(都是一些与运算,或运算,在此就不赘述了):
RCC-&CR = 0x;内、外部高速时钟的选择使能、就绪标志RCC-&CIR = 0x00FF0000;&LSI、LSE、HIS、HSE、PLL就绪中断标志RCC-&CFGR2 = 0x;系统时钟源切换及状态至于这些寄存器都代表着什么意思,详见芯片资料RCC寄存器,该文重点不在此处;
SetSysClock()函数如下:
static void SetSysClock(void)
#ifdef SYSCLK_FREQ_HSE
& SetSysClockToHSE();
#elif defined SYSCLK_FREQ_24MHz
& SetSysClockTo24();
#elif defined SYSCLK_FREQ_36MHz
& SetSysClockTo36();
#elif defined SYSCLK_FREQ_48MHz
& SetSysClockTo48();
#elif defined SYSCLK_FREQ_56MHz
& SetSysClockTo56(); &
#elif defined SYSCLK_FREQ_72MHz
//我的定义的是SYSCLK_FREQ_72MHz,所以调用SetSysClockTo72()
& SetSysClockTo72();
SetSysClockTo72()函数如下:
static void SetSysClockTo72(void)
& __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
& &/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ & &
& /* Enable HSE */ & &
& RCC-&CR |= ((uint32_t)RCC_CR_HSEON);1、使能外部晶振
& /* Wait till HSE is ready and if Time out is reached exit */
& & HSEStatus = RCC-&CR & RCC_CR_HSERDY;
& & StartUpCounter++; &
& } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
& if ((RCC-&CR & RCC_CR_HSERDY) != RESET)
& & HSEStatus = (uint32_t)0x01;
& & HSEStatus = (uint32_t)0x00;
& if (HSEStatus == (uint32_t)0x01)
& & /* Enable Prefetch Buffer */
& & FLASH-&ACR |= FLASH_ACR_PRFTBE;
& & /* Flash 2 wait state */
& & FLASH-&ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
& & FLASH-&ACR |= (uint32_t)FLASH_ACR_LATENCY_2; & &
一、先设AHB APB1 AHB2分频寄存器RCC-&CFGR&&& & /* HCLK = SYSCLK */
& & RCC-&CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;2、系统时钟不分频作为AHB频率所以AHB等于SYSCLK频率0xxx: system clock not divided &&Bits 7:4 HPRE: AHB prescaler:Set and cleared by software to control AHB clock division factor.
& & /* PCLK2 = HCLK/2 */
& & RCC-&CFGR |= RCC_CFGR_PPRE2_DIV2;3、AHB时钟2分频作为高速APB2时钟故APB2=(AHB=SYSCLK)/2
PPRE2: APB high-speed prescaler (APB2)Set and cleared by software to control APB high-speed clock division factor.0xx: AHB clock not divided& &&
& & /* PCLK1 = HCLK */
& & RCC-&CFGR |= RCC_CFGR_PPRE1_DIV4;4、AHB时钟4分频作为低速APB1时钟故APB1=(APB2=AHB=SYSCLK)/4,所以定时器2~7时钟为2倍APB1,为60M--参加文章:STM32中定时器的时钟源PPRE1: APB Low speed prescaler (APB1)Set and cleared by software to control APB low-speed clock division factor.100: AHB clock divided by 2
#ifdef STM32F10X_CL二、配置PLL2时钟频率
& & /* Configure PLLs ------------------------------------------------------*/
& & /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
& & /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */
& & /* Configure the main PLL */& & RCC-&PLLCFGR = PLL_M | (PLL_N && 6) | (((PLL_P && 1) -1) && 16) |& & & & & & & & & &(RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q && 24);5、所以PLL时钟=8M/8*240/2=120M&SYSCLK=AHB=120M,PLL时钟=8M/8*240/2=120M,APB2=60M,APB1=30M(upt项目时钟)RCC_PLLCFGR_PLLSRC_HSE:Bit 22 PLLSRC: Main PLL(PLL) and audio PLL (PLLI2S) entry clock source1: HSE oscillator clock selected as PLL and PLLI2S clock entryBits 17:16 PLLP: Main PLL (PLL) division factor for main system clockPLL output clock frequency = VCO frequency / PLLP with PLLP = 2, 4, 6, or 800: PLLP = 2f(PLL general clock output) = f(VCO clock) / PLLP,/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////#define PLL_M & & &8 &&#define PLL_N & & &240 &#define PLL_P & & &2 &&/* USB OTG FS, SDIO and RNG Clock = &PLL_VCO / PLLQ */#define PLL_Q & & &5/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
& & /* Enable the main PLL */
& & RCC-&CR |= RCC_CR_PLLON; 6、使能PLL时钟Bit 24 PLLON: Main PLL (PLL) enableSet and cleared by software to enable PLL.
& & /* Wait till the main PLL is ready */& & while((RCC-&CR & RCC_CR_PLLRDY) == 0)& & {& & }& && & /* Configure Flash prefetch, Instruction cache, Data cache and wait state */& & FLASH-&ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_3WS;& & /* Select the main PLL as system clock source */& & RCC-&CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));& & RCC-&CFGR |= RCC_CFGR_SW_PLL;7、将PLL作为系统时钟Bits 1:0 SW: System clock switchSet and cleared by software to select the system clock source.Set by hardware to force the HSI selection when leaving the Stop or Standby mode or incase of failure of the HSE oscillator used directly or indirectly as the system clock.00: HSI oscillator selected as system clock01: HSE oscillator selected as system clock10: PLL selected as system clock11: not allowed& & /* Wait till the main PLL is used as system clock source */& & while ((RCC-&CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);& & {& & }
1:AHB, APB1,APB2时钟确定
//HCLK = SYSCLK ,从下面的分析可以得出SYSCLK是使用PLLCLK时钟的,也就是72MHZ(至于72MHZ如何得来,请看下面分析)
& &//那么就是HCLK(AHB总线时钟)=PLLCLK = 72MHZ & &
&&& //AHB总线时钟等于系统时钟SYSCLK,也就是 AHB时钟 = HCLK = SYSCLK = 72MHZ
& &/* HCLK = SYSCLK */
&&& RCC-&CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
& &//PLCK2等于HCLK一分频, 所以PCLK2 = HCLK,HCLK = 72MHZ, 那么PLCK2(APB2总线时钟) = 72MHZ &&
& &//APB2总线时钟等于HCLK的一分频,也就是不分频;APB2 时钟 = HCLK = SYSCLK = 72MHZ&
& & /* PCLK2 = HCLK */
& &&RCC-&CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
& & //PCLK1 = HCLK / 2;PCLK1 等于HCLK时钟的二分频,那么PCLK1(APB1) = 72MHZ / 2 = 36MHZ & &
&&&&//APB1总线时钟等于HCLK的二分频,也就是&APB1时钟= HCLK
/ 2 = 36MHZ
& & /* PCLK1 = HCLK */
& & RCC-&CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
2:如何得出SYSCLK(系统时钟)为72MHZ(外部晶振25MHZ)
//记得参考英文芯片资料的时钟树P115页和RCC时钟寄存器进行理解
RCC-&CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
RCC_CFGR2_PREDIV2_DIV5: &PREDIV2 = 5; 5分频
& & & & &&也就是PREDIV2对输入的外部时钟 5分频,那么PLL2和PLL3没有倍频前是25
RCC_CFGR2_PLL2MUL8& :&PLL2MUL = 8;&8倍频&&
& & & & &&8倍频后,PLL2时钟 = 5 * 8 = 40MHZ; 因此 PLL2CLK = 40MHZ
RCC_CFGR2_PREDIV1SRC_PLL2&:&RCC_CFGR2的第16位为1, 选择PLL2CLK
作为PREDIV1的时钟源
RCC_CFGR2_PREDIV1_DIV5:PREDIV1 = 5;PREDIV1对输入时钟5分频&PREDIV1CLK&=
PLL2CLK / 5 = 8MHZ
以上是对RCC_CFGR2进行的配置
--------------------------------------------------------------------------------------
RCC-&CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |&
&RCC_CFGR_PLLMULL9);&
RCC_CFGR_PLLXTPRE_PREDIV1 :操作的是RCC_CFGR的第17位PLLXTPRE,操作这一位和操作RCC_CFGR2寄存器的
位[3:0]中的最低位是相同的效果 &
RCC_CFGR_PLLSRC_PREDIV1 :选择PREDIV1输出作为PLL输入时钟;PREDIV1CLK = 8MHZ,所以输入给PLL倍频的
时钟源是8MHZ
RCC_CFGR_PLLMULL9 :PLLMUL = 9;PLL倍频系数为9,也就是对&PLLCLK&=&PREDIV1CLK * 8 =&72MHZ
以上是对RCC_CFGR进行的配置
---------------------------------------------------------------------------------------------------
&RCC-&CFGR |= (uint32_t)RCC_CFGR_SW_PLL;&& //选择PLLCLK作为系统时钟源&
--------------------------------------------------------------------------------------------------
至此基本配置已经完成,配置的时钟如下所述:
SYSCLK(系统时钟) = 72MHZ
AHB总线时钟 & = 72MHZ
APB1总线时钟 &= 36MHZ
APB2总线时钟 &= 72MHZ
PLL时钟 & = 72MHZ
PLL2时钟 &= 40MHZ
TA的最新馆藏
喜欢该文的人也喜欢

我要回帖

更多关于 diss是什么意思 的文章

 

随机推荐