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