This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2540串口唤醒的问题



#if (HAL_UART_ISR == 1)
HAL_ISR_FUNCTION(port0Isr, P0INT_VECTOR)
#else
HAL_ISR_FUNCTION(port1Isr, P1INT_VECTOR)
#endif
{
  HAL_ENTER_ISR();

  HalUARTResume();
  if (dmaCfg.uartCB != NULL)
  {
    dmaCfg.uartCB(HAL_UART_DMA-1, HAL_UART_RX_WAKEUP);
  }
  PxIFG = 0;
  PxIF = 0;

  HAL_EXIT_ISR();
}
#endif

这段代码,是GPIO中断唤醒后切换成串口的操作。我想问的是,唤醒需要单独的一个脉冲吗?还是说直接发送一个串口字节,就能够根据起始位什么的边沿唤醒,切换成串口后还能接收到正确的数据?也就是说对数据发送端有没有什么要求。另外,虽然这里要求定义HAL_UART_ISR == 1,为什么还是用DMA完成的串口接收。

  • 串口唤醒一般有两种方式

    1)根据UART RX电平来触发中断

          在休眠时,设置RX脉冲中断(上升沿或者下降沿),然后主机MCU发送串口数据时,RX管脚跳变会唤醒BLE芯片

          为了适配BLE唤醒时间,一般先发送一串前导码,确定唤醒BLE后,再发送真正的数据

    2)另外使用一个管脚,比如CSR流控脚

          这个就是简单的外部中断,没什么可说的

    具体使用哪种方式,看你UART是否启用了流控