小华 HC32F460 切换运行模式导致宕机
现象描述
- 从高速/超高速模式向超低速模式切换时 mcu 异常死机
基础信息
- 当前使用小华 2.2.0 版驱动程序
- 当前使用小华 1.2.1 版参考手册
原因分析
通过调试发现每次运行至 M4_SYSREG->PWR_PWRC2 赋值时程序就会跑飞😶

en_result_t PWC_HS2LS(void) |
瞅了一眼《参考手册 Rev1.2.1》好像也没啥问题,又看了《参考手册 Rev1.3》后,我得发…🙄!
两版手册竟然不一样!
通过调试发现每次运行至 M4_SYSREG->PWR_PWRC2 赋值时程序就会跑飞😶

en_result_t PWC_HS2LS(void) |
瞅了一眼《参考手册 Rev1.2.1》好像也没啥问题,又看了《参考手册 Rev1.3》后,我得发…🙄!
两版手册竟然不一样!
最近又把 MCU 给干废了,现象如下:
Load "main.axf" |
事情经过是这样的,某款产品第一版硬件的时钟源选用的是 6MHz 的外部晶振,内部倍频至 128MHz 作为系统主频,而第二版则改成了 24MHz 的外部晶振,第二版硬件出来后,将第一版程序直接烧录进第二版硬件后 MCU 无法正常启动且无法被识别。
初步推测,应该是外部晶振频率提高,但是程序没有进行适当地分频,导致系统主频远远超过数据手册中规定的频率上限(200MHz)。
后面通过调试,证实程序的确是在 M4_SYSREG->CMU_CKSWR_f.CKSW = enTargetSysSrc; 处出现异常。
上述操作其实就是「超频」,只是超得有点猛,导致芯片直接宕机。这种情况借助小华的离线下载器重新烧录程序即可恢复正常。
编程/下载/烧录的方式有多种,本文重点介绍以下两种烧录方式:
其中 OpenOCD 可以搭配多种仿真器使用,这里以 JLink 仿真器为例进行说明。
倘若只有 main.h 和 main.c 两个文件,那么只需要执行少量的指令即可完成编译工作。但是实际上一个工程通常包含几十上百个文件,意味着要执行大量的编译指令才能得到目标文件,这是我们所无法接受的。因此需要借助 make、cmake、ninja、scons 等构建工具来提高开发效率。