×
嵌入式 > 技术百科 > 详情

STM8L151C8T6切换时钟信号

发布时间:2021-04-23 发布时间:
|

先说重点:切换时钟源后,需要重新初始化时钟相关的外设。


项目需求,单片机在A状态下使用外部12MHz的晶振作为时钟信号,B状态下使用内部时钟HSI。


代码如下:


//初始化时钟信号

//形参:UINT8 Clk_Flg:时钟源,可以选为HSE或HSI

void InitClock(UINT8 Clk_Flg) {

UINT16 Clk_Cnt = 0;

if(HSE == Clk_Flg){ //时钟源选为HSE

CLK_DeInit();

CLK_HSEConfig(CLK_HSE_ON);

while(!CLK_GetFlagStatus(CLK_FLAG_HSERDY)){

if ((++Clk_Cnt) > 50000){

InitClock(HSI); //HSE启动失败,切回HSI

return;

}

}

CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSE);

CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);

CLK_SYSCLKSourceSwitchCmd(ENABLE);

CLK_ClockSecuritySystemEnable();

// System_ERROR_UserCallback(ERROR_REMOVE_HSE);//自定义函数,清除HSE错误提示

return;

}

else{ //时钟源选为HSI

CLK_HSICmd(ENABLE);

CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_2); //内部时钟为16MHz,2分频 = 8Mhz,

// System_ERROR_UserCallback(ERROR_HSE); //自定义函数,HSE错误提示

}

}


实际运行时发现,切换时钟后,和时钟相关的外设工作异常。


考虑到时钟源的影响,将所有工作异常的外设重新初始化后,代码即正常运行。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil5(MDK5)在调试(debug)过程中遇到的问题