找回密码
 立即注册
查看: 287|回复: 15

梁工,关于几个例子程序主时钟问题

[复制链接]
已绑定手机

6

主题

17

回帖

80

积分

注册会员

积分
80
发表于 2026-10-23 15:07:17 | 显示全部楼层 |阅读模式
  梁工 你好:

              看了几个程序都没有配置寄存器 设置 使用外部晶振或者 内部晶振,程序注释好像是说使用外部24M晶振的。
请问是 烧录器配置还是怎么回事?还有就是定时器4的 计数器寄存器好像放入了 负数,来计算换相时间?
回复

使用道具 举报 送花

83

主题

8317

回帖

1万

积分

超级版主

积分
17932
发表于 2026-10-23 17:25:14 | 显示全部楼层
你是指的三相无刷电机驱动程序吧?
1、时钟使用内部IRC 24MHz,没有使用外部晶振,所以不需要配置时钟寄存器,下载程序时选择24MHz即可。
     如果你要使用外部晶振,请自己加上下面代码启动外部24MHz晶振:
     P1n_HighZ(Pin7+Pin6);   //晶振脚设置为高阻,如果需要随眠请关闭P1.6 P1.7数字输入功能
     XOSCCR = 0xc0;             //启动外部晶振
     while (!(XOSCCR & 1));    //等待时钟稳定
     CLKDIV = 0x00;              //时钟不分频
     CLKSEL = 0x01;              //选择外部晶振

2、定时器4不能给幅值,其值为16位无符号数,你看到的计算 0-N = 65536-N。
回复

使用道具 举报 送花

已绑定手机

6

主题

17

回帖

80

积分

注册会员

积分
80
 楼主| 发表于 2026-10-26 09:28:25 | 显示全部楼层
梁*** 发表于 2026-10-23 17:25
你是指的三相无刷电机驱动程序吧?
1、时钟使用内部IRC 24MHz,没有使用外部晶振,所以不需要配置时钟寄存 ...

你好  梁工:

            规格书没有24M的内部晶振呀.
截图202610260927124811.jpg

点评

“内部高速IRC”就是内部高速时钟,是一个可以调整频率的时钟,下载程序时会自动调整到你所选择的频率上。  详情 回复 发表于 2026-10-26 11:33
回复

使用道具 举报 送花

83

主题

8317

回帖

1万

积分

超级版主

积分
17932
发表于 2026-10-26 11:33:03 | 显示全部楼层
123luo*** 发表于 2026-10-26 09:28
你好  梁工:

            规格书没有24M的内部晶振呀.

“内部高速IRC”就是内部高速时钟,是一个可以调整频率的时钟,下载程序时会自动调整到你所选择的频率上。
回复

使用道具 举报 送花

已绑定手机

6

主题

17

回帖

80

积分

注册会员

积分
80
 楼主| 发表于 2026-10-26 11:49:27 | 显示全部楼层
梁*** 发表于 2026-10-26 11:33
“内部高速IRC”就是内部高速时钟,是一个可以调整频率的时钟,下载程序时会自动调整到你所选择的频率上 ...

你好,梁工。  你所说的选择  请问在哪里选择? 既然 寄存器没有,是不是在 烧录器上选择?烧录器还是 什么 软件 设置?

点评

你从来没有烧录过程序吗?或者打开ISP软件也能看到: [attachimg]150128[/attachimg]  详情 回复 发表于 2026-10-26 14:47
回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25428
发表于 2026-10-26 12:51:59 | 显示全部楼层
可以先描述一段具体的文字:

型号:STC8H8K64U;
1,帮生成使用内部高速IRC时钟,24MHz的程序;
2,帮生成使用外部24MHz晶振的程序;


贴到STC【AI助手】中

STC AI 助手
截图202610261253214738.jpg

型号:STC32G12K128;
1,帮生成使用内部高速IRC时钟,24MHz的程序;
2,帮生成使用外部24MHz晶振的程序;
回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25428
发表于 2026-10-26 12:55:41 | 显示全部楼层
截图202610261255269421.jpg
回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25428
发表于 2026-10-26 12:56:11 | 显示全部楼层

