STM32使用非8M晶振時如何修改程式碼
目前能找到的大部分程式碼都是預設8M外部晶振的,若使用的晶振不是8M則需要作一些修改。例如這次我使用的外部晶振是12M的,作如下修改。
1.首先需要修改"Option for target 'xxx'"中的Target -> Xtal(Mhz)處的值(改為12MHz)。此處修改影響Debug時觀察到的時鐘數值。
2.在system_stm32f10x.c開頭的註釋裡有:
* 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depedning on * the product used), refer to "HSE_VALUE" define in "stm32f10x.h" file. * When HSE is used as system clock source, directly or through PLL, and you * are using different crystal you have to adapt the HSE value to your own * configuration.
根據描述,將stm32f10x.h中大約在0121行找到,修改掉。
#if !defined HSE_VALUE #ifdef STM32F10X_CL#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ #else #define HSE_VALUE ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */ #endif /* STM32F10X_CL */ #endif /* HSE_VALUE */
不過很奇怪的是,即使修改了此處的值,PLL的時鐘還是不正確(程式依舊講PLL按9倍頻配置)。此處有待進一步探究(目前暫時只知道編譯的程式碼沒有用到HSE_VALUE)。
3.順著程式碼尋找原因,最後發現真正起作用的部分在system_stm32f10x.c裡的SetSysClockTo72(void)函式(0993行,這裡假設我們希望MCU工作在72MHZ)。
在1058行有這樣一段程式碼:
#else /* 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);
註釋部分是函式自帶的,真正起作用的部分在這裡,因此把RCC_CFGR_PLLMULL9改為RCC_CFGR_PLLMULL6。
相關推薦
STM32使用非8M晶振時如何修改程式碼
目前能找到的大部分程式碼都是預設8M外部晶振的,若使用的晶振不是8M則需要作一些修改。例如這次我使用的外部晶振是12M的,作如下修改。 1.首先需要修改"Option for target 'xxx'"中的Target -> Xtal(Mhz)處的值(改為
stm32變更外部晶振時如何配置時鐘、以及HSI的使用
void RCC_Configuration(void) { /* RCC system reset(for debug purpose) */ RCC_DeInit(); RCC_HSICmd(ENABLE); //開啟內部高速時鐘
STM32不同外部晶振時工程的配置問題
遇到的問題:同樣的串列埠配置程式碼在一種407開發板上能正常輸出,但是換到另一種407開發板上後就出現亂碼,檢查串列埠輸出波形後發現,電平轉換晶片沒有問題,但是波特率卻有問題。問題原因: 經過故障排查發現出現上述問題的原因是兩種STM32F407使用的外部晶振的頻率不一樣
STM32:外部晶振時鐘配置
void SystemClock_Config(void) { RCC_DeInit(); RCC_HSEConfig(RCC_HSE_ON); //INPUT HSE = 24M Err
STM32使用內部晶振和外部晶振
在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法如果使用內部RC振盪器而不使用外部晶振,請按照下面方法處理:1)對於100腳或144腳的產品,OSC_IN應接地,OSC_OUT應懸空。2)對於少於100腳的產品,有2種接法:2.1)OSC_IN和OSC_
基於WINAVR + avr studio 4 使用外部晶振時及延時可能遇到的問題( By-炬本)
第一步,使用外部晶振 1. 連線isp下載線 2. 開啟avr fighter a” 如下介面,在熔絲位那框架,點選“讀取” (注:上圖是預設的熔絲位) b.單擊滑鼠,把熔絲位改為下圖(僅是JTAGEN 和CKOPT 為0),單擊寫入: 這樣就能使用
stm32 外接晶振問題
由於STM32F10x庫官方採用的是預設的外接8MHz晶振,因此造成很多使用者也採用了8MHz的晶振,但是,8MHz的晶振不是必須的,其他頻點的晶振也是可行的,只需要在庫中做相應的修改就行。 在論壇上看到很多使用者反映,使用外接12MHz的晶振,會造成很多的問題,如USART的波特率不正確,Syst
關於Nucleo-STM32板沒有晶振,時鐘頻率的來源
剛入手的一塊Nucleo-STM32F303RE開發板,高興之餘發現板上竟然沒有晶振,不過有出廠程式,燈能閃,難道用了內部晶振?帶著疑問百度了一下,有人說是和板上st-link共用8M晶振,那麼到底是不這樣呢? 一、結論: 下載這塊板的使用者手冊
STM32系列修改外部晶振以及程式碼的修改(f103、f105為例)
剛剛接觸STM32的時候,用的都是8M晶振。比如你想更換到為外部晶振為12M,但是主頻仍想用72M的。該如何設定?或者想倍頻到更高的主頻該怎麼修改? 例子就直接直接拿<正點原子>的例子吧! 屬性 原來 現在 外部晶
STM32F407ZG微控制器晶振由例程預設推薦的8M換為自定義的4-26M時的注意事項
相信作為一名STM32新手,大家都是從官網上下載例程來學習。現在firmwave的最新版本為1.1.0,下載地址為 http://www.st.com/stonline/stappl/resourceSelector/app?page=resourceSelector&docty
STM32使用外部16MHZ晶振修改程式點
做小封裝產品設計的朋友或許知道3225-4PIN的晶振,為何8MHZ晶振批量價格要到2元一片,而16MHZ晶振只需要0.4元甚至更少。究其原因是因為3225封裝的晶振目前全球最低頻率一般為8MHZ,而國內8MHZ達不到精度指標,所以市場上的8MHZ晶振一般為進口晶振,因此成
當手頭上沒有示波器,如何通過程式碼測試stm32外部晶振是否工作
1.首先檢視stm32手冊,可以知道有一個時鐘控制暫存器(RCC_CR),在該暫存器中,第16位和第0位和25位和24位分別為: HSEON:外部高速時鐘使能 (External high-speed clock enable) HSION:內部高速時鐘使能
【springboot】spring boot修改程式碼後無需重啟設定,在開發時實現熱部署
熱部署是什麼 大家都知道在專案開發過程中,常常會改動頁面資料或者修改資料結構,為了顯示改動效果,往往需要重啟應用檢視改變效果,其實就是重新編譯生成了新的Class檔案,這個檔案裡記錄著和程式碼等對應的各種資訊,然後Class檔案將被虛擬機器的ClassLoader載入。 而熱部署正是利用了這
VB winsock傳送時提示 "執行時錯誤'40006'",我怎麼修改程式碼
這個方法是很好的,但是我在用的時候出現報錯: 引數不可選 然後我改成這樣 '判斷是否連線了,才傳送資料 j = 1 Do Until Winsock1.State = 7 Or j > 600 j =
stm32f429ig上的ucLinux修改外部晶振頻率
將stm32f429i-discovery開發板的 emcraft uclinux 例程移植到秉火stm32f429的開發板上,由於stm32f429i-discovery上使用的是8MHZ外部晶振,而秉火stm32f429的開發板使用的是25MHZ的晶振。 u-boot部分 修改u
STM32外部晶振不起振
晶片:STM32F429 開發平臺:Keil 問題: STM32外部晶振不起振,選擇了內部16MHZ,從而導致延時函式、波特率、定時器等等有問題。 有源晶振和無源晶振的區別 有源晶振一般4個腳,一個電源,一個接地,一個訊號輸出端,一個NC(空腳)。有個點標記的為1腳,按逆
51微控制器 Keil C 延時程式的簡單(晶振12MHz,一個機器週期1us.)
一. 500ms延時子程式 void delay500ms(void) { unsigned char i,j,k; for(i=15;i>0;i--) for(j=202;j>0;j--) for(k=81;k>0;k--); } 產生的彙
spring boot修改程式碼後無需重啟設定,在開發時實現熱部署
熱部署是什麼大家都知道在專案開發過程中,常常會改動頁面資料或者修改資料結構,為了顯示改動效果,往往需要重啟應用檢視改變效果,其實就是重新編譯生成了新的Class檔案,這個檔案裡記錄著和程式碼等對應的各種資訊,然後Class檔案將被虛擬機器的ClassLoader載入。而熱部署
談一談修改程式碼時加註釋的原則和方法
暮鼓集 行走集 原作於2008年06月01日,軟體部培訓稿 我們修改程式碼時少不了要加一些註釋,這基本的原則是“言簡意賅”,只要做到大家能看懂,在版本比較工具(BC及VSS)中能一目瞭然,這就可以了。 下面介紹一些方法供大家參考:
關於除錯----在單步執行某個程式的中間修改原始碼,當修改程式碼之後移動到下一步時,偵錯程式自動在執行下一語句之前重新編譯
在單步執行某個程式的中間修改原始碼,當修改程式碼之後移動到下一步時,偵錯程式自動在執行下一語句之前重新編譯。所以說如果編譯過程中出了問題,修改了程式,即使不手動停止重新啟動程式,直接執行的話也沒有問題的,編譯器會預設重新編譯啟動。