|
一、 硬件环境 芯片型号: STC32G12K128 ( LQFP64 ) 供电电压: 5V 复位电路: P5.4 (Pin 18/14) 已接 1kΩ 上拉电阻到 5V(已关闭低电平复位功能)。 UCAP电路: Pin 17 接了 100nF + 1uF 电容到地(实测空闲电压 4.56V,已知这是 USB LDO 关闭时的正常现象)。 下载工具: STC-ISP V6.9x + 官方 USB转TTL 工具。
二、 软件环境 开发环境: Keil C251 编译模式 (关键): 已设置为 Source Mode + XSmall: near vars, far const, ptr-4 + Code Rom: Huge(已排除指针溢出导致的乱码问题)。 测试代码: 自写的“频率盲扫程序” (使用 Timer1 做波特率发生器,115200bps,轮询测试不同频率基准)。
三、 故障现象描述我在 STC-ISP 软件中,明确将 “IRC频率选择” 和 “用户程序运行时的频率” 都手动输入并锁定为 24.000MHz。显示下载成功。 但是,烧录后运行“频率盲扫程序”,发现以下异常: 频率未锁定 24M: 程序在按 24MHz 计算波特率时,输出全是乱码。 实际跑在 33M (出厂默认?): 当程序切换到按 33.1776MHz (IRC默认值) 计算波特率时,串口助手能收到清晰稳定的文字。 偶发跳变至 6M: 在反复开关串口助手或复位瞬间,芯片有时会跑在 6.000MHz (似乎是 24M 的 4分频?),此时按 6M 计算波特率文字清晰。
四、 我的疑问我已经尝试在代码初始化中加入了 WTST = 0; CLKDIV = 0; P_SW2 |= 0x80; 的暴力锁定代码,但似乎芯片内部的 IRC 并没有被 STC-ISP 正确修剪到 24MHz,而是始终运行在出厂的 33M 附近,或者在受干扰时变成 6M。 请问: 为何 STC-ISP 显示调节频率成功,但芯片实际运行频率依然是 33M?是哪里操作不对吗? STC32G 是否存在某种机制,在 ISP 握手失败或复位异常时,会自动回退到 33M 或 6M? 如何强制将 IRC 永久固化在 24MHz? 有没有大哥帮帮我
|