完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、时钟树介绍
一共有五个时钟源,按照速度划分,其中1、2、3为高速时钟源,4、5为低速时钟源。按照位于芯片的内部外部划分,其中1、5为内部时钟源,3、4为外部时钟源 1号时钟源HSI为内部高速时钟源,RC振荡器,8M频率,可以作为系统时钟,或PLL锁相环的一个输入 3号时钟源HSE为外部高速时钟源,由外部的晶振提供,是23,24引脚,外接4-16M的晶振或时钟提供时钟源 5号时钟源LSI为内部低速时钟源,频率为40K,RC振荡器,可提供给独立看门狗或RPC的时钟来源 4号时钟源LSE为外部低速时钟源,外部引脚为PC14,PC15,普中开发板外接了一个32.768K的晶振,是提供为RTC的时钟 2号时钟源PLL是将输入的时钟倍频,因为系统时钟最大为72M,所以需要对时钟频率进行倍频输出。可以是内部时钟源1号HSI为二分频后为它提供时钟源也可以是外部时钟源3号HSE不分频或二分频后为它提供。 系统初始化函数SystemInit的功能就是为了确定PLL的输出频率和外设的系统时钟,SystemInit()后时钟频率大小: SYSCLK(系统时钟)=72MHz AHB总线时钟(HCLK=SYSCLK) =72MHz APB1总线时钟(PCLK1=SYSCLK/2)=36MHz APB2总线时钟(PCLK2=SYSCLK/1)=72MHz PLL主时钟=72MHz MCO为可以为外部提供时钟,在普中板子上用的是PA8管脚,MCO的来源可以为PLL的二分频(72M/2),HSI(8M),HSE(8M)和SYSCLK(72M) APB2总线(最大72M)的频率大于APB1总线(最大36M)的频率 二、时钟配置函数介绍 (一)时钟使能配置函数 在stm32f10x_rcc.c文件中,包含了时钟配置、使能、获取的函数。以Cmd结尾的通常为使能函数,Config结尾的为配置函数,Init结尾的为初始化函数。 时钟源使能函数: RCC_HSICmd(FunctionalState NewState),参数为ENABLE使能或DISABLE失能 RCC_LSICmd(FunctionalState NewState) RCC_PLLCmd(FunctionalState NewState) 外设使能函数: RCC_RTCCLKCmd(FunctionalState NewState) RCC_AHBPeriphClockCmd(FunctionalState NewState) RCC_APBxPeriphClockCmd(FunctionalState NewState) (二)时钟源和倍频因子相关配置函数 RCC_HSEConfig RCC_LSEConfig RCC_PLLConfig RCC_MCOConfig RCC_SYSCLKConfig指定系统时钟的来源 RCC_HCLKConfig RCC_PCLK1Config RCC_PCLK2Config RCC_RTCCLKConfig RCC_ADCCLKConfig RCC_USBCLKConfig (三)外设复位函数 RCC_APB1PeriphResetCmd RCC_APB2PeriphResetCmd (四)状态参数获取函数 RCC_GetSYSCLKSource RCC_GetClocksFreq RCC_GetFlagStatus RCC_ClearFlag (五)RCC中断相关函数 RCC_ITConfig RCC_ClearITPendingBit RCC GetITStatus 三、系统时钟设置步骤 PLLMUL的倍频系数是2~16,通过修改倍频系数就可以实现系统时钟的改变,自定义一个系统时钟函数 void RCC_HSE_Config(u32 div,u32 pllm)//自定义系统时间(可以修改时钟) { RCC_DeInit();//将外设RCC寄存器重设为缺省值,也就是复位状态 RCC_HSEConfig(RCC_HSE_ON);//开启外部高速晶振(HSE) if(RCC_WaitForHSEStartUp()==SUCCESS)//等待HSE起振 { RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟(HCLK),1分频就是72M RCC_PCLK1Config(RCC_HCLK_Div2);//设置低速AHB时钟(PCLK1),设置APB1的时钟为二分频就是36M RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速AHB时钟(PCLK2),设置APB2的时钟为一分频72M RCC_PLLConfig(div,pllm);//设置PLL时钟源及倍频系数 RCC_PLLCmd(ENABLE) ;//使能或者失能PLL while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//检查指定的RCc标志位设置与否,PLL就绪 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//设置系统时钟SYSCLK while(RCC_GetSYSCLKSource()!=0x08);//返回用作系统时钟的时钟源,0x08: PLL作为系统时钟 } } div是时钟源的分频系数,pllm是倍频系数。div为8M的时钟源,pllm为2-16的倍频系数。如RCC_HSE_Config(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);即为8M时钟源1分频,pllm倍频系数为9,则系统时钟源为8M/1*9=72M;又如RCC_HSE_Config(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9);为8M时钟源2分频,pllm倍频系数为9,则系统时钟源为8M/2*9=36M 四、编程 通过LED灯的闪烁来观察系统时钟的修改,先实现LED灯点亮的程序,再在main.c程序中添加代码 #include “stm32f10x.h” #include “led.h” //延时函数 void delay(u32 i) { while(i--); } void RCC_HSE_Config(u32 div,u32 pllm)//自定义系统时间(可以修改时钟) { RCC_DeInit();//将外设RCC寄存器重设为缺省值,也就是复位状态 RCC_HSEConfig(RCC_HSE_ON);//开启外部高速晶振(HSE) if(RCC_WaitForHSEStartUp()==SUCCESS)//等待HSE起振 { RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟(HCLK) RCC_PCLK1Config(RCC_HCLK_Div2);//设置低速AHB时钟(PCLK1) RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速AHB时钟(PCLK2) RCC_PLLConfig(div,pllm);//设置PLL时钟源及倍频系数 RCC_PLLCmd(ENABLE) ;//使能或者失能PLL while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//检查指定的RCc标志位设置与否,PLL就绪 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//设置系统时钟SYSCLK) while(RCC_GetSYSCLKSource()!=0x08);//返回用作系统时钟的时钟源,0x08: PLL作为系统时钟 } } int main() { //第一次系统时钟 RCC_HSE_Config(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//72M //第二次系统时钟 //RCC_HSE_Config(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9);//36M LED_Init(); while(1) { GPIO_ResetBits(GPIOC,GPIO_Pin_0); delay(6000000); GPIO_SetBits(LED_PORT,GPIO_Pin_0); delay(6000000); } } 第一次设置系统时钟为72M,观察LED灯的闪烁结果,第二次将时钟设置为36M,再次观察,可以发现LED灯闪烁的频率变慢。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1632 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1559 浏览 1 评论
985 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1605 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
655浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
525浏览 3评论
540浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
512浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 19:58 , Processed in 0.863896 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号