关键信息已齐备。下面给出两个程序。


重要前提:内部 IRC 的 24MHz 是怎么来的

手册明确写:"STC8H系列单片机内部均集成有一颗高精度内部IRC振荡器。在用户使用ISP下载软件进行下载时,ISP下载软件会根据用户所选择/设置的频率自动进行调整",并且"对于一般用户,内部IRC频率的调整可以不用关心,因为频率调整工作在进行ISP下载时已经自动完成了。所以若用户不需要自行调整频率,那么下面相关的4个寄存器(IRTRIM/VRT6等)也不能随意修改,否则可能会导致工作频率变化"。

所以 第 1 个程序 的做法是:

  1. 下载时在 ISP 软件里把"输入用户程序运行时的 IRC 频率"选为 24MHz(软件会自动把校准值烧进 IRTRIM 等寄存器);
  2. 程序中把主时钟源选为内部高速高精度 IRC(CLKSEL 的 MCKSEL[1:0] = 00),CLKDIV 不分频,即为 24MHz。

不要在代码里自己去写 IRTRIM = xxx 硬拼 24MHz——那样会破坏出厂校准,手册已明确警告。


程序一:内部高速 IRC,24MHz

/*------------------------------------------------------------------
  STC8H8K64U —— 使用内部高速高精度 IRC,系统工作频率 24MHz
  ------------------------------------------------------------------
  使用说明(必读):
  1. 用 AiCube-ISP / STC-ISP 下载时,在"输入用户程序运行时的 IRC 频率"
     一栏选择 24MHz,让 ISP 软件把 24MHz 的校准值写入 IRTRIM 等寄存器;
  2. 本程序只负责把主时钟源切换为"内部高速高精度 IRC"并让时钟不分频,
     不在代码中修改 IRTRIM/VRT6 等校准寄存器,避免破坏出厂校准;
  3. 编译环境:Keil C51,头文件使用 stc8h.h;
  4. 观察现象:P2.0 上接的 LED 以约 1Hz 频率闪烁(用软件延时)。
------------------------------------------------------------------*/
#include "stc8h.h"
#include "intrins.h"

/* 软件延时:约 (ms) 毫秒,基于 24MHz 主频 */
void Delay_ms(unsigned int ms)
{
    unsigned int i;
    unsigned char  j;

    for (i = 0; i < ms; i++)
    {
        for (j = 0; j < 200; j++)
        {
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
        }
    }
}

void main(void)
{
    P_SW2 |= 0x80;          /* 使能访问 XFR,没有冲突不用关闭 */

    /* I/O 口初始化 */
    P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x00; P1M1 = 0x00;
    P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x00; P3M1 = 0x00;
    P4M0 = 0x00; P4M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;

    /* 上电默认即内部高速 IRC,这里显式写一次,确保 MCKSEL[1:0]=00 */
    HIRCCR = 0x80;          /* ENHIRC(B7)=1,使能内部高速高精度 IRC */
    while (!(HIRCCR & 0x01));/* 等待 HIRCST(B0)=1,频率稳定 */

    CLKDIV = 0x00;          /* 时钟不分频 */
    CLKSEL = 0x00;          /* MCK2SEL[1:0]=00, MCKSEL[1:0]=00:主时钟=内部高速高精度IRC */

    while (1)
    {
        P20 = 0;            /* LED 亮 */
        Delay_ms(500);
        P20 = 1;            /* LED 灭 */
        Delay_ms(500);
    }
}

寄存器位对应说明(依据手册"系统时钟选择寄存器(CLKSEL)"):

  • CLKSEL 地址 FE00H,B3、B2 为 MCK2SEL[1:0],B1、B0 为 MCKSEL[1:0]。CLKSEL = 0x00 即 MCK2SEL=00、MCKSEL=00 → 主时钟源 = 内部高速高精度 IRC。
  • HIRCCR 地址 FE02H,B7 为 ENHIRC,B0 为 HIRCST(只读)。所以 HIRCCR = 0x80 使能,HIRCCR & 0x01 查稳定标志。
  • CLKDIV 地址 FE01H,0x00 为不分频。

程序二:外部 24MHz 晶振

