hse不起振 stm8_STM8单片机外部晶振不起振解决方法

部分型号的STM8单片机可以支持最高24MHz的外部晶振,在配置外部晶振时需要按照如下的步骤进行:

1 定义外部晶振宏定义

宏定义的写法如下:

#define HSE_VALUE ((uint32_t)24000000)

外部晶振是多少的就写多少,如果是24M的外部晶振就写成24000000。

如果不用宏定义的话,就在单片机的头文件中找到宏定义部分,头文件的宏定义默认16M外部晶振,将其修改为实际晶振值就可以。

2 配置外部晶振

配置外部晶振时需要使能外部时钟,并且要等到晶振稳定。使用库函数配置的语句如下所示:

void CLK_Init()

{

CLK_HSECmd(ENABLE);  //外部时钟开

while(SET != CLK_GetFlagStatus(CLK_FLAG_HSERDY)); //等待外部晶振起振

CLK_ClockSwitchCmd(ENABLE);//切换使能

CLK_ClockSwitchConfig(CLK_SWITCHMODE_MANUAL,CLK_SOURCE_HSE,DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);//切换到外部晶振

CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1); //1分频

}

3 在main()中初始化

将CLK_Init()在main()中初始化。至此,外部晶振就配置完毕了,但是在执行程序时,却发现晶振起振失败,程序死在CLK_ClockSwitchConfig(...)处,为什么呢?这是因为没有添加Flash等到周期,这部分内容需要在option bytes中添加,如下图所示。

默认设置为No wait state,需要修改为1 wait state。

其实,这一部分的内容在数据手册上有体现:

When using the high-speed external clock (HSE) at higher frequencies up to 24 MHz,one wait state is necessary. In this case the device option byte should be programmed to insert this wait state. Refer to the datasheet option byte section.

设置完后,再下载程序,就发现,晶振已经正常起振了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值