今天又雙叒叕是個心痛的日子。
近日,打樣一款新産品PCB,微控制器選用:國産MCU,HC32L130系列,程式移植于之前的項目。
PCB樣闆焊接好後,第一次可以正常燒錄程式,再進行燒錄,IAR顯示無法連接配接MCU。
奇怪了!試了幾次不行,換一塊闆子, 也是這種情況......
此時内心很恐慌,是不是MCU電路設計有問題?但是也不應該啊,該MCU已經應用好幾款産品了......
排錯離不開試錯法,找來最基礎的點亮LED程式測試,燒寫過程、次數均正常可行。
說明程式有問題!
通過一系列嘗試和推測,将問題定位在時鐘配置上:之前使用HC32L130均是基于24MHz内部高速時鐘(HSI),而本款産品基于24MHz外部高速時鐘(HSE)。
配置24MHz内部高速時鐘(HSI)程式如下所示:
//将時鐘從RCH4MHz切換至RCH24MHz,
void App_Rch4MHzTo24MHz(void)
{
///<============== 将時鐘從RCH4MHz切換至RCH24MHz ==============================
///< RCH時鐘不同頻率的切換,需要先将時鐘切換到RCL,設定好頻率後再切回RCH
Sysctrl_SetRCLTrim(SysctrlRclFreq32768);
Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
Sysctrl_SysClkSwitch(SysctrlClkRCL);
///< 加載目标頻率的RCH的TRIM值
Sysctrl_SetRCHTrim(SysctrlRchFreq24MHz);
///< 時鐘切換到RCH
Sysctrl_SysClkSwitch(SysctrlClkRCH);
///< 關閉RCL時鐘
Sysctrl_ClkSourceEnable(SysctrlClkRCL, FALSE);
}
在修改為外部高速時鐘程式時,沒再查閱晶片手冊,直接修改的參數,程式如下所示:
//将時鐘從RCH4MHz切換至XTH24MHz,
void App_Rch4MHzTo24MHz(void)
{
///<============== 将時鐘從RCH4MHz切換至XTH24MHz ==============================
Sysctrl_SetRCLTrim(SysctrlRclFreq32768);
Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
Sysctrl_SysClkSwitch(SysctrlClkRCL);
///< 加載目标頻率的XTH值
Sysctrl_SetXTHFreq(SysctrlRchFreq24MHz);
///< 時鐘切換到XTH
Sysctrl_SysClkSwitch(SysctrlClkXTH);
///< 關閉RCL時鐘
Sysctrl_ClkSourceEnable(SysctrlClkRCL, FALSE);
}
通過查閱手冊,配置過程果然存在問題。
最後修改代碼如下:
//将時鐘從RCH4MHz切換至XTH24MHz
void App_Rch4MHzToXth24MHz (void)
{
///<======================== 将時鐘從RCH4MHz切換至XTH24MHz ==============================
///< 切換時鐘前(根據外部高速晶振)設定XTH頻率範圍,配置晶振參數,使能目标時鐘,此處為24MHz
Sysctrl_SetXTHFreq(SysctrlXthFreq20_32MHz);
Sysctrl_XTHDriverCfg(SysctrlXtalDriver3);
Sysctrl_SetXTHStableTime(SysctrlXthStableCycle16384);
Sysctrl_ClkSourceEnable(SysctrlClkXTH, TRUE);
///< 時鐘切換
Sysctrl_SysClkSwitch(SysctrlClkXTH);
///< 根據需要選擇是否關閉原時鐘(此處關閉)
Sysctrl_ClkSourceEnable(SysctrlClkRCH, FALSE);
}
最後運作調測,果然順利~