单片机
返回首页

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

2021-09-06 来源:eefocus

部分型号的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.


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

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 用数字电路CD4069制作的万能遥控轻触开关

  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 如何调制IC555振荡器

    相关电子头条文章