zministaryfw 发表于 2015-2-13 14:17:09

求助:stm32的时钟配置问题

本帖最后由 zministaryfw 于 2015-2-13 15:08 编辑

    stm32固件包3.0之后,时钟的配置只需要SystemInit();就可以了,这是默认的72Mhz时钟,但是如果我想更改时钟了,是不是只要在前面加频率的宏定义例如#defined SYSCLK_FREQ_24MHz,然后再SystemInit();就可以更改系统的时钟了,还是说需要自己一个个去调用RCC库函数才能改?

Angel_YY 发表于 2018-3-12 11:29:54

在STM32F1系列中,在标准库的system_stm32f10x.c文件中实现了系统时钟的设置。可以通过简单的设置宏定义#define SYSCLK_FREQ_24MHz实现时钟的设置。#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
#define SYSCLK_FREQ_24MHz24000000
#else
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
/* #define SYSCLK_FREQ_24MHz24000000 */
/* #define SYSCLK_FREQ_36MHz36000000 */
/* #define SYSCLK_FREQ_48MHz48000000 */
/* #define SYSCLK_FREQ_56MHz56000000 */
#define SYSCLK_FREQ_72MHz72000000
#endif通过代码可以看到默认情况下是试用的#define SYSCLK_FREQ_72MHz 72000000,定义为72M时钟。假设需要定义为24M时钟只需要打开24M的宏定义
#define SYSCLK_FREQ_24MHz 24000000
并且注释掉72M的宏定义
/*#define SYSCLK_FREQ_72MHz 72000000*/
接下来就可以分析系统初始化函数了。

在SystemInit函数实现的末尾,调用了SetSysClock函数。

而在SetSysClock函数实现中根据宏定义调用了不同的时钟设置函数,例如定义了SYSCLK_FREQ_24MHz ,调用了SetSysClockTo24函数。

在SetSysClockTo24函数中真正的实现了时钟的设置。这个文件中已经实现了24M,36M,48M,56M,72M等频率的所有代码。
所以使用STM32F1系列的标准库设置系统时钟只需要修改system_stm32f10x.c文件中的SYSCLK_FREQ_xxMHz系列的宏定义就可以实现改变系统时钟的目的。

页: [1]
查看完整版本: 求助:stm32的时钟配置问题