CH32V103R8T6下面DBGMCU_Config(DBGMCU_TIM3_STOP, ENABLE);

为什么在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);



image.png



您好,我这边按照你截图配置是没有问题的,如下图。若方便,可将工程发至我邮箱看一下。此外,你用的是CH32V103还是V30系列,麻烦你具体确认一下,怎么工程是30系列的工程,这个不通用的。

image.png



是我写错mcu型号了,是CH32V305RBT6,工程已经发到lzs@wch.cn


里面访问地址也是对的,外部中断和定时器都能正常工作,只是因为调试断点监控数据希望定时能停止,希望能停止定时器。

而且我通过MounRiver Studio软件外设看,寄存器地址好像和资料对不上,另外也不能在里面手动修改寄存器的值

1713333766078.png


image.png


void __set_DEBUG_CR(uint32_t value)

{

? ? __asm volatile("csrw 0x7C0, %0" : : "r"(value));

}

image.png


刚才我发现是不是mcu进入到什么状态才能访问,直接调用这个函数,就直接会进入到void HardFault_Handler(void)

uint32_t __get_MEPC(void)

{

  uint32_t result;


  __ASM volatile ( "csrr %0," "mepc" : "=r" (result) );

  return (result);

}

image.png


您好,mepc为csr寄存器,调用该函数需要在机器模式下,可修改启动文件中mstatus寄存器的值,可将其修改为0x7888试一下。如下图

image.png


只有登录才能回复,可以选择微信账号登录