WCH沁恒单片机
直播中

刘玉兰

7年用户 997经验值
私信 关注
[问答]

CH573睡眠前把串口设置成外io唤醒出现死机现象怎么处理?

//  UART1_Reset();
//  R8_UART1_MCR = 0;
//  R8_UART1_IER = 0;
//  R8_UART1_IIR = 1;
//  R8_UART1_LCR = 0;
//  R8_UART1_LSR = 0x60;
  GPIOA_ModeCfg(GPIO_Pin_8,GPIO_ModeIN_PU);
  GPIOA_ITModeCfg(GPIO_Pin_8,GPIO_ITMode_FallEdge);//PA8 串口唤醒
  PFIC_EnableIRQ(GPIO_A_IRQn);


  PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_GPIO_WAKE, Edge_LongDelay );//唤醒源
  DelayMs( 2 );
  LowPower_Sleep( RB_PWR_RAM16K | RB_PWR_RAM2K );       //只保留14+2K SRAM 供电
  HSECFG_Current( HSE_RCur_100 );     // 降为额定电流(低功耗函数中提升了HSE偏置电流)




这是睡眠配置,睡眠前把串口设置成外io唤醒
  
  这是启动的时候配置的串口, 能用, 但唤醒后重新调用, 就出现死机现象了
void Uart1_Ble_Init(void)
{
  UART1_Reset();//串口复位
  GPIOA_SetBits(bTXD1);
  GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA);
  GPIOA_ModeCfg(bRXD1, GPIO_ModeIN_PU);
  UART1_DefInit( );
  UART1_ByteTrigCfg( UART_1BYTE_TRIG );//UART_1BYTE_TRIG,UART_7BYTE_TRIG
  UART1_INTCfg( ENABLE, RB_IER_RECV_RDY|RB_IER_LINE_STAT );
  PFIC_EnableIRQ( UART1_IRQn );
}
这是串口中断
void GPIOA_IRQHandler(void)
{
  GPIOA_irqFlag  = GPIOA_ReadITFlagPort();
  if(GPIOA_irqFlag  & GPIO_Pin_8){//chuankou
    GPIOA_ClearITFlagBit(GPIO_Pin_8);
    PFIC_DisableIRQ(GPIO_A_IRQn);
  }
  }
  死机不知道死在哪, 不方便debug, 问题有可能出在哪?
  
  

回帖(1)

陈妙宙

2022-8-10 09:21:08
唤醒后要关闭GPIO中断,关闭GPIO唤醒,然后重新设置IO,再初始化串口
举报

更多回帖

发帖
×
20
完善资料,
赚取积分