ch592無法用RTC_TRIGFunCfg觸發(fā)喚醒

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初始化后面


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频