/*------------------------------------------------------------------
  STC8H8K64U —— 使用外部 24MHz 晶振作为系统时钟
  ------------------------------------------------------------------
  使用说明(必读):
  1. 硬件:24MHz 晶振跨接在 XTALI(P1.7) 与 XTALO(P1.6) 之间,
     每个引脚对地各接一个负载电容(典型 10~30pF,按晶振规格);
  2. XITYPE 必须为 1(外部时钟源是晶体振荡器,接 XTALI 和 XTALO);
  3. STC8H8K64U 的 XOSCCR 位序与 STC8H 其它系列不同:
        B7 ENXOSC, B6 XITYPE, B5 GAIN, B3~B2 XCFILTER[1:0], B0 XOSCST
     24MHz 晶振属于"24M 及以下",XCFILTER[1:0] 置 01;
  4. 必须先等 XOSCST=1 再切 CLKSEL,不能先切后等;
  5. 编译环境:Keil C51,头文件 stc8h.h;
  6. 启动失败时程序会停在 while(!(XOSCCR & 0x01)) 处,便于排查晶振电路。
------------------------------------------------------------------*/
#include "stc8h.h"
#include "intrins.h"

/* 软件延时:约 (ms) 毫秒,基于 24MHz 主频 */
void Delay_ms(unsigned int ms)
{
    unsigned int i;
    unsigned char  j;

    for (i = 0; i < ms; i++)
    {
        for (j = 0; j < 200; j++)
        {
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
        }
    }
}

void main(void)
{
    P_SW2 |= 0x80;          /* 使能访问 XFR,没有冲突不用关闭 */

    /* I/O 口初始化 */
    P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x00; P1M1 = 0x00;
    P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x00; P3M1 = 0x00;
    P4M0 = 0x00; P4M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;

    /* 启动外部晶振:ENXOSC=1, XITYPE=1(晶振), GAIN=1(高增益),
       XCFILTER[1:0]=01(24M及以下)  ->  B7 B6 B5 B3B2 = 1110 0100b = 0xE4 */
    XOSCCR = 0xE4;
    while (!(XOSCCR & 0x01));   /* 等待 XOSCST(B0)=1,外部晶振频率稳定 */

    CLKDIV = 0x00;              /* 时钟不分频 */
    CLKSEL = 0x01;              /* MCK2SEL[1:0]=00, MCKSEL[1:0]=01:主时钟=外部高速晶振 */

    while (1)
    {
        P20 = 0;                /* LED 亮 */
        Delay_ms(500);
        P20 = 1;                /* LED 灭 */
        Delay_ms(500);
    }
}

寄存器位对应说明(依据手册"外部振荡器控制寄存器(XOSCCR)"中 STC8H8K64U系列(注意:SFR分配和STC8H其它系列不兼容) 表):

位 B7 B6 B5 B4 B3 B2 B1 B0
XOSCCR ENXOSC XITYPE GAIN - XCFILTER[1] XCFILTER[0] - XOSCST
  • 写入 0xE4 = 1110 0100b:ENXOSC=1、XITYPE=1、GAIN=1、XCFILTER[1:0]=01、B1/B0 写 0。读回时 B0 由硬件置位为 XOSCST。
  • CLKSEL = 0x01:MCKSEL[1:0]=01 → 主时钟源 = 外部高速晶振。

两点必须提醒(手册原文警告):

  1. XCFILTER 字段"需谨慎设置,设置不当可能会导致外部晶振供给内部MCU的时钟不正常",且"目前只有……STC8H8K64U系列的B/C/D版芯片才有效"。若你的芯片是 A 版,该字段无效,可按 XOSCCR = 0xF8(ENXOSC/XITYPE/GAIN 置位、XCFILTER=1x)或直接 0xE0 亦可起振,但建议按上面推荐值使用并实测确认。
  2. 若使用有源晶振/外部时钟信号而非晶体,则 XITYPE=0,信号只接 XTALI(P1.7),此时 P1.6 固定为高阻输入。

两个程序共用的核对清单

