美文网首页国产MCU
大意!6行代码,“报废”5片单片机!

大意!6行代码,“报废”5片单片机!

作者: 不脱发的程序猿 | 来源:发表于2022-01-03 22:16 被阅读0次

    今天又双叒叕是个心痛的日子。

    近日,打样一款新产品PCB,微控制器选用:国产MCU,HC32L130系列,程序移植于之前的项目。

    PCB样板焊接好后,第一次可以正常烧录程序,再进行烧录,IAR显示无法连接MCU。

    奇怪了!试了几次不行,换一块板子, 也是这种情况......

    此时内心很恐慌,是不是MCU电路设计有问题?但是也不应该啊,该MCU已经应用好几款产品了......

    排错离不开试错法,找来最基础的点亮LED程序测试,烧写过程、次数均正常可行。

    说明程序有问题!

    通过一系列尝试和推测,将问题定位在时钟配置上:之前使用HC32L130均是基于24MHz内部高速时钟(HSI),而本款产品基于24MHz外部高速时钟(HSE)。

    配置24MHz内部高速时钟(HSI)程序如下所示:

    //将时钟从RCH4MHz切换至RCH24MHz,

    void App_Rch4MHzTo24MHz(void)

    {   

    ///<============== 将时钟从RCH4MHz切换至RCH24MHz ==============================   

        ///< RCH时钟不同频率的切换,需要先将时钟切换到RCL,设置好频率后再切回RCH

        Sysctrl_SetRCLTrim(SysctrlRclFreq32768);

        Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);

        Sysctrl_SysClkSwitch(SysctrlClkRCL);

        ///< 加载目标频率的RCH的TRIM值

        Sysctrl_SetRCHTrim(SysctrlRchFreq24MHz);

        ///< 时钟切换到RCH

        Sysctrl_SysClkSwitch(SysctrlClkRCH);

        ///< 关闭RCL时钟

        Sysctrl_ClkSourceEnable(SysctrlClkRCL, FALSE);

    }

    在修改为外部高速时钟程序时,没再查阅芯片手册,直接修改的参数,程序如下所示:

    //将时钟从RCH4MHz切换至XTH24MHz,

    void App_Rch4MHzTo24MHz(void)

    {   

    ///<============== 将时钟从RCH4MHz切换至XTH24MHz ==============================   

        Sysctrl_SetRCLTrim(SysctrlRclFreq32768);

        Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);

        Sysctrl_SysClkSwitch(SysctrlClkRCL);

        ///< 加载目标频率的XTH值

        Sysctrl_SetXTHFreq(SysctrlRchFreq24MHz);

        ///< 时钟切换到XTH

        Sysctrl_SysClkSwitch(SysctrlClkXTH);

        ///< 关闭RCL时钟

        Sysctrl_ClkSourceEnable(SysctrlClkRCL, FALSE);

    通过查阅手册,配置过程果然存在问题。

    最后修改代码如下:

    //将时钟从RCH4MHz切换至XTH24MHz

    void App_Rch4MHzToXth24MHz (void)

    {   

    ///<======================== 将时钟从RCH4MHz切换至XTH24MHz ==============================   

        ///< 切换时钟前(根据外部高速晶振)设置XTH频率范围,配置晶振参数,使能目标时钟,此处为24MHz

        Sysctrl_SetXTHFreq(SysctrlXthFreq20_32MHz);

        Sysctrl_XTHDriverCfg(SysctrlXtalDriver3);

        Sysctrl_SetXTHStableTime(SysctrlXthStableCycle16384);

        Sysctrl_ClkSourceEnable(SysctrlClkXTH, TRUE);

        ///< 时钟切换

        Sysctrl_SysClkSwitch(SysctrlClkXTH);

        ///< 根据需要选择是否关闭原时钟(此处关闭)

        Sysctrl_ClkSourceEnable(SysctrlClkRCH, FALSE);

    }

    最后运行调测,果然顺利~

    相关文章

      网友评论

        本文标题:大意!6行代码,“报废”5片单片机!

        本文链接:https://www.haomeiwen.com/subject/njyfcrtx.html