為什么在CH32V103R8T6運行DBGMCU_Config,直接就進入到
void HardFault_Handler(void)
{
? while (1)
? {
? }
}
為什么在CH32V103R8T6運行DBGMCU_Config,直接就進入到
void HardFault_Handler(void)
{
? while (1)
? {
? }
}
您好,若進入HardFault,可參考下帖查找一下問題。注意若使用MounRiver的仿真調(diào)試功能時,不建議程序中進行低功耗操作。后續(xù)若有問題,可郵箱(lzs@wch.cn)溝通。若方便,可將工程發(fā)我具體看一下。
https://www.cnblogs.com/wchmcu/p/17545931.html
?
代碼就是為了能調(diào)試過程讓定時器停止,調(diào)用ch32v30x_dbgmcu.h這個里面void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState);
int main(void)
{
? ? SystemCoreClockUpdate( );
? ? Delay_Init( );
? ? ?DBGMCU_Config(DBGMCU_TIM1_STOP, ENABLE);
您好,我這邊按照你截圖配置是沒有問題的,如下圖。若方便,可將工程發(fā)至我郵箱看一下。此外,你用的是CH32V103還是V30系列,麻煩你具體確認一下,怎么工程是30系列的工程,這個不通用的。
是我寫錯mcu型號了,是CH32V305RBT6,工程已經(jīng)發(fā)到lzs@wch.cn
里面訪問地址也是對的,外部中斷和定時器都能正常工作,只是因為調(diào)試斷點監(jiān)控數(shù)據(jù)希望定時能停止,希望能停止定時器。
而且我通過MounRiver Studio軟件外設看,寄存器地址好像和資料對不上,另外也不能在里面手動修改寄存器的值
void __set_DEBUG_CR(uint32_t value)
{
? ? __asm volatile("csrw 0x7C0, %0" : : "r"(value));
}
剛才我發(fā)現(xiàn)是不是mcu進入到什么狀態(tài)才能訪問,直接調(diào)用這個函數(shù),就直接會進入到void HardFault_Handler(void)
uint32_t __get_MEPC(void)
{
? uint32_t result;
? __ASM volatile ( "csrr %0," "mepc" : "=r" (result) );
? return (result);
}
您好,mepc為csr寄存器,調(diào)用該函數(shù)需要在機器模式下,可修改啟動文件中mstatus寄存器的值,可將其修改為0x7888試一下。如下圖