描述 #
该文件包含 DBGMCU(调试监控单元)固件库的所有函数原型与常量定义,用于在调试模式下控制外设行为,如暂停看门狗、定时器等,以方便开发与调试。DBGMCU 允许在 CPU 停止时保持某些外设的暂停状态,避免调试过程中触发意外复位或计数,是嵌入式调试环境中关键的低层控制接口。所有配置均通过写入调试控制寄存器(DEBUG_CR,地址 0x7C0)实现,该寄存器由 CPU 的 CSR 指令直接访问,具有极低的延迟和硬件级控制能力。
常量 #
DBGMCU_Periph_Config
#
调试模式下外设行为控制常量,用于配置当 CPU 停止时哪些外设应被暂停。这些常量为位掩码,可组合使用以同时控制多个外设。
| 名称 | 值 | 简述 |
|---|---|---|
DBGMCU_IWDG_STOP |
0x00000001 |
当核心暂停时,独立看门狗(IWDG)停止计数 |
DBGMCU_WWDG_STOP |
0x00000002 |
当核心暂停时,窗口看门狗(WWDG)停止计数 |
DBGMCU_TIM1_STOP |
0x00000010 |
当核心暂停时,TIM1 计数器停止 |
DBGMCU_TIM2_STOP |
0x00000020 |
当核心暂停时,TIM2 计数器停止 |
以上所有值均为
uint32_t类型的位掩码,支持按位或(|)组合使用,例如:DBGMCU_IWDG_STOP | DBGMCU_TIM1_STOP可同时暂停 IWDG 和 TIM1。
函数 #
DBGMCU_GetREVID
#
uint32_t DBGMCU_GetREVID(void)
读取芯片的修订版本号(Revision ID),该值存储在芯片的唯一 ID 寄存器的高 16 位中,可用于区分同一型号芯片的不同工程版本或生产批次。
参数:
无
返回值:
芯片修订版本号(16 位无符号整数),例如 0x0001 表示修订版 1。
DBGMCU_GetDEVID
#
uint32_t DBGMCU_GetDEVID(void)
读取芯片的设备标识符(Device ID),该值存储在芯片唯一 ID 寄存器的低 16 位中,用于识别芯片型号(如 CH32V003)。
参数:
无
返回值:
芯片设备标识符(16 位无符号整数),例如 0x05x0 表示 CH32V003 系列。
__get_DEBUG_CR
#
uint32_t __get_DEBUG_CR(void)
通过 RISC-V CSR 指令直接读取调试控制寄存器(DEBUG_CR)的当前值。该寄存器控制调试模式下各外设的行为,是 DBGMCU_Config 函数的底层实现基础。
参数:
无
返回值:
DEBUG_CR 寄存器的当前 32 位值,每一位对应一个外设的调试暂停使能状态。
__set_DEBUG_CR
#
void __set_DEBUG_CR(uint32_t value)
通过 RISC-V CSR 指令直接写入调试控制寄存器(DEBUG_CR),用于立即更新调试模式下外设的暂停行为。此函数为原子操作,无锁机制,适用于实时调试场景。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
value |
uint32_t |
要写入 DEBUG_CR 的新值,应为 DBGMCU_Periph_Config 常量的组合。 |
返回值:
无
DBGMCU_Config
#
void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState)
配置指定外设在调试模式下的行为。通过读取、修改、写回 DEBUG_CR 寄存器实现,支持启用或禁用多个外设的暂停功能。此函数封装了底层 CSR 操作,提供更安全、易用的接口。
参数:
| 名称 | 类型 | 简述 |
|---|---|---|
DBGMCU_Periph |
uint32_t |
要配置的外设掩码,取值为 DBGMCU_IWDG_STOP、DBGMCU_WWDG_STOP、DBGMCU_TIM1_STOP 或 DBGMCU_TIM2_STOP,可组合使用。 |
NewState |
FunctionalState |
启用(ENABLE)或禁用(DISABLE)该外设的调试暂停功能。 |
返回值:
无
注意:
FunctionalState为ch32v00x.h中定义的枚举类型,通常为ENABLE(1)和DISABLE(0)。
DBGMCU_GetCHIPID
#
uint32_t DBGMCU_GetCHIPID(void)
一次性读取芯片的完整唯一标识符(CHIP ID),该值为 32 位,包含设备 ID(低 16 位)与修订 ID(高 16 位),可用于芯片型号识别与固件差异化处理。
参数:
无
返回值:
芯片完整标识符(32 位),格式为:[高16位: Revision ID] | [低16位: Device ID]。
示例:
0x003005x0→ CH32V003F4P60x003105x0→ CH32V003F4U60x003205x0→ CH32V003A4M60x003305x0→ CH32V003J4M6
此函数返回值与
DBGMCU_GetDEVID()和DBGMCU_GetREVID()的组合结果等价,但更高效,适用于需一次性获取完整芯片信息的场景。