CH32V103R8带烧录器可以工作,停止调试立刻死机
void app_clk_init()
{
    RCC_ClocksTypeDef RCC_Clocks;
    //RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMULL6);//12M*6
    //这版混进了一个16M的晶振进去,搞得只能用这个参数了
    RCC_PLLConfig (RCC_PLLSource_HSE_Div2, RCC_PLLMULL9); //12M*6
    RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);//72/1.5
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);      //sysclock 72M
    RCC_HCLKConfig(RCC_SYSCLK_Div1);        //main clock 72M

    RCC_HSEConfig(RCC_HSE_ON);
    while(RCC_WaitForHSEStartUp() == NoREADY);
    
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
    RCC_PLLCmd(ENABLE);

    RCC_PCLK1Config(RCC_HCLK_Div1); //72M
    RCC_PCLK2Config(RCC_HCLK_Div1); //72M
    RCC_ADCCLKConfig(RCC_PCLK2_Div2);   //36M
    RCC_ClockSecuritySystemCmd(ENABLE);
//    RCC_GetClocksFreq(&RCC_Clocks);
}

/*********************************************************************
 * @fn      main
 *
 * @brief   Main program.
 *
 * @return  none
 */
int main(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
//    SystemInit();
//    SystemCoreClockUpdate();
    app_clk_init();

//    Delay_Init();
//    USBHD_RCC_Init( );
//    USBHD_Device_Init( ENABLE );
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

    
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOC, &GPIO_InitStruct);
    


//    xTaskCreate((TaskFunction_t )task2_task,
//                        (const char*    )"task2",
//                        (uint16_t       )TASK2_STK_SIZE,
//                        (void*          )NULL,
//                        (UBaseType_t    )TASK2_TASK_PRIO,
//                        (TaskHandle_t*  )&Task2Task_Handler);
//
//    xTaskCreate((TaskFunction_t )task1_task,
//                    (const char*    )"task1",
//                    (uint16_t       )TASK1_STK_SIZE,
//                    (void*          )NULL,
//                    (UBaseType_t    )TASK1_TASK_PRIO,
//                    (TaskHandle_t*  )&Task1Task_Handler);
//    vTaskStartScheduler();
    
//    USART_Printf_Init(115200);
//    printf("SystemClk:%d\r\n", SystemCoreClock);

//    printf("This is printf example\r\n");

    while(1)
    {
//        GPIO_ResetBits(GPIOC, GPIO_Pin_9);
//        Delay_Ms(1000);
        GPIO_SetBits(GPIOC, GPIO_Pin_9);
//        Delay_Ms(1000);
    }
}

这是初始代码,启动文件内的

      li t0, 0x88
      csrs mstatus, t0

中断与官方给的参数一致。

目前遇到的问题是仅能在调试过程中运行,一旦停止gdb,似乎芯片会立刻挂起,导致卡住。直接供电也是如此。

电路为最小系统,由立创商城基础修改而来

Snipaste_2023-02-25_23-41-19.png

目前暂时使用主时钟16MHZ并且修改了ch32库文件的HSE_VALUE的参数

Snipaste_2023-02-25_23-44-37.png

已经完成的前期排查:

  1. 去除了代码中几乎所有的冗余项。关闭了printf。

  2. 关闭了代码的优化,完成最基础的高低电平。

  3. 去掉了R2、R10电阻并且短接当前的 电路。

  4. 测量R4,上电后依然为3.3V


目前遇到现象:

  1. 在接入电源后,电源指示灯亮起,但是运行指示灯无反应。

  2. 使用调试器上电,电源指示灯亮起,但是运行指示灯无反应

  3. 使用调试器调试,运行时电源指示灯常量,可以正常运行调试,并且指示灯正常反应

  4. 停止调试器的gdb进程,运行指示灯立刻熄灭(正常代码应为长亮)。

  5. 使用调试器发送“运行”策略,可以正常运行,但是断掉调试器与上文一致。


初次试水,还请各位帮忙指点一二


您好,在我们CH32V103 EVT中有GPIO例程,你可以在该例程基础上修改一下,改成PC9引脚,测试一下你的板子是否有问题,可以先不用外部晶振,直接用内部晶振测试,如下图1,使用相关宏定义即可。此外,可以在你的例程中使用内部晶振测试一下。注意,若程序中有用到中断函数,注意加中断声明。若方便,可将你的工程发至我的邮箱(lzs@wch.cn),这边在测试板跑一下,顺便看一下程序。

image.png

图1


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