麻煩提供一下CH32V307EVT開發(fā)板的原理圖,謝謝!
您好,關(guān)于CH32V307 EVT 開發(fā)板的原理圖,在CH32V307EVT 的PUB文件夾下都有的,如下圖。CH32V307 EVT下載鏈接如下:
評估板下載RTC例程,只打印000,
經(jīng)查,RTC_Init返回值為1,說明初始化時鐘失敗,晶振有問題,是不是板上的32.768晶振有問題,不能起振?
我把它改為內(nèi)部40K時鐘,下載后第一次正常,但重新上電后就不行了,程序卡在
RTC_WaitForSynchro(); //等待最近一次對RTC寄存器的寫操作完成
不知道是什么原因,特此請教!謝謝!
您好,測試板可以換個低速晶振試一下,此外若要使用內(nèi)部LSI,注意程序要進行對應的修改,如下圖
我是這樣改的
RTC初始化代碼如下 :
u8?RTC_Init(void) { ????//檢查是不是第一次配置時鐘 ????u8?temp=0; ????RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR?|?RCC_APB1Periph_BKP,?ENABLE);//使能PWR和BKP外設時鐘 ????PWR_BackupAccessCmd(ENABLE);//使能后備寄存器訪問 ????BKP_DeInit();//復位備份區(qū)域 ????RCC_LSICmd(ENABLE); ????while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)?==?RESET?&&?temp?<250) ????{ ????temp++; ????Delay_Ms(20); ????} ????if(temp?>=?250) ????return?1; ????RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);?// ????RCC_RTCCLKCmd(ENABLE); ????RTC_WaitForLastTask();//等待最近一次對RTC寄存器的寫操作完成 ????RTC_WaitForSynchro();??//等待RTC寄存器同步 ????//?RTC?ITConfig(RTC?IT?ALR,?ENABLE); ????RTC_ITConfig(RTC_IT_SEC,?ENABLE);//使能RTC秒中斷 ????RTC_WaitForLastTask();//等待最近一次對RTC寄存器的寫操作完成 ????RTC_EnterConfigMode(); ????RTC_SetPrescaler(32767); ????RTC_WaitForLastTask(); ????if?(BKP_ReadBackupRegister(BKP_DR1)?!=?0x5A51)//從指定的后備寄存器中讀出數(shù)據(jù):讀出了與寫入的指定數(shù)據(jù)不相乎 ????????RTC_Set(2020,11,10,13,50,55);//設置時間 ????RTC_ExitConfigMode();//退出RTC配置模式 ????BKP_WriteBackupRegister(BKP_DR1,?0X5A51);?//向指定的后備寄存器中寫入用戶程序數(shù)據(jù) ????RTC_NVIC_Config();//RCT中斷分組設置 ????RTC_Get();//更新時間 ????return?0;?//ok } 在VBAT電源保持的情況下,每次重新上電都是打印初始化設置的時間2020,11,10,13,50,55,即RTC無法正常運行,這是為什么?
u8?RTC_Init(void) { ????u8?temp?=?0; ????RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR?|?RCC_APB1Periph_BKP,?ENABLE); ????PWR_BackupAccessCmd(ENABLE);//使能后備寄存器訪問 ????if?(BKP_ReadBackupRegister(BKP_DR1)?!=?0xA1A2)//從指定的后備寄存器中讀出數(shù)據(jù):讀出了與寫入的指定數(shù)據(jù)不相乎 ????{ ????????printf("RTC?Test:?%d\r\n",88); ????????BKP_DeInit();//復位備份區(qū)域 ????????RCC_LSICmd(ENABLE); ????????while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY)?==?RESET?&&?temp?<250) ????????{ ????????temp++; ????????Delay_Ms(20); ????????} ????????if(temp?>=?250) ????????return?1; ????????RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); ????????RCC_RTCCLKCmd(ENABLE); ????????RTC_WaitForLastTask();//等待最近一次對RTC寄存器的寫操作完成 ????????RTC_WaitForSynchro();//等待RTC寄存器同步 ????????//??????RTC_ITConfig(RTC_IT_ALR,?ENABLE); ????????RTC_ITConfig(RTC_IT_SEC,?ENABLE);//使能RTC秒中斷 ????????RTC_WaitForLastTask(); ????????RTC_EnterConfigMode(); ????????RTC_SetPrescaler(32767); ????????RTC_WaitForLastTask(); ????????RTC_Set(2019,?10,?8,?13,?58,?55);?/*?Setup?Time?*/ ????????RTC_ExitConfigMode();//退出RTC配置模式 ????????BKP_WriteBackupRegister(BKP_DR1,?0XA1A2); ????????printf("RTC?Test:?%d\r\n",99); ????} ????else ????{ ????????printf("RTC?Test:?%d\r\n",77); ????????RTC_WaitForSynchro();?//等待最近一次對RTC寄存器的寫操作完成 ????????//卡在這個地方了----------------------------- ????????printf("RTC?Test:?%d\r\n",66); ????????RTC_ITConfig(RTC_IT_SEC,?ENABLE);?//使能RTC秒中斷 ????????printf("RTC?Test:?%d\r\n",55); ????????RTC_WaitForLastTask();//等待最近一次對RTC寄存器的寫操作完成 ????????printf("RTC?Test:?%d\r\n",44); ????} ????RTC_NVIC_Config();//RCT中斷分組設置 ????RTC_Get();//更新時間 ????return?0; }
同樣只能運行一次,重啟之后就卡在RTC_WaitForSynchro();的循環(huán)中
哦,自己弄好了。在printf("RTC Test: %d\r\n",77);前面加入:
?RCC_LSICmd(ENABLE); ?RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); ?RCC_RTCCLKCmd(ENABLE);
完整的項目:
請問哪里可以下載到CH32V系列的庫函數(shù)開發(fā)手冊?
請問 如何在CH32v103上實現(xiàn)互斥鎖 或者 條件變量
軟中斷例程有沒有
您好,目前沒有相關(guān)例程,若你之前有用過相關(guān)功能程序,可以直接套用的?;蛘吣憧梢酝ㄟ^郵箱(lzs@wch.cn)跟我具體說一下你的目的或你想實現(xiàn)的功能,這邊具體看一下.