STM32外部时钟更改后程序设置方法

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

FLASH_SetLatency(FLASH_Latency_2);//设置 FLASH 存储器延时时钟周期数 FLASH_Latency_2 2 延时周期 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//选择 FLASH 预取指缓存的模,预取指缓存使能
* 执行 SystemInit 函数后芯片内部时钟为:
* SYSCLK
72MHz
* AHB
72MHz
* PCLK1
36MHz
* PCHale Waihona Puke BaiduK2
72MHz
* PLL
72MHz
**************************************/
void RCC_HSE_Configuration(void)
RCC_DeInit();//将外设 RCC 寄存器重设为缺省 RCC_HSICmd(ENABLE);//设置外部高速晶振(HSE) HSE 晶振打开(ON) while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//等待 HSI 就绪
RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置 AHB 时钟(HCLK) RCC_SYSCLK_Div1 ----- AHB 时钟 = 系统时钟 RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速 AHB 时钟(PCLK2) RCC_HCLK_Div1 ----- APB2 时钟 = HCLK RCC_PCLK1Config(RCC_HCLK_Div2);//设置低速 AHB 时钟(PCLK1) RCC_HCLK_Div2 ----- APB1 时钟 = HCLK/2
#endif /* HSE_VALUE */
注意:以上是以外部晶振为 16MHz 为例
方法(2): 使用 STM32F10x 内部时钟来配置 STM32F10x 各个模块的系统时钟。(不推荐使用,内部 8MHz RC 振荡器不稳定)
//RCC_HSI_Configuration 设置 HSI 8MHz 作为 PLL 的时钟源 void RCC_HSI_Configuration(void) {
#endif /* HSE_VALUE */
改成:
#if !defined HSE_VALUE #ifdef STM32F10X_CL #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ #else #define HSE_VALUE ((uint32_t)16000000) /*!< Value of the External oscillator in Hz */ #endif /* STM32F10X_CL */
{
RCC_DeInit();//将外设 RCC 寄存器重设为缺省值
RCC_HSEConfig(RCC_HSE_ON);//设置外部高速晶振(HSE) HSE 晶振打开(ON)
if(RCC_WaitForHSEStartUp() == SUCCESS)//等待 HSE 起振,SUCCESS;HSE 晶振稳定且就绪
#if !defined HSE_VALUE #ifdef STM32F10X_CL #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ #else #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ #endif /* STM32F10X_CL */
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);//设置系统时钟(SYSCLK) while(RCC_GetSYSCLKSource() != 0x00);//0x00:HSI 作为系统时钟 }
方法(1):
第一步:在 main 函数中执行下面的函数(红色字体的 C 语句,根据自己的硬件的外部晶振大小而确定的)
//RCC_HSE_Configuration 函数设置 HSE 作为 PLL 的时钟源,不设置的话在 main 函数执行前执行了 SystemInit 函数
/*************************************
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置 AHB 时钟(HCLK) RCC_SYSCLK_Div1 ----- AHB 时钟 = 系统时钟
RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速 AHB 时钟(PCLK2) RCC_HCLK_Div1 ----- APB2 时钟 = HCLK
RCC_PCLK1Config(RCC_HCLK_Div2);//设置低速 AHB 时钟(PCLK1) RCC_HCLK_Div2 ----- APB1 时钟 = HCLK/2
FLASH_SetLatency(FLASH_Latency_2);//设置 FLASH 存储器延时时钟周期数 FLASH_Latency_2 2 延时周期 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//选择 FLASH 预取指缓存的模,预取指缓存使能
STM32F10x 时钟系统框图:
STM32F10x 时钟系统设置 | 这个夏天 199271
STM32F10x 时钟系统设置 | 这个夏天 199271
由于 STM32F10x 库官方采用的是默认的外接 8MHz 晶振,因此造成很多用户也采用了 8MHz 的晶振,但是,8MHz 的晶振不是必须的,其他 频点的晶振也是可行的,只需要在库中做相应的修改就行。
RCC_PLLConfig(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9);//设置 PLL 时钟源及倍频系 RCC_PLLConfig(外部时钟分频因子,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 作为系统时钟 } }
第二部:打开 stm32f10x.h,将
STM32F10x 时钟系统设置 | 这个夏天 199271
相关文档
最新文档