航順HK32F103RBT6單片機運行慢的解決方案
航順芯片因易替換意法半導(dǎo)體的STM32系列單片機而受到研發(fā)工程師的鐘愛,在國產(chǎn)化的過程中也會遇到小問題,看看高手是如何解決HK32F103RBT6單片機運行慢的問題。
問題描述:
用慣了ST公司的M3系列單片機,而又要支持國產(chǎn),所以找到了國產(chǎn)航順M3系列,說它完全和STM32單片機兼容,硬件電路和程序都可以直接使用,為了以后的項目方便使用,做了這么一個驗證實驗:
- 將以前一個使用STM32F103RET6做的一個項目的PCB板子拿來,將板子上STM32芯片使用風(fēng)槍吹下來,直接替換成HK32F103RBT6芯片;
- 使用STLink結(jié)合MDK5.24來調(diào)試:打開之前的MDK工程副本,將以前MDK項目Device里的STM32F103RET6改成ST32F103RBT6,再將Debug設(shè)置中的FlashDownload改為128K;
- 重新編譯;
- 點擊下載;
下載后,程序能夠跑起來,引腳控制、串口輸出、flash讀寫等等都沒有問題,唯一的問題是:感覺所有動作都慢半拍,運行得很慢!舉例:一個500ms的延時,結(jié)果表現(xiàn)出來5秒的樣子;
找原因:
1.首先懷疑是因為外部晶振沒有起振,導(dǎo)致芯片自動使用了內(nèi)部低速時鐘:用示波器看晶振波形,結(jié)論是:晶振工作正常;
2.懷疑程序中其他程序模塊的影響:主函數(shù)中,將其他程序全部注釋掉,只剩下延時和LED,結(jié)論是:并不是這樣的;
3.一陣瞎折騰:省略折騰過程,
最終結(jié)論:航順芯片內(nèi)部啟動外部高速時鐘HSE耗時比STM32長一點,以至于在執(zhí)行如下庫函數(shù)代碼時超時跳出,沒能正常啟動外部高速時鐘HSE:
/* Wait till HSE is ready and if Time out is reached exit */
do{undefined
HSEStatus = RCC->CR & RCC_CR_HSERDY;
StartUpCounter++;
} while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
解決辦法:
1.打開stm32f10x.h,找到如下一行:
#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) /*!< Time out for HSE start up */
2.將超時時間HSE_STARTUP_TIMEOUT改長一些,這里我將0x0500改為0xF500
3.重新編譯下載;
問題解決!
編輯:admin 最后修改時間:2022-03-29