为什么在CH32V103R8T6运行DBGMCU_Config,直接就进入到
void HardFault_Handler(void)
{
while (1)
{
}
}
为什么在CH32V103R8T6运行DBGMCU_Config,直接就进入到
void HardFault_Handler(void)
{
while (1)
{
}
}
您好,若进入HardFault,可参考下帖查找一下问题。注意若使用MounRiver的仿真调试功能时,不建议程序中进行低功耗操作。后续若有问题,可邮箱(lzs@wch.cn)沟通。若方便,可将工程发我具体看一下。
https://www.cnblogs.com/wchmcu/p/17545931.html
代码就是为了能调试过程让定时器停止,调用ch32v30x_dbgmcu.h这个里面void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState);
int main(void)
{
SystemCoreClockUpdate( );
Delay_Init( );
DBGMCU_Config(DBGMCU_TIM1_STOP, ENABLE);
您好,我这边按照你截图配置是没有问题的,如下图。若方便,可将工程发至我邮箱看一下。此外,你用的是CH32V103还是V30系列,麻烦你具体确认一下,怎么工程是30系列的工程,这个不通用的。
是我写错mcu型号了,是CH32V305RBT6,工程已经发到lzs@wch.cn
里面访问地址也是对的,外部中断和定时器都能正常工作,只是因为调试断点监控数据希望定时能停止,希望能停止定时器。
而且我通过MounRiver Studio软件外设看,寄存器地址好像和资料对不上,另外也不能在里面手动修改寄存器的值
void __set_DEBUG_CR(uint32_t value)
{
? ? __asm volatile("csrw 0x7C0, %0" : : "r"(value));
}
刚才我发现是不是mcu进入到什么状态才能访问,直接调用这个函数,就直接会进入到void HardFault_Handler(void)
uint32_t __get_MEPC(void)
{
uint32_t result;
__ASM volatile ( "csrr %0," "mepc" : "=r" (result) );
return (result);
}
您好,mepc为csr寄存器,调用该函数需要在机器模式下,可修改启动文件中mstatus寄存器的值,可将其修改为0x7888试一下。如下图