最近在使用电压比较器时发现硬件滤波电路会出现失效的情况,经分析是其采样频率过高所致。

参考手册中绘制的是理想条件下的波形,真实情况并非如此,INP 在逼近 INM 时会伴随着噪声/抖动。我们可以使用硬件滤波电路来消除这种抖动,图中绿色线段表示各采样点,其频率即为采样频率。

采样频率较低时,滤波电路可以正常工作,但是随着采样频率的升高,其可靠性反而会降低。

« 閱讀全文 »

现象描述

  • 从高速/超高速模式向超低速模式切换时 mcu 异常死机

基础信息

  • 当前使用华大 2.2.0 版驱动程序
  • 当前使用华大 1.2.1 版参考手册

原因分析

通过调试发现每次运行至 M4_SYSREG->PWR_PWRC2 赋值时程序就会跑飞😶

电源模式控制寄存器 2

hc32f460_pwc.c
en_result_t PWC_HS2LS(void)
{
...

M4_SYSREG->PWR_PWRC2 = 0xE1U;
M4_SYSREG->PWR_MDSWCR = 0x10U;

...
}

en_result_t PWC_HP2LS(void)
{
...

M4_SYSREG->PWR_PWRC2 = 0xD1U;
M4_SYSREG->PWR_MDSWCR = 0x10U;

...
}

瞅了一眼《参考手册 Rev1.2.1》好像也没啥问题,又看了《参考手册 Rev1.3》后,我得发…🙄!

两版手册竟然不一样!

« 閱讀全文 »

最近又把 MCU 给干废了,现象如下:

Load "main.axf"
* JLink Info: Device "CORTEX-M4" selected.
Set JLink Project File to "JLinkSettings.ini"
* JLink Info: Device "CORTEX-M4" selected.

JLink info:
------------
DLL: V7.22b, compiled Jun 17 2021 17:22:49
Firmware: J-Link V9 compiled May 7 2021 16:26:12
Hardware: V9.60
S/N : 69667602
Feature(s) : RDI, GDB, FlashDL, FlashBP, JFlash

* JLink Info: Found SW-DP with ID 0x2BA01477
* JLink Info: DPIDR: 0x2BA01477
* JLink Info: Scanning AP map to find all available APs
* JLink Info: AP[1]: Stopped AP scan as end of AP map has been reached
* JLink Info: AP[0]: AHB-AP (IDR: 0x24770011)
* JLink Info: Iterating through AP map to find AHB-AP to use
* JLink Info: AP[0]: Skipped. Invalid implementer code read from CPUIDVal[31:24] = 0x00
* JLink Info: Found SW-DP with ID 0x2BA01477
* JLink Info: DPIDR: 0x2BA01477
* JLink Info: Scanning AP map to find all available APs
* JLink Info: AP[1]: Stopped AP scan as end of AP map has been reached
* JLink Info: AP[0]: AHB-AP (IDR: 0x24770011)
* JLink Info: Iterating through AP map to find AHB-AP to use
* JLink Info: AP[0]: Skipped. Invalid implementer code read from CPUIDVal[31:24] = 0x00

***JLink Error: Could not find core in Coresight setup

Error: Flash Download failed - Target DLL has been cancelled
Flash Load finished at 10:35:22

事情经过是这样的,某款产品第一版硬件的时钟源选用的是 6MHz 的外部晶振,内部倍频至 128MHz 作为系统主频,而第二版则改成了 24MHz 的外部晶振,第二版硬件出来后,将第一版程序直接烧录进第二版硬件后 MCU 无法正常启动且无法被识别。

初步推测,应该是外部晶振频率提高,但是程序没有进行适当地分频,导致系统主频远远超过数据手册中规定的频率上限(200MHz)。

128MHz×(24MHz/6MHz)=512MHz   >   MAX(200MHz)

后面通过调试,证实程序的确是在 M4_SYSREG->CMU_CKSWR_f.CKSW = enTargetSysSrc; 处出现异常。

上述操作其实就是「超频」,只是超得有点猛,导致芯片直接宕机。这种情况借助华大的离线下载器重新烧录程序即可恢复正常。