项目 内部 IRC 24MHz 外部 24MHz 晶振
主时钟源 MCKSEL[1:0]=00 MCKSEL[1:0]=01
需先使能并等待稳定 HIRCCR.ENHIRC=1,等 HIRCST=1 XOSCCR.ENXOSC=1,等 XOSCST=1
频率校准 由 ISP 下载时写入 IRTRIM(代码中不可乱改) 由晶振本身决定
硬件 无需外部器件 XTALI/XTALO + 两端负载电容
CLKDIV 0x00 不分频 0x00 不分频

以上寄存器位、地址与配置顺序均严格依照《STC8H-20261023》第 7 章"时钟、复位、看门狗与电源管理"中的 CLKSEL、HIRCCR、XOSCCR、CLKDIV 定义及"选择系统时钟源"范例程序给出。

如需把 Delay_ms 换成用定时器实现(更精确的 24MHz 时基),或需要在运行时通过按键在内部 IRC 与外部晶振间动态切换,告诉我型号版本(B/C/D 版)和是否需要保留串口,我再给对应代码。


🔍 搜索 "STC8H8K64U 内部高速IRC 24MHz 程序"

📌 相关论坛讨论

  1. 梁工,关于几个例子程序主时钟问题
  2. STC8H使用外部晶振,如何关闭IRC?
  3. stc8H8K64U主晶振和rtc晶振不能同时存在?

⏱️ 查找用时 9.9s | 总回答用时 22.4s

回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25428
发表于 2026-10-26 12:58:11 | 显示全部楼层
截图202610261258072515.jpg
回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25428
发表于 2026-10-26 12:58:34 | 显示全部楼层

手册信息齐备。STC32G12K128 有两条设置内部 24MHz 的正规途径,我会都说明清楚。


前提说明:内部 24MHz 从哪里来

手册有两个关键结论:

  1. "STC32G系列单片机内部……在用户使用ISP下载软件进行下载时,ISP下载软件会根据用户所选择/设置的频率自动进行调整",且"对于一般用户,内部IRC频率的调整可以不用关心,因为频率调整工作在进行ISP下载时已经自动完成了"。→ 最简单:下载时把 IRC 频率选 24MHz。
  2. 若要在程序里自行切到 24MHz,手册"如何在用户程序中设置程序运行时的工作频率"给出了标准算法,使用 CHIPID12(T24M_ADDR,即 24MHz 校准值)、VRTRIM = VRT27M_ADDR、IRCBAND 选 27MHz 频段(因为 24MHz 落在 27MHz 频段 ±27% 范围内)。

程序一即按手册原算法编写。


程序一:内部高速 IRC,24MHz(程序内自行设定)

/*------------------------------------------------------------------
  STC32G12K128 —— 使用内部高速高精度 IRC,系统工作频率 24MHz
  ------------------------------------------------------------------
  使用说明(必读):
  1. 本程序在代码中主动把内部 IRC 设为 24MHz,使用手册
     "如何在用户程序中设置程序运行时的工作频率"中的标准做法:
     IRTRIM 取 CHIPID12(24MHz 校准值),VRTRIM 取 VRT27M_ADDR,
     IRCBAND 选择 27MHz 频段(24MHz 位于该频段内)。
  2. 若你只想用"下载时选的频率",可把下载时的 IRC 频率设为 24MHz,
     然后删掉本程序中标有【频率设定】的两行,效果相同。两种方式不要混用。
  3. 编译环境:Keil C251,头文件使用 stc32g.h。
  4. 观察现象:P2.0 接 LED,约 1Hz 闪烁。
------------------------------------------------------------------*/
#include "stc32g.h"
#include "intrins.h"

#define T24M_ADDR   CHIPID12        /* 24MHz 的 IRTRIM 校准值 */
#define VRT27M_ADDR CHIPID23        /* VRTRIM_27M 校准值 */

/* 软件延时:约 ms 毫秒,基于 24MHz 主频 */
void Delay_ms(unsigned int ms)
{
    unsigned int i;
    unsigned char  j;

    for (i = 0; i < ms; i++)
    {
        for (j = 0; j < 200; j++)
        {
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
        }
    }
}

