LPUART的低功耗模式到底怎么使用
本帖最后由 knifeflying 于 2018-6-10 17:07 编辑折腾了好长时间的LPUART,怎么还是不能成功呢。
我希望进入到stop2模式后,接收到任何一个字符,就唤醒,执行中断处理函数和callback函数,执行完之后,就再次进入stop2模式。但是在callback函数中,获得的字符总是错的。
应该怎样设置才正确呢?
我的代码,主函数中进入sotp模式之前:
WakeUpSelection.WakeUpEvent = UART_WAKEUP_ON_READDATA_NONEMPTY;
if (HAL_UARTEx_StopModeWakeUpSourceConfig(&hlpuart1, WakeUpSelection)!= HAL_OK)
{
Error_Handler();
}
/* Enable the LPUART Wake UP from STOP mode Interrupt */
__HAL_UART_ENABLE_IT(&hlpuart1, UART_IT_WUF);
/* enable MCU wake-up by LPUART */
HAL_UARTEx_EnableStopMode(&hlpuart1);
HAL_PWR_EnableSleepOnExit();
/* enter STOP mode */
HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
中断处理函数:
void LPUART1_IRQHandler(void)
{
/* USER CODE BEGIN LPUART1_IRQn 0 */
/* Check WUF flag value in ISR register */
if(LL_LPUART_IsActiveFlag_WKUP(LPUART1) && LL_LPUART_IsEnabledIT_WKUP(LPUART1))
{
/* Configure LPUART1 transfer interrupts : */
/* WUF flag clearing */
LL_LPUART_ClearFlag_WKUP(LPUART1);
/* Call function in charge of handling Character reception */
LPUART_CharReception_Callback();
}
else
{
/* Call Error function */
Error_Callback();
}
callback函数:
void LPUART_CharReception_Callback(void)
{
/* Read Received character. RXNE flag is cleared by reading of RDR register */
putchar(LL_LPUART_ReceiveData8(LPUART1));
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
}
能帮你的就是推荐你去看看资料
【低功耗模式下使用UART唤醒Kinetis L系列】
【32位机如何用UART做低功耗模式转换】
【新手求助,如何通过UART使MCU进入低功耗模式】 首先不知道你用的是什么芯片,两次STOP2是哪种模式,在这种模式时LPUART的时钟从哪来的,起不起作用。
如果LPUART的时钟没有的话,是不能接收数据的。
因为一般来说UART的接收管脚,同时可以作为中断输入来唤醒MCU的,那么只需要检测RX管脚上的一个下降沿即可认为是有唤醒信号。 干脆吧工程发上来,看看配置 低功耗恢复后要重新设置 系统时钟频率,不然会影响串口的时钟波特率的。 【实战经验】LPUART唤醒STOP MODE下的MCU
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=611266&highlight=lpuart
(出处: 论坛-意法半导体STM32/STM8技术社区)
页:
[1]