ch592f無法用RTC_TRIGFunCfg觸發(fā)喚醒,但是可以用RTC_TMRFunCfg定時喚醒
用ch592的rtc和休眠例子,也是一樣,無法rtc觸發(fā)喚醒
另外串口只能讀取不超過7個字節(jié)。超過7個字節(jié),只能一個一個字節(jié)讀取。有沒有辦法一次讀取超過7個字節(jié),比如13個字節(jié)
ch592f無法用RTC_TRIGFunCfg觸發(fā)喚醒,但是可以用RTC_TMRFunCfg定時喚醒
用ch592的rtc和休眠例子,也是一樣,無法rtc觸發(fā)喚醒
另外串口只能讀取不超過7個字節(jié)。超過7個字節(jié),只能一個一個字節(jié)讀取。有沒有辦法一次讀取超過7個字節(jié),比如13個字節(jié)
①使用觸發(fā)中斷喚醒時,進入中斷服務函數(shù)再觸發(fā)一次:
RTC_ClearITFlag(RTC_TRIG_EVENT);?
②可以使用串口中斷的方式接收數(shù)據(jù),fifo是8字節(jié),所以可配置的觸發(fā)接收最大是7字節(jié),無法一次性接收到13個字節(jié)。
可以手動修改,寫一個緩沖區(qū),接收觸發(fā)的數(shù)據(jù)后,再移位接收超時的數(shù)據(jù),這樣就可以完整的接收到數(shù)據(jù)。
將觸發(fā)for循環(huán)的接收數(shù)據(jù)-1(for(i = 0; i != (trigB-1); i++)),少接收一個數(shù)據(jù),則每次都會進入超時。
觸發(fā)模式的 rtc還是無法啟動
在中斷中是類似這樣寫么
void?RTC_IRQHandler(void) { ??UINT16?py;?UINT16?pmon;?UINT16?pd;?UINT16?ph;?UINT16?pm;?UINT16?ps; ??RTC_GetTime(&py,&pmon,&pd,&ph,&pm,&ps);????if?(RTC_GetITFlag(RTC_TRIG_EVENT))?{ ????????printf("%d年%d月%d日%d時%d分%d秒\r\n",py,pmon,pd,ph,pm,ps); ????????RTC_TRIGFunCfg(32768*1); ????????RTC_ClearITFlag(RTC_TRIG_EVENT); ????}????if?(RTC_GetITFlag(RTC_TMR_EVENT))?{ ????????printf("%d年%d月%d日%d時%d分%d秒\r\n",py,pmon,pd,ph,pm,ps); ????????RTC_ClearITFlag(RTC_TMR_EVENT); ????} }
如是這樣,試了。還是無法啟動
有參考的代碼沒
#include?"CH59x_common.h" /********************************************************************* ?*?@fn??????DebugInit ?* ?*?@brief???調試初始化 ?* ?*?@return??none ?*/ void?DebugInit(void) { ????GPIOA_SetBits(GPIO_Pin_9); ????GPIOA_ModeCfg(GPIO_Pin_9,?GPIO_ModeOut_PP_5mA); ????UART1_DefInit(); } /********************************************************************* ?*?@fn??????main ?* ?*?@brief???主函數(shù) ?* ?*?@return??none ?*/ int?main() { ????SetSysClock(CLK_SOURCE_PLL_60MHz); ????PWR_DCDCCfg(ENABLE); ????GPIOA_ModeCfg(GPIO_Pin_All,?GPIO_ModeIN_PU); ????GPIOB_ModeCfg(GPIO_Pin_All,?GPIO_ModeIN_PU); ????/*?配置串口調試?*/ ????DebugInit(); ????PRINT("Start?@ChipID=%02x\n",?R8_CHIP_ID); ????DelayMs(200); #if?1 ????LClk32K_Select(Clk32K_LSE);//啟用外部32K ????R8_SAFE_ACCESS_SIG?=?SAFE_ACCESS_SIG1; ????R8_SAFE_ACCESS_SIG?=?SAFE_ACCESS_SIG2; ????R8_CK32K_CONFIG?|=?RB_CLK_XT32K_PON; ????R8_SAFE_ACCESS_SIG?=?0; ????RTC_InitTime(2024,1,1,0,0,0); ????RTC_TRIGFunCfg(65535); ????PFIC_EnableIRQ(RTC_IRQn); ????PWR_PeriphWakeUpCfg(?ENABLE,?RB_SLP_RTC_WAKE,?Long_Delay?); ????printf("Init?RTC?OK\r\n"); #endif #if?1 ????/*?配置喚醒源為?GPIO?-?PA5?*/ ????GPIOA_ModeCfg(GPIO_Pin_5,?GPIO_ModeIN_PU); ????GPIOA_ITModeCfg(GPIO_Pin_5,?GPIO_ITMode_FallEdge);?//?下降沿喚醒 ????PFIC_EnableIRQ(GPIO_A_IRQn); ????PWR_PeriphWakeUpCfg(ENABLE,?RB_SLP_GPIO_WAKE,?Long_Delay); #endif #if?1 ????while(1){ //????????PRINT("sleep?mode?sleep?\n"); ????????DelayMs(2); ????????//?注意當主頻為80M時,Sleep睡眠喚醒中斷不可調用flash內代碼。 ????????LowPower_Sleep(RB_PWR_RAM24K?|?RB_PWR_RAM2K?|?RB_XT_PRE_EN);?//只保留24+2K?SRAM?供電 ????????HSECFG_Current(HSE_RCur_100);?????????????????//?降為額定電流(低功耗函數(shù)中提升了HSE偏置電流) //????????PRINT("wake..?\n"); ????} #endif //????while(1); } __INTERRUPT __HIGH_CODE void?GPIOA_IRQHandler(void) { ????printf("GPIO...\n"); ????GPIOA_ClearITFlagBit(GPIO_Pin_6?|?GPIO_Pin_5); } __attribute__((interrupt("WCH-Interrupt-fast"))) __attribute__((section(".highcode"))) void?RTC_IRQHandler(void) { ????UINT16?py;?UINT16?pmon;?UINT16?pd;?UINT16?ph;?UINT16?pm;?UINT16?ps; ????RTC_GetTime(&py,&pmon,&pd,&ph,&pm,&ps); ????if?(RTC_GetITFlag(RTC_TRIG_EVENT))?{ ????????printf("%d年%d月%d日%d時%d分%d秒\r\n",py,pmon,pd,ph,pm,ps); ????????RTC_ClearITFlag(RTC_TRIG_EVENT); ????????RTC_TRIGFunCfg(65535); ????} }
可以參考看下,如果有問題,可以發(fā)送郵件至郵箱lpc@wch.cn,我直接提供代碼看下。
參考博客:
CH573芯片Sleep說明(RTC程序說明) - SweetTea_lllpc - 博客園 (cnblogs.com)
rtc觸發(fā)模式和rf 2.4g是不是有沖突?去掉2.4g相關。rtc正常運行
rtc定時模式在rf? 2.4g可以正常使用
問題解決了,放在2.4g初始化后面