SiFli 52 UART的RX唤醒MCU怎么做
以下是MCU处于睡眠模式时的唤醒源:
如果您要从Deep/Standby睡眠模式中唤醒,可以看到并没有uart唤醒的功能,因此需要把UART的RX配置为GPIO模式,然后启用此IO的唤醒功能,请参阅例程`\example\rt_device\pm\project\hcpu`,如下所示:<br>
HAL_PIN_Set(PAD_PA26, USART2_TXD, PIN_PULLUP, 1); //uart2 default setting
HAL_PIN_Set(PAD_PA27, USART2_RXD, PIN_PULLUP, 1); //uart2 default setting static void gpio_wakeup_handler(void *args)
{rt_kprintf("gpio_wakeup_handler!\n");HAL_PIN_Set(PAD_PA27, USART2_RXD, PIN_PULLUP, 1); //switch to uart functionrt_pm_request(PM_SLEEP_MODE_IDLE); //set MCU not to sleep
}
#if defined(SF32LB52X)
{HAL_PIN_Set(PAD_PA27, GPIO_A27, PIN_PULLUP, 1); //set PA27 to GPIO funtionHAL_HPAON_EnableWakeupSrc(HPAON_WAKEUP_SRC_PIN3, AON_PIN_MODE_POS_EDGE); //Enable #WKUP_PIN3 (PA27)rt_pin_mode(27, PIN_MODE_INPUT);rt_pin_attach_irq(27, PIN_IRQ_MODE_RISING, (void *) gpio_wakeup_handler,\(void *)(rt_uint32_t) 27); //PA34 GPIO interruptrt_pin_irq_enable(27, 1);
}
#endif
建议使用独立的GPIO来唤醒MCU(大多数客户都是这样),如果你想让wakepin和uart rx2共享相同的GPIO,你需要像上面这样做更多的软件工作。等待唤醒完成(看到打印[pm]W:)后,才能接收UART数据,并保持mcu唤醒,直到rx工作完成。