STM32时钟的两种配置方法
时间:10-02
整理:3721RD
点击:
我所讲的时钟配置都是基于库函数,3.5版本的的标准库。
第一种是基于system_stm32f10x.c来配置的,这个文件就是完成时钟配置的,其他啥作用都没有。首先打开stm32的启动文件,就是那个汇编文件,定位到如下:
- ; Reset handler
- Reset_Handler PROC
- EXPORT Reset_Handler [WEAK]
- IMPORT __main
- IMPORT SystemInit
- LDR R0, =SystemInit
- BLX R0
- LDR R0, =__main
- BX R0
- ENDP
- #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
- /* #define SYSCLK_FREQ_HSE HSE_VALUE */
- #define SYSCLK_FREQ_24MHz 24000000
- #else
- /*#define SYSCLK_FREQ_HSE HSE_VALUE*/
- /* #define SYSCLK_FREQ_24MHz 24000000 */
- /* #define SYSCLK_FREQ_36MHz 36000000 */
- /* #define SYSCLK_FREQ_48MHz 48000000 */
- /* #define SYSCLK_FREQ_56MHz 56000000 */
- #define SYSCLK_FREQ_72MHz 72000000
- #endif
将#else下的/* #define SYSCLK_FREQ_HSE HSE_VALUE*/取消注释,将HSE_VALUE改为外部晶振值,单位为Hz。
个别单片机要从#if defined下改,支持72M的在#else下改就可以了,比较常用的103系列在这下面改就行了。选什么时钟,就将该时钟的宏定义取消注释即可,注意只能选一个。第一种方法就介绍到这里。
第二种是基于stm32f10x_rcc.c配置的。配置方法如下:
- void RCC_Configuration()
- {
- ErrorStatus HSEStartUpStatus;
- RCC_DeInit(); //重置时钟
- RCC_HSEConfig(RCC_HSE_ON); //外部晶振开
- HSEStartUpStatus=RCC_WaitForHSEStartUp();
- if(HSEStartUpStatus==SUCCESS)
- {
- FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //预取值缓存使能
- FLASH_SetLatency(FLASH_Latency_2); //设置代码延时值
- RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟=系统时钟
- RCC_PCLK2Config(RCC_HCLK_Div1); //设置APB=HCLK
- RCC_PCLK1Config(RCC_HCLK_Div2); //APB1=HCLK/2
- RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLL频率等于外部晶振频率,倍频系数*9 72MHz
- RCC_PLLCmd(ENABLE); //等待PLL初始化成功
- while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);
- RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //选择PLL倍频后的时钟作为系统时钟;
- while(RCC_GetSYSCLKSource()!=0x08); //等待PLL倍频后的时钟作为系统时钟成功
- }
- }
- IMPORT SystemInit
- LDR R0, =SystemInit
- BLX R0
采用第二种方式,工程里不需要有system_stm32f10x.c和system_stm32f10x.h文件,只需要有stm32f10x_rcc.c文件就行了。要将汇编语言内有关 SystemInit语句注释或者删掉,要不然编译会报错,提示找不到SystemInit()。
欢迎诸位批评指正
感谢小编出山分享资料 学习了
666,没毛病。
网上有很多配置的例程,感谢分享
感谢小编出山分享资料 学习了