CH573死機

int main()

{

? ? SetSysClock( CLK_SOURCE_PLL_60MHz );

? ? GPIOA_ModeCfg(GPIO_Pin_All,GPIO_ModeIN_Floating);

? ? GPIOB_ModeCfg(GPIO_Pin_All,GPIO_ModeIN_Floating);


? ? WWDG_SetCounter(0x0);

? ? WWDG_ResetCfg(ENABLE);


#ifdef DEBUG

? ? GPIOA_SetBits( bTXD1 );

? ? GPIOA_ModeCfg( bTXD1, GPIO_ModeOut_PP_5mA );

? ? UART1_DefInit( );

#endif

? ? PRINT("s\n");

? ? {

? ? ? ? //PRINT("%s\n",VER_LIB);

? ? }

? ??

? ? WWDG_SetCounter(0x0);


? ? CH57X_BLEInit( );

? ? RF_RoleInit( );

? ? rf_init();


? ? RF_Tx( TX_DATA,TX_DATA_SIZE, 0x02, 0xFF );

? ? RF_Tx( TX_DATA,TX_DATA_SIZE, 0x02, 0xFF );

? ? RF_Tx( TX_DATA,TX_DATA_SIZE, 0x02, 0xFF );


? ? WWDG_SetCounter(0x0);

? ? /*while(1){

? ? ? ? DelayMs( 200 );

? ? ? ? RF_Tx( TX_DATA,TX_DATA_SIZE, 0x02, 0xFF );

? ? }*/



SLEEP:

? ? PRINT( "e\n" );

? ? //PRINT( "shut down mode sleep\n" );

? ? RTC_TMRFunCfg(SEND_PERIOD);

? ? PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_RTC_WAKE, Edge_ShortDelay );

? ? DelayUs( 2 );

? ? LowPower_Shutdown( 0 );? ? ? ? ? ? ? ? ? ? ? ? ? //全部斷電,喚醒后復位


? ? return 0;

}


用573發(fā)送藍牙每隔4秒數(shù)據(jù),持續(xù)20來分鐘就再也收不到數(shù)據(jù)。代碼里的看門狗功能是后加的,現(xiàn)在正在測試。但是不加看門狗的情況下,會出現(xiàn)單片機死機,接串口線也收不到打印數(shù)據(jù)?,F(xiàn)在很怕是休眠狀態(tài)下死機,因為573看門狗非獨立,依賴系統(tǒng)時鐘。如果是RTC死機的話這該怎么辦,電池供電的長期用產(chǎn)品


實測,加了看門狗一樣死機


RTC初始化完成了嗎?使用的是內(nèi)置晶振還是外部晶振?帖子中并未出現(xiàn)以上信息。

如果方便,請?zhí)峁┱麄€工程,驗證測試。


不好意思,確實沒初始化為內(nèi)部始終,抄代碼抄拉了,現(xiàn)在加上使能HAL_TIME_INIT,我再測試下


/********************************** (C) COPYRIGHT *******************************

?* File Name? ? ? ? ? : Main.c

?* Author? ? ? ? ? ? ?: WCH

?* Version? ? ? ? ? ? : V1.0

?* Date? ? ? ? ? ? ? ?: 2020/08/06

?* Description ? ? : 串口1收發(fā)演示

?*******************************************************************************/


#include "CH57x_common.h"

#include "CH57xBLE_LIB.H"

#include "HAL.h"

#include "math.h"


__attribute__((aligned(4))) u32 MEM_BUF[BLE_MEMHEAP_SIZE/4];


#if (defined (BLE_MAC)) && (BLE_MAC == TRUE)

u8C MacAddr[6] = {0x84,0xC2,0xE4,0x03,0x02,0x02};

#endif


#define TX_DATA_SIZE? 15

uint8_t TX_DATA[TX_DATA_SIZE] = {0x1,0x00,0x0, 0x0, 0xAB, 0x23,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?8,0x09,'m','y','-','T','E','S','T',

};


//rf發(fā)送周期

#define SEND_PERIOD Period_4_S


void RF_2G4StatusCallBack( uint8 sta , uint8 crc, uint8 *rxBuf )

