找回密码
 立即注册
楼主: 29aH

关于32G12K128芯片无法调整晶振问题 | 已解决

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:183
  • 最近打卡:2025-09-15 10:20:19

780

主题

1万

回帖

1万

积分

管理员

积分
19108
发表于 2025-8-8 13:45:05 | 显示全部楼层

这要全部看完:
可能在不同的频段,不同个体要设置好
截图202508081343528859.jpg

https://www.stcaimcu.com/data/download/Datasheet/STC32G.pdf
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:514
  • 最近打卡:2025-09-15 09:01:31
已绑定手机

45

主题

2225

回帖

7810

积分

论坛元老

积分
7810
发表于 2025-8-8 14:39:10 | 显示全部楼层
29*** 发表于 2025-8-8 13:41
刚发现一个现象,将ISP软件调整好的IRTRIM与VRTRIM寄存器值打印上来(此时运行正常),再第二次使用代码将 ...

由于芯片存在制造误差,所以不同芯片频段的中间频率有所不同,
从而VRTRIM也就不同,调节频率设置的IRTRIM也不一样。


就算同一颗芯片不同环境温度时烧录时调节设置的IRTRIM也会出现一些偏差。
最终调节出来的时钟频率是否准确可以通过MCLKO将主时钟分频输出到指定脚位进行测量,

而不是读取IRTRIM与VRTRIM进行比较。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2025-09-05 15:41:07

7

主题

15

回帖

245

积分

中级会员

积分
245
发表于 2025-9-5 15:54:59 | 显示全部楼层
终于找到问题了,原因是不同芯片的出厂校准频率参数所在的频段并不是固定的,例如33.1776MHz这个频率有可能用的是27MHz频段,也肯能是44MHz频段,
这就导致把出厂参数赋值给IRTRIM后,因没有选择正确的频段,而出现频率异常。
以下是我的解决方法,目前未出现异常问题,供大家参考
/*==========================================================
[函数功能]用户IRC震荡频率初始化=>系统时钟
       
[返回值]  
                        无
[参  数]   
                        Irc:要设定的频率

示例:#define FOSC   33177600UL  //系统时钟
                        ModifyIRC(FOSC);
               
2025/8/11
============================================================*/
//                                                                                                                频率                                                        理论值  =128-((中心频率-目标频率)/目标频率/0.0024)
#define T22M_ADDR        CHIPID11        //22.1184MHz                                53
#define        T24M_ADDR        CHIPID12        //24MHz             82
#define T27M_ADDR        CHIPID13        //27MHz             128
#define T30M_ADDR        CHIPID14        //30MHz             174
#define T33M_ADDR        CHIPID15        //33.1776MHz        223
#define T35M_ADDR        CHIPID16        //35MHz             43

#define VRT6M_ADDR        CHIPID21//VRTRIM_6M
#define VRT10M_ADDR        CHIPID22//YRTRIM_10M
#define VRT27M_ADDR        CHIPID23//VRTRIM_27M
#define        VRT44M_ADDR        CHIPID24//VRTRIM_44M

void ModifyIRC(ulong fosc)
{
        bit eafxr;
        eafxr = EAXFR;//缓存权限
        EAXFR =1;     //使能访问XFR寄存器
       
        CLKDIV  = 0x04;//降频

        switch (fosc)
  {
          case 22118400UL://选择22.1184MHz
                        IRTRIM  = T22M_ADDR;
                        if(abs(T22M_ADDR-53) > 80)//在10MHz的边缘
                        {
                                VRTRIM  = VRT10M_ADDR;
                                IRCBAND &=~0x03;
                                IRCBAND |=         0x01;//10M频段
                        }
                        else
                        {
                                VRTRIM  = VRT27M_ADDR;
                                IRCBAND &=~0x03;
                                IRCBAND |=         0x02;//27M频段
                        }
                  break;
                case 24000000UL://选择24MHz
                        IRTRIM  = T24M_ADDR;
                        if(abs(T24M_ADDR-82) > 80)//在10MHz的边缘
                        {
                                VRTRIM  = VRT10M_ADDR;
                                IRCBAND &=~0x03;
                                IRCBAND |=         0x01;//10M频段
                        }
                        else
                        {
                                VRTRIM  = VRT27M_ADDR;
                                IRCBAND &=~0x03;
                                IRCBAND |=         0x02;//27M频段
                        }
                  break;
                case 27000000UL://选择27MHz
                        IRTRIM  = T27M_ADDR;
                        VRTRIM  = VRT27M_ADDR;
                        IRCBAND  &=~ 0x03;
                        IRCBAND |=         0x02;//27M频段
                  break;
                case 30000000UL://选择30MHz
                        IRTRIM  = T30M_ADDR;
                        if(abs(T30M_ADDR-174) > 80)//在44MHz的边缘
                        {
                                VRTRIM  = VRT44M_ADDR;
                                IRCBAND &=~0x03;
                                IRCBAND |=         0x03;//44M频段
                        }
                        else
                        {
                                VRTRIM  = VRT27M_ADDR;
                                IRCBAND &=~0x03;
                                IRCBAND |=         0x02;//27M频段
                        }
                  break;
                case 33177600UL://选择33.1776MHz
                        Default:
                        IRTRIM  = T33M_ADDR;
                        if(abs(T33M_ADDR-223) > 80)//在44MHz的边缘
                        {
                                VRTRIM  = VRT44M_ADDR;
                                IRCBAND &=~0x03;
                                IRCBAND |=         0x03;//44M频段
                        }
                        else
                        {
                                VRTRIM  = VRT27M_ADDR;
                                IRCBAND &=~0x03;
                                IRCBAND |=         0x02;//27M频段
                        }
                  break;
                case 35000000UL://选择35MHz
                        IRTRIM  = T35M_ADDR;
                        if(abs(T35M_ADDR-43) > 80)//在27MHz的边缘
                        {
                                VRTRIM  = VRT27M_ADDR;
                                IRCBAND &=~0x03;
                                IRCBAND |=         0x02;//27M频段
                        }
                        else
                        {
                                VRTRIM  = VRT44M_ADDR;
                                IRCBAND &=~0x03;
                                IRCBAND |=         0x03;//44M频段
                        }
                  break;
  
          default:
                        goto Default;
                  break;
  }
       
        while (!(HIRCCR & 1));//等待时钟稳定
        CLKDIV  = 0x00;                                //恢复主频
       
        EAXFR=eafxr;//归还权限
       
}
知识改变命运,技能成就梦想!
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-9-16 07:56 , Processed in 0.129026 second(s), 59 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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