void main(void)
{
    EAXFR = 1;              /* 使能访问 XFR,没有冲突不用关闭 */
    CKCON = 0x00;           /* 设置外部数据总线速度为最快 */
    WTST  = 0x00;           /* 设置程序代码等待参数,赋值为0可将CPU执行程序的速度设置为最快 */

    P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x00; P1M1 = 0x00;
    P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x00; P3M1 = 0x00;
    P4M0 = 0x00; P4M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;

    /*----【频率设定】把内部 IRC 设为 24MHz ----*/
    CLKDIV = 0x04;          /* 改频前先分频,避免高频运行不稳 */
    IRTRIM   = T24M_ADDR;   /* 24MHz 的 IRTRIM 校准值 */
    VRTRIM   = VRT27M_ADDR; /* 使用 27MHz 频段对应的 VRTRIM 校准值 */
    IRCBAND &= ~0x03;       /* IRCBAND[1:0] 先清零 */
    IRCBAND |= 0x02;        /* IRCBAND[1:0]=10:选择 27MHz 频段 */
    CLKDIV = 0x00;          /* 频率设定完成后取消分频 */

    /*----使能内部高速 IRC 并等待稳定----*/
    HIRCCR = 0x80;          /* ENHIRC(B7)=1,启动内部高速IRC */
    while (!(HIRCCR & 0x01));/* 等待 HIRCST(B0)=1,时钟稳定 */

    CLKDIV = 0x00;          /* 时钟不分频 */
    CLKSEL = 0x00;          /* MCK2SEL[1:0]=00 -> MCKSEL[1:0]=00:主时钟=内部高精度IRC */

    while (1)
    {
        P20 = 0;            /* LED 亮 */
        Delay_ms(500);
        P20 = 1;            /* LED 灭 */
        Delay_ms(500);
    }
}

寄存器位对应(依据手册"系统时钟选择寄存器(CLKSEL)"、"内部高速高精度IRC控制寄存器(HIRCCR)"、"IRC频段选择寄存器(IRCBAND)"):

  • CLKSEL(7EFE00H):B3、B2 = MCK2SEL[1:0],B1、B0 = MCKSEL[1:0]。0x00 → MCK2SEL=00(选择 MCKSEL 指定的时钟源)、MCKSEL=00(内部高精度 IRC)。
  • HIRCCR(7EFE02H):B7 = ENHIRC,B0 = HIRCST(只读)。0x80 使能,& 0x01 查稳定。
  • IRCBAND:B1、B0 = SEL[1:0]。&= ~0x03 后 |= 0x02 → SEL[1:0]=10 → 27MHz 频段(24MHz 在该频段 ±27% 范围内)。

程序二:外部 24MHz 晶振

/*------------------------------------------------------------------
  STC32G12K128 —— 使用外部 24MHz 晶振作为系统时钟
  ------------------------------------------------------------------
  使用说明(必读):
  1. 硬件:24MHz 晶体接在 XTALI(P1.7) 与 XTALO(P1.6) 之间,
     两个引脚各对地接负载电容(典型 10~30pF,按晶振规格书);
  2. XITYPE 必须为 1(外部时钟源为晶体振荡器,接 XTALI+XTALO);
  3. STC32G12K128 的 XOSCCR 位序:
        B7 ENXOSC, B6 XITYPE, B5 GAIN, B3~B2 XCFILTER[1:0], B0 XOSCST
     24MHz 属于"24M 及以下",XCFILTER[1:0] 置 01,因此写 0xE4;
  4. 必须先等 XOSCST=1 再切 CLKSEL,顺序不可颠倒;
  5. 编译环境:Keil C251,头文件 stc32g.h;
  6. 若晶振不起振,程序停在 while(!(XOSCCR & 0x01)) 处,便于定位硬件问题。
------------------------------------------------------------------*/
#include "stc32g.h"
#include "intrins.h"

/* 软件延时:约 ms 毫秒,基于 24MHz 主频 */
void Delay_ms(unsigned int ms)
{
    unsigned int i;
    unsigned char  j;

    for (i = 0; i < ms; i++)
    {
        for (j = 0; j < 200; j++)
        {
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
            _nop_();
        }
    }
}

