void?app_clk_init() { ????RCC_ClocksTypeDef?RCC_Clocks; ????//RCC_PLLConfig(RCC_PLLSource_HSE_Div1,?RCC_PLLMULL6);//12M*6 ????//這版混進(jìn)了一個(gè)16M的晶振進(jìn)去,搞得只能用這個(gè)參數(shù)了 ????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); ????} }
這是初始代碼,啟動(dòng)文件內(nèi)的
? ??? li t0, 0x88
? ?? ?csrs mstatus, t0
中斷與官方給的參數(shù)一致。
目前遇到的問(wèn)題是僅能在調(diào)試過(guò)程中運(yùn)行,一旦停止gdb,似乎芯片會(huì)立刻掛起,導(dǎo)致卡住。直接供電也是如此。
電路為最小系統(tǒng),由立創(chuàng)商城基礎(chǔ)修改而來(lái)
目前暫時(shí)使用主時(shí)鐘16MHZ并且修改了ch32庫(kù)文件的HSE_VALUE的參數(shù)
已經(jīng)完成的前期排查:
去除了代碼中幾乎所有的冗余項(xiàng)。關(guān)閉了printf。
關(guān)閉了代碼的優(yōu)化,完成最基礎(chǔ)的高低電平。
去掉了R2、R10電阻并且短接當(dāng)前的 電路。
測(cè)量R4,上電后依然為3.3V
目前遇到現(xiàn)象:
在接入電源后,電源指示燈亮起,但是運(yùn)行指示燈無(wú)反應(yīng)。
使用調(diào)試器上電,電源指示燈亮起,但是運(yùn)行指示燈無(wú)反應(yīng)
使用調(diào)試器調(diào)試,運(yùn)行時(shí)電源指示燈常量,可以正常運(yùn)行調(diào)試,并且指示燈正常反應(yīng)
停止調(diào)試器的gdb進(jìn)程,運(yùn)行指示燈立刻熄滅(正常代碼應(yīng)為長(zhǎng)亮)。
使用調(diào)試器發(fā)送“運(yùn)行”策略,可以正常運(yùn)行,但是斷掉調(diào)試器與上文一致。
初次試水,還請(qǐng)各位幫忙指點(diǎn)一二