5.23 DBG 使用说明
本章说明 N32G41x 标准外设库中 DBG 驱动的文件组成与 8 个公开函数,内容包括客户 ID 与设备 ID 读取、DBG_ID 中的版本号与器件信息解析、以及内核暂停时的外设调试配置;当前 SDK 没有 DBG 示例工程。SWD 引脚分配与 DBG_ID、DBG_CTRL 寄存器定义请配合用户手册的“调试支持(DBG)”章节阅读,芯片已知问题以勘误手册为准。
5.23.1 相关文件
| 相对路径 | 作用 |
|---|---|
firmware/n32g41x_std_periph_driver/inc/n32g41x_dbg.h |
定义 DBG_*_STOP 等调试暂停宏,并按 ID 读取、器件信息、配置三个区段声明 8 个公开函数 |
firmware/n32g41x_std_periph_driver/src/n32g41x_dbg.c |
实现上述 8 个函数:逐字节读取两处 ID,解析 DBG->ID 中的版本号、器件型号与 FLASH、SRAM 容量,读改写 DBG->CTRL |
firmware/CMSIS/device/n32g41x.h |
定义 UCID_BASE、UID_BASE、DBGMCU_ID_BASE 与各长度宏,DBG 寄存器结构指针、ID 字段掩码与 DBG_CTRL 各位定义 |
5.23.2 API 参考
以下 8 个公开函数按 n32g41x_dbg.h 的声明顺序分为 3 组;每个条目给出功能摘要与 n32g41x_dbg.c 中该函数正上方的注释原文。
ID 读取
GetUCID、GetUID、GetDBGMCU_ID
器件信息
DBG_GetRevNum、DBG_GetDevNum、DBG_GetFlashSize、DBG_GetSramSize
配置
DBG_ConfigPeriph
void GetUCID(uint8_t *UCIDbuf)获取 128 位唯一客户 ID。
name GetUCID.
fun Get the 128-bit unique customer ID UCID.
param UCIDbuf : pointer to a buffer of at least UCID_LENGTH bytes.
return none
使用提示: 实现从 UCID_BASE(0x1FFFF4D0)起逐字节读取 UCID_LENGTH(16)字节写入 UCIDbuf,调用方需准备不少于 16 字节的缓冲区。
void GetUID(uint8_t *UIDbuf)获取 96 位唯一设备 ID。
name GetUID.
fun Get the 96-bit unique device ID UID.
param UIDbuf : pointer to a buffer of at least UID_LENGTH bytes.
return none
使用提示: 实现从 UID_BASE(0x1FFFF500)起逐字节读取 UID_LENGTH(12)字节写入 UIDbuf,调用方需准备不少于 12 字节的缓冲区。
void GetDBGMCU_ID(uint8_t *DBGMCU_IDbuf)获取 DBG_ID 编号。
name GetDBGMCU_ID.
fun get the DBG_ID number.
param DBGMCU_IDbuf : pointer to a buffer of at least DBGMCU_ID_LENGTH bytes.
return none
使用提示: 实现先按字读取 DBG->ID,再按低字节在前拆成 DBGMCU_ID_LENGTH(4)个字节写入 DBGMCU_IDbuf。
uint32_t DBG_GetRevNum(void)获取版本号。
name DBG_GetRevNum.
fun get the revision number.
param none
return 8-bit revision number: REV_NUM_H[3:0] (bits 7:4) and
REV_NUM_L[3:0] (bits 3:0). Read-only, fixed at production.
使用提示: 实现返回 DBG->ID 的低 8 位,即位 7:4 的 REV_NUM_H[3:0] 与位 3:0 的 REV_NUM_L[3:0] 组成的 8 位版本号。
uint32_t DBG_GetDevNum(void)获取设备标识符。
name DBG_GetDevNum.
fun get the device identifier.
param none
return Device identifier
使用提示: 实现把 DBG->ID 位 23:20 的 DEV_NUM_L[3:0] 放到返回值的位 3:0,位 15:8 的 DEV_NUM_H、DEV_NUM_M 放到位 11:4,拼成 12 位设备型号。
uint32_t DBG_GetFlashSize(void)获取本芯片的 FLASH 容量。
name DBG_GetFlashSize.
fun Get FLASH size of this chip.
param none
return FLASH size in bytes. The value is the DBG_ID.FLASH[19:16] field
multiplied by 32 KB, so it is always a multiple of 32 KB.
使用提示: 实现返回 DBG->ID 位 19:16 的 FLASH[3:0] 与 32 KB 的乘积,单位为字节。
uint32_t DBG_GetSramSize(void)获取本芯片的 SRAM 容量。
name DBG_GetSramSize.
fun Get SRAM size of this chip.
param none
return SRAM size in bytes. The value is the DBG_ID.SRAM[31:28] field
multiplied by 8 KB, so it is always a multiple of 8 KB.
使用提示: 实现返回 DBG->ID 位 31:28 的 SRAM[3:0] 与 8 KB 的乘积,单位为字节。
void DBG_ConfigPeriph(uint32_t DBG_Periph, FunctionalState Cmd)配置 MCU 处于调试模式时指定外设运行或停止。
name DBG_ConfigPeriph.
fun Configures the specified peripheral run or stop when the MCU under Debug mode.
param DBG_Periph :
- DBG_IWDG_STOP \* IWDG stopped when Core is halted. *\
- DBG_WWDG_STOP \* WWDG stopped when Core is halted. *\
- DBG_ATIM1_STOP \* ATIM1 counter stopped when core is halted *\
- DBG_GTIM1_STOP \* GTIM1 counter stopped when core is halted *\
- DBG_GTIM2_STOP \* GTIM2 counter stopped when core is halted *\
- DBG_GTIM3_STOP \* GTIM3 counter stopped when core is halted *\
- DBG_CAN_STOP \* CAN stopped when core is halted *\
- DBG_I2C1SMBUS_TIMEOUT \* I2C1 SMBUS timeout mode stopped when Core is halted *\
- DBG_I2C2SMBUS_TIMEOUT \* I2C2 SMBUS timeout mode stopped when Core is halted *\
- DBG_ATIM2_STOP \* ATIM2 counter stopped when core is halted *\
- DBG_GTIM4_STOP \* GTIM4 counter stopped when core is halted *\
- DBG_BTIM1_STOP \* BTIM1 counter stopped when core is halted *\
- DBG_BTIM2_STOP \* BTIM2 counter stopped when core is halted *\
param Cmd:
- ENABLE
- DISABLE
return none
使用提示:Cmd 不等于 DISABLE 时把 DBG_Periph 按位或写入 DBG->CTRL,否则按位清除;一次可传入多个宏的按位或,一次配置多个外设。
5.23.3 Demo 示例说明
当前 SDK 未提供 DBG 的独立示例工程。
5.23.4 注意与排障
| 场景 | 检查与建议 | 来源 |
|---|---|---|
| 断点暂停时外设仍在运行 | 需要定时器计数器、WWDG/IWDG 计数器、CAN 接收或 I2C SMBUS 超时控制在调试暂停时一并停止的,用 DBG_ConfigPeriph 置位 DBG_CTRL 中的对应位;DBG_CTRL 的 POR 默认值为 0,系统复位不会重置该寄存器。 |
用户手册 |
| 调试器无法连接 | N32G41x 的调试接口为 SWD,SWDIO 为 PA13、SWCLK 为 PA14; 程序把这两脚改作普通 IO 后调试器无法连接,可参考 GPIO 篇的 IORemap 示例保留恢复 SWD 的分支。 |
用户手册 |
| DBG 寄存器的访问方式 | DBG 寄存器必须以字(32 位)操作,基地址为 0xE0042000;DBG_ID 只支持 32 位访问且为固定值不可修改,需要版本号或器件型号时用按字读取的 DBG_GetRevNum、DBG_GetDevNum。 |
用户手册 |
| 器件型号的位域组合 | DBG_ID 中的设备型号由 DEV_NUM_H[3:0]、DEV_NUM_M[3:0]、DEV_NUM_L[3:0] 共 12 位组成,分列于位 15:12、位 11:8 与位 23:20;按用户在手册中的位序读取后需自行拼接换算。 |
用户手册 |
| 保留位的写法 | DBG_ID 的位 27:24 与 DBG_CTRL 的位 31:21、位 7:0 为保留位,必须保持复位值。 |
用户手册 |
N32G412、N32G415 系列勘误手册 V1.0.0(2026.6.30)的勘误列表只列出一行 A 版芯片条目,勘误链接列为空,未列出具体条目。