STM8L151C8T6切换时钟信号

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

项目需求,单片机在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错误提示
	}
}

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值