stm32f103使用16M(非8M)晶振

来源:互联网 发布:mysql分类汇总 编辑:程序博客网 时间:2024/05/01 15:11

STM32F103XX系列的时钟最高位72MHz,通常外接8MHz晶体,官方固件库会配置好PLL输出72MHz,不需要自己写代码。

/* system_stm32f10x.c文件 */void SystemInit(void);              //配置时钟void SystemCoreClockUpdate(void);   //将HCLK的值更新到变量SystemCoreClock

外接晶体的可选频率为4~16MHz,选择非8MHz的晶体时,需要修改一下几处代码

/* 添加宏定义到stm32f10x.h开头或者IDE的宏定义符号列表中(作为编译器选项) */#define HSE_VALUE ((uint32_t)16000000)

system_stm32f10x.c文件内SetSysClockTo72()函数内找到如下片段

    /*  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);

添加一行

    /*  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_PLLXTPRE);    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);

上面是修改了CFGR寄存器的PLLXTPRE位,使16MHz晶振先2分频再进入PLL。

0 0
原创粉丝点击