void main(void)
{
    EAXFR = 1;              /* 使能访问 XFR,没有冲突不用关闭 */
    CKCON = 0x00;           /* 设置外部数据总线速度为最快 */
    WTST  = 0x00;           /* 程序代码等待参数设为0,CPU执行最快 */

    P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x00; P1M1 = 0x00;
    P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x00; P3M1 = 0x00;
    P4M0 = 0x00; P4M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;

    /* 启动外部晶振:ENXOSC=1, XITYPE=1(晶振), GAIN=1(高增益),
       XCFILTER[1:0]=01(24M及以下)  ->  B7B6B5 B3B2 = 1110 0100b = 0xE4 */
    XOSCCR = 0xE4;
    while (!(XOSCCR & 0x01));   /* 等待 XOSCST(B0)=1,外部晶振频率稳定 */

    CLKDIV = 0x00;              /* 时钟不分频 */
    CLKSEL = 0x01;              /* MCK2SEL[1:0]=00, MCKSEL[1:0]=01:主时钟=外部高速晶振 */

    while (1)
    {
        P20 = 0;                /* LED 亮 */
        Delay_ms(500);
        P20 = 1;                /* LED 灭 */
        Delay_ms(500);
    }
}

XOSCCR 位对应(依据手册"外部振荡器控制寄存器(XOSCCR),外部晶振抗干扰"):

位 B7 B6 B5 B4 B3 B2 B1 B0
XOSCCR ENXOSC XITYPE GAIN - XCFILTER[1] XCFILTER[0] - XOSCST

写 0xE4 = 1110 0100b:ENXOSC=1、XITYPE=1、GAIN=1、XCFILTER[1:0]=01、B1/B0 写 0;读回时 B0 由硬件置为 XOSCST。


关于手册范例中 XOSCCR = 0xc0 的说明

手册"选择外部高速晶振(XOSC)作为系统时钟源"范例写的是 XOSCCR = 0xc0,即 1100 0000b:ENXOSC=1、XITYPE=1、GAIN=0(低增益)、XCFILTER[1:0]=00。这组值对 24MHz **仍可工作**(XCFILTER=00 适用于 48M 及以下),只是抗干扰滤波档位偏宽、增量为低增益。我上面给的 0xE4 是在不改变"能起振"这一基本事实的前提下,加了"24M 及以下"滤波档与高增益。若你的板子已在用 0xC0 且稳定运行,**没有必要改成 0xE4**。


两种方案对比

项目 内部 IRC 24MHz 外部 24MHz 晶振
主时钟 MCK2SEL[1:0]=00, MCKSEL[1:0]=00 MCK2SEL[1:0]=00, MCKSEL[1:0]=01
频率来源 CHIPID12 校准值 + IRCBAND=27M 频段 晶振本体
需等待稳定标志 HIRCST(HIRCCR.B0) XOSCST(XOSCCR.B0)
硬件需求 无 晶体 + 2 个负载电容
精度 ±0.3% 以内(下载校准后),温漂可达 -1.35%~1.30% 取决于晶振规格

以上寄存器地址、位定义与配置顺序均依照《STC32G-20261023》第 7 章"时钟管理,芯片上电工作过程,外部晶振抗干扰"及第 10 章"第三方对STC32系列ISP下载程序范例及用户程序如何选择内部时钟频率"中的原文与范例程序给出。

如需把 Delay_ms 改为定时器精确定时,或需要在运行时用按键在内部 IRC 与外部晶振之间动态切换(切换时需重新设 CLKDIV),告诉我是否需要保留串口,我再给对应代码。


🔍 搜索 "STC32G12K128 内部高速IRC 24MHz 时钟配置 程序"

📌 相关论坛讨论

  1. 梁工,关于几个例子程序主时钟问题
  2. 请教大家keil 项目中的频率与STC-ISP中用户程序运行时的IRC频率的关系
  3. 关于32G12K128芯片外部晶振选择问题 | 串口通信,建议用STC高稳定的内部时钟

⏱️ 查找用时 7.3s | 总回答用时 20.4s

回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-11-7 11:25 , Processed in 0.078571 second(s), 86 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表