STM32F103外部晶振由8M變為12M

2021-09-07 19:11:45 字數 2422 閱讀 3407

官方提供的庫檔案中,hse(外部高速時鐘)預設為8mhz,最高主頻為8*9=72mhz,如果將hse變為12mhz,不修改庫檔案的話,最高主頻則變為12*9=108mhz,最典型的問題就是usart可以通訊,但是接收到的資料與傳送的不一致,並且找不到啥原因,害的我瞎折騰了一整天,下面列舉需要修改的地方。

1、修改stm32f10x.h中的hse_value,原本的**如下:

#if !defined  hse_value  

#ifdef stm32f10x_cl     

#define hse_value    ((uint32_t)25000000)   

#else   

#define hse_value    ((uint32_t)8000000)   

#endif   

#endif   

修改後的如下:

#if !defined  hse_value  

#ifdef stm32f10x_cl     

#define hse_value    ((uint32_t)25000000)   

#else   

#define hse_value    ((uint32_t)12000000)   

#endif   

#endif   

2、修改system_stm32f10x.c中的時鐘配置,先找到void systeminit(void)---》setsysclock()---》setsysclockto72(),將9倍頻改為6倍頻,12*6=72mhz,原本**如下:

#ifdef stm32f10x_cl  

rcc->cfgr2 &= (uint32_t)~(rcc_cfgr2_prediv2 | rcc_cfgr2_pll2mul |  

rcc_cfgr2_prediv1 | rcc_cfgr2_prediv1src);  

rcc->cfgr2 |= (uint32_t)(rcc_cfgr2_prediv2_div5 | rcc_cfgr2_pll2mul8 |  

rcc_cfgr2_prediv1src_pll2 | rcc_cfgr2_prediv1_div5);  

rcc->cr |= rcc_cr_pll2on;  

while((rcc->cr & rcc_cr_pll2rdy) == 0)  

rcc->cfgr &= (uint32_t)~(rcc_cfgr_pllxtpre | rcc_cfgr_pllsrc | rcc_cfgr_pllmull);  

rcc->cfgr |= (uint32_t)(rcc_cfgr_pllxtpre_prediv1 | rcc_cfgr_pllsrc_prediv1 |   

rcc_cfgr_pllmull9);   

#else      

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

#endif   

修改後的如下:

#ifdef stm32f10x_cl  

rcc->cfgr2 &= (uint32_t)~(rcc_cfgr2_prediv2 | rcc_cfgr2_pll2mul |  

rcc_cfgr2_prediv1 | rcc_cfgr2_prediv1src);  

rcc->cfgr2 |= (uint32_t)(rcc_cfgr2_prediv2_div5 | rcc_cfgr2_pll2mul8 |  

rcc_cfgr2_prediv1src_pll2 | rcc_cfgr2_prediv1_div5);  

rcc->cr |= rcc_cr_pll2on;  

while((rcc->cr & rcc_cr_pll2rdy) == 0)  

rcc->cfgr &= (uint32_t)~(rcc_cfgr_pllxtpre | rcc_cfgr_pllsrc | rcc_cfgr_pllmull);  

rcc->cfgr |= (uint32_t)(rcc_cfgr_pllxtpre_prediv1 | rcc_cfgr_pllsrc_prediv1 |   

rcc_cfgr_pllmull9);  

#else      

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_pllmull6);  

#endif   

STM32 F103 外部晶振8M改為12M

stm32 實現外部晶振變換有2種方法 第一種修改系統庫函式 第一步,開啟stm32f10x.h,將 define hse value uint32 t 8000000 修改為 define hse value uint32 t 12000000 重要必須做 第二步,開啟system stm32f1...

stm32f103外部中斷

void extix init void 外部中斷0服務程式 void exti9 5 irqhandler void 這是簡單的外部中斷的配置,pc7作為中斷輸入 上面補充io口的初始化 gpio initstructure.gpio mode gpio mode ipu pc6配置為快充指示 1...

STM32f103之外部中斷

一 背景 有個需求,io口檢測上公升沿,然後做相應的動作。在此記錄stm32f103的外部中斷結構及配置方法,以備下次快速上手使用。有許多不太明白,又是老司機 d 幫忙,真的是站在別人的肩膀上會讓你看的更遠,走的更快,感謝老司機。二 正文 stm32f103有68個可遮蔽中斷。但是,真正能用的其實遠...