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

2021-10-10 16:06:39 字數 1804 閱讀 3925

stm32 實現外部晶振變換有2種方法:

第一種修改系統庫函式:

第一步,開啟stm32f10x.h,將 

#define hse_value    ((uint32_t)8000000)  修改為:  #define hse_value    ((uint32_t)12000000) 重要必須做

第二步,開啟system_stm32f10x.c,修改pll引數,將       

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

修改為:       

rcc->cfgr &= (uint32_t)((uint32_t)~(rcc_cfgr_pllsrc | rcc_cfgr_pllxtpre | rcc_cfgr_pllmull)); 如果是16m晶振,可改變pllxtpre

rcc->cfgr |= (uint32_t)(rcc_cfgr_pllsrc_hse | rcc_cfgr_pllmull6); 

第三步,自己試驗,不設定第三步,串列埠通訊傳送資料也正常,開啟建立的stm32工程,選擇projects-〉options for target ***,找到target標籤,外接的晶振預設是8mhz,我們將外接的晶振引數修改為12mhz,確定儲存,再編譯,除錯即可。

第二種使用標準庫函式:

使用下列火哥的**(只是改變了pllmull6),不需要設定上面的第一步和第三步串列埠通訊也正常。但有時需要修改第一步(試驗證明)。**如下:

#include "bsp_rccclkconfig.h"

void hse_setsysclk( uint32_t rcc_pllmul_x )

else

}

#ifndef __bsp_rccclkconfig_h

#define __bsp_rccclkconfig_h

#include "stm32f10x.h"

void hse_setsysclk( uint32_t rcc_pllmul_x );

#endif /*__bsp_rccclkconfig_h */

#include "stm32f10x.h"

#include "bsp_led.h"

#include "bsp_usart.h"

#include "bsp_rccclkconfig.h"//新增

/** * @brief 主函式

* @param 無

* @retval 無

*/int main(void)

; usart_config();

hse_setsysclk( rcc_pllmul_6 );//新增

printf( "串列埠printf函式測試\n" );

// usart_sendbyte(debug_usartx,'a');

// usart_sendhalfword(debug_usartx, 0xff56);

// usart_sendstr(debug_usartx, "歡迎使用秉火stm32f103開發板 \n");

// usart_sendarray(debug_usartx, a,10);

while (1)

}

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

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

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個可遮蔽中斷。但是,真正能用的其實遠...