{


}


void rf_init(void){

? ? uint8 state;

? ? rfConfig_t rfConfig;


? ? rfConfig.accessAddress = 0x8E89BED6;? // 禁止使用0x55555555以及0xAAAAAAAA ( 建議不超過24次位反轉,且不超過連續(xù)的6個0或1 )

? ? rfConfig.CRCInit = 0x555555;

? ? rfConfig.Channel = 39;

? ? //rfConfig.Frequency = 2480000;

? ? //rfConfig.LLEMode = LLE_MODE_BASIC|LLE_MODE_EX_CHANNEL; // 使能 LLE_MODE_EX_CHANNEL 表示 選擇 rfConfig.Frequency 作為通信頻點

? ? rfConfig.LLEMode = LLE_MODE_BASIC;

? ? rfConfig.rfStatusCB = RF_2G4StatusCallBack;

? ? state = RF_Config( &rfConfig );

? ? //PRINT("rf 2.4g init: %x\n",state);

}



int main()

{

? ? SetSysClock( CLK_SOURCE_PLL_60MHz );

? ? GPIOA_ModeCfg(GPIO_Pin_All,GPIO_ModeIN_Floating);

? ? GPIOB_ModeCfg(GPIO_Pin_All,GPIO_ModeIN_Floating);

? ? HAL_TimeInit();


? ? WWDG_SetCounter(0x0);

? ? WWDG_ResetCfg(ENABLE);


#ifdef DEBUG

? ? GPIOA_SetBits( bTXD1 );

? ? GPIOA_ModeCfg( bTXD1, GPIO_ModeOut_PP_5mA );

? ? UART1_DefInit( );

#endif

? ? PRINT("s\n");

? ? {

? ? ? ? //PRINT("%s\n",VER_LIB);

? ? }

? ?

? ? WWDG_SetCounter(0x0);


? ? CH57X_BLEInit( );

? ? RF_RoleInit( );

? ? rf_init();


? ? RF_Tx( TX_DATA,TX_DATA_SIZE, 0x02, 0xFF );

? ? RF_Tx( TX_DATA,TX_DATA_SIZE, 0x02, 0xFF );

? ? RF_Tx( TX_DATA,TX_DATA_SIZE, 0x02, 0xFF );


? ? WWDG_SetCounter(0x0);

? ? /*while(1){

? ? ? ? DelayMs( 200 );

? ? ? ? RF_Tx( TX_DATA,TX_DATA_SIZE, 0x02, 0xFF );

? ? }*/



SLEEP:

? ? PRINT( "e\n" );

? ? //PRINT( "shut down mode sleep\n" );

? ? GPIOA_ModeCfg(GPIO_Pin_All,GPIO_ModeIN_Floating);

? ? RTC_TMRFunCfg(SEND_PERIOD);

? ? PFIC_EnableIRQ(RTC_IRQn);

? ? //PWR_UnitModCfg(DISABLE,0x1);

? ? PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_RTC_WAKE, Edge_ShortDelay );

? ? DelayUs( 5 );

? ? LowPower_Shutdown( 0 );? ? ? ? ? ? ? ? ? ? ? ? ? //全部斷電,喚醒后復位


? ? while(1){

? ? ? ? __nop();__nop();

? ? ? ? SYS_ResetExecute();

? ? }


? ? return 0;

}


以上工程運行大概20分鐘就死機,已經(jīng)定義宏變量CLK_OSC32K 1,有一個奇怪的現(xiàn)象,如果官方開發(fā)板的調(diào)試串口輸出接上串口線,那么運行了30多分鐘都還沒死機,如果沒接大概20分鐘就死機。


icon_rar.gif死機工程.zip

這個就是死機的工程,運行大概20來分鐘RTC就再也無法喚醒


最新測試情況,RTC弄成時間點到期觸發(fā),而非定時觸發(fā),運行了2小時沒死機


最新測試,把shutdown改成deepsleep,同時開啟ram2K電源就不死機了,等會再試試deepsleep去掉所有電源只留核心電源跟RTC。

是否shutdown有問題?那么留RTC低功耗0.6UA就做不到了。


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

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