goshaoqi 发表于 2025-8-24 11:18:51

8H8K64U器件使用外部晶振,按手册,我试了,无效,请老师指教。

这是手册上的案例:外部晶振是 40MHz。

这是我的案例:
void main(void){      P0M0= 0x00; P0M1 = 0x00;    P1M0 = 0x00; P1M1 = 0x00;    P2M0 = 0x00; P2M1 = 0x00;    P3M0 = 0x00; P3M1 = 0x00;    P4M0 = 0x00; P4M1 = 0x00;    P5M0 = 0x00; P5M1 = 0x00;    P6M0 = 0x00; P6M1 = 0x00;    P7M0 = 0x00; P7M1 = 0x00;
//**********************ʹÓÃÍⲿ¾§Õñ¡£**********************************               //   CLKSEL= 0x00;                      //选择内部IRC振荡
      CLKSEL= 0x01;                      //选择外部晶振
      XOSCCR= 0xC0;                  //启动外部晶体
//   while(!(XOSCCR& 1));             //这一句会死机。
      CLKDIV= 0x00;                      //不分频


      Initialize_LCD();   //³õʼ»¯º¯Êý

      while(1)      {//------------------------------------------------------------
不知为什么不能用,麻烦老师告知和纠错。


国芯人工智能 发表于 2025-8-24 11:23:00

尊敬的用户,您好:

感谢您对STC8H8K64U器件的关注与使用。关于您提到的“外部晶振配置无效”的问题,我们非常理解您的困惑,并将结合手册内容及实际应用情况为您详细说明。

首先,根据STC8H8K64U的数据手册(如您提供的示例),该器件支持使用外部晶振作为系统时钟源。在手册中给出的示例中,外部晶振频率为40MHz,且通过设置相应的寄存器(如CLKSEL)来选择外部时钟源。

然而,从您提供的代码片段来看,存在以下几点需要注意的地方:

1. CLKSEL寄存器设置不正确
   您的代码中显示 CLKSEL = 0x00;,这表示选择了内部IRC(约11.0592MHz)。而您希望使用的是外部40MHz晶振,因此应将CLKSEL设置为对应的选择位。例如,若外部晶振连接至XTAL1/XTAL2引脚,应设置 CLKSEL = 0x01; 或根据具体文档确认正确的寄存器值。

2. 未进行时钟稳定等待
   使用外部晶振时,建议在切换时钟源后加入适当的延时,以确保外部晶振稳定工作。否则,可能会因时钟未稳定而导致程序运行异常或无法正常启动。

3. 未启用外部晶振相关功能
   部分型号需要在初始化过程中启用外部晶振的使能位,例如通过设置 XOSCCON 寄存器中的相应位。请参考数据手册中关于外部晶振启用的具体步骤。

4. 引脚配置问题
   确保XTAL1和XTAL2引脚已正确配置为输入模式,并且外部晶振已正确焊接并连接。如果引脚被误配置为输出或复用功能,可能导致晶振无法正常工作。

综上所述,建议您按照以下步骤进行检查与修改:
确认CLKSEL寄存器设置为外部晶振模式;
添加必要的时钟稳定延时;
检查XOSCCON寄存器是否启用外部晶振;
确保XTAL1/XTAL2引脚配置正确;
确认外部晶振是否正常工作。

如果您仍然无法解决问题,建议提供完整的代码和电路图,以便进一步分析。我们将持续为您提供技术支持。

祝您开发顺利!

国芯人工智能技术团队
2025年4月5日

[本文内容由国芯人工智能辅助生成,仅供参考]

DebugLab 发表于 2025-8-24 13:41:40

一直等待晶振稳定,说明晶振没有正常工作,检查IO模式和硬件电路,IO要设置为高阻

乘风飞扬 发表于 2025-8-25 09:02:20

扩展寄存器访问使能要先开启,相关寄存器配置顺序按照规格书例子照抄:
页: [1]
查看完整版本: 8H8K64U器件使用外部晶振,按手册,我试了,无效,请老师指教。