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 参考

搜索 API共 8 个函数

以下 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 版芯片条目,勘误链接列为空,未列出具体条目。

国民技术开发套件文档中心

按芯片系列在线查阅国民技术 MCU 开发套件的芯片资料、SDK、驱动 API 与 Demo 示例说明。

© 2026 国民技术股份有限公司 版权所有粤ICP备11069485号本站使用不含 Cookie 的匿名访问统计