大意!6行代碼,“報(bào)廢”5片單片機(jī)!
今天又雙叒叕是個(gè)心痛的日子。
近日,打樣一款新產(chǎn)品PCB,微控制器選用:國(guó)產(chǎn)MCU,HC32L130系列,程序移植于之前的項(xiàng)目。
PCB樣板焊接好后,第一次可以正常燒錄程序,再進(jìn)行燒錄,IAR顯示無(wú)法連接MCU。

奇怪了!試了幾次不行,換一塊板子, 也是這種情況......
此時(shí)內(nèi)心很恐慌,是不是MCU電路設(shè)計(jì)有問(wèn)題?但是也不應(yīng)該啊,該MCU已經(jīng)應(yīng)用好幾款產(chǎn)品了......
排錯(cuò)離不開(kāi)試錯(cuò)法,找來(lái)最基礎(chǔ)的點(diǎn)亮LED程序測(cè)試,燒寫(xiě)過(guò)程、次數(shù)均正常可行。
說(shuō)明程序有問(wèn)題!
通過(guò)一系列嘗試和推測(cè),將問(wèn)題定位在時(shí)鐘配置上:之前使用HC32L130均是基于24MHz內(nèi)部高速時(shí)鐘(HSI),而本款產(chǎn)品基于24MHz外部高速時(shí)鐘(HSE)。
配置24MHz內(nèi)部高速時(shí)鐘(HSI)程序如下所示:
//將時(shí)鐘從RCH4MHz切換至RCH24MHz,void App_Rch4MHzTo24MHz(void){///<============== 將時(shí)鐘從RCH4MHz切換至RCH24MHz ==============================///< RCH時(shí)鐘不同頻率的切換,需要先將時(shí)鐘切換到RCL,設(shè)置好頻率后再切回RCHSysctrl_SetRCLTrim(SysctrlRclFreq32768);Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);Sysctrl_SysClkSwitch(SysctrlClkRCL);///< 加載目標(biāo)頻率的RCH的TRIM值Sysctrl_SetRCHTrim(SysctrlRchFreq24MHz);///< 時(shí)鐘切換到RCHSysctrl_SysClkSwitch(SysctrlClkRCH);///< 關(guān)閉RCL時(shí)鐘Sysctrl_ClkSourceEnable(SysctrlClkRCL, FALSE);}
在修改為外部高速時(shí)鐘程序時(shí),沒(méi)再查閱芯片手冊(cè),直接修改的參數(shù),程序如下所示:
//將時(shí)鐘從RCH4MHz切換至XTH24MHz,void App_Rch4MHzTo24MHz(void){///<============== 將時(shí)鐘從RCH4MHz切換至XTH24MHz ==============================Sysctrl_SetRCLTrim(SysctrlRclFreq32768);Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);Sysctrl_SysClkSwitch(SysctrlClkRCL);///< 加載目標(biāo)頻率的XTH值Sysctrl_SetXTHFreq(SysctrlRchFreq24MHz);///< 時(shí)鐘切換到XTHSysctrl_SysClkSwitch(SysctrlClkXTH);///< 關(guān)閉RCL時(shí)鐘Sysctrl_ClkSourceEnable(SysctrlClkRCL, FALSE);}
通過(guò)查閱手冊(cè),配置過(guò)程果然存在問(wèn)題。
最后修改代碼如下:
//將時(shí)鐘從RCH4MHz切換至XTH24MHzvoid App_Rch4MHzToXth24MHz (void){///<======================== 將時(shí)鐘從RCH4MHz切換至XTH24MHz ==============================///< 切換時(shí)鐘前(根據(jù)外部高速晶振)設(shè)置XTH頻率范圍,配置晶振參數(shù),使能目標(biāo)時(shí)鐘,此處為24MHzSysctrl_SetXTHFreq(SysctrlXthFreq20_32MHz);Sysctrl_XTHDriverCfg(SysctrlXtalDriver3);Sysctrl_SetXTHStableTime(SysctrlXthStableCycle16384);Sysctrl_ClkSourceEnable(SysctrlClkXTH, TRUE);///< 時(shí)鐘切換Sysctrl_SysClkSwitch(SysctrlClkXTH);///< 根據(jù)需要選擇是否關(guān)閉原時(shí)鐘(此處關(guān)閉)Sysctrl_ClkSourceEnable(SysctrlClkRCH, FALSE);}
最后運(yùn)行調(diào)測(cè),果然順利~
往期推薦
評(píng)論
圖片
表情

