STM32
直播中

陈勇

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

STM32L010K8T6用USART2串口唤醒失败如何解决?

我需要实现的功能:干电池提供电源持续使用5年以上。外部接口只有3个,2个GPIO和1个USART。2个GPIO用于外部中断,USART用于和上位机通信。项目使用STM32CubeMX生成代码,模板选择的LL,干电池电压为3V,容量为1000mAh。STM32L010K8T6上电初始化,重要代码如下:

  • LL_PWR_EnterLowPowerRunMode();
  • LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE3);

初始化完成立即进入STOP模式,代码如下:

  •     uart2_prepare_stop();
  •     //LL_mDelay(1000);
  •     PWR->CR  = ~PWR_CR_PDDS;
  •     PWR->CR |= PWR_CR_CWUF;
  •     LL_mDelay(1);
  •     SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
  •     __wfi();
  •     LL_USART_DisableInStopMode(USART2);

函数uart2_prepare_stop代码如下:


  •     LL_USART_EnableIT_RXNE(USART2);
  •     LL_USART_EnableClockInStopMode(USART2);
  •     LL_USART_EnableIT_WKUP(USART2);
  •     LL_USART_EnableInStopMode(USART2);

串口初始化代码如下:

  •   USART_InitStruct.BaudRate = 9600;
  •   USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
  •   USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
  •   USART_InitStruct.Parity = LL_USART_PARITY_NONE;
  •   USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;
  •   USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
  •   USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
  •   LL_USART_Init(USART2,  USART_InitStruct);
  •   LL_USART_ConfigAsyncMode(USART2);
  •   LL_USART_SetWKUPType(USART2, LL_USART_WAKEUP_ON_RXNE);
  •   LL_USART_Enable(USART2);
  •     uart2_prepare_stop();
测试结果,2个外部中断可正常唤醒,USART2无法唤醒。上述代码都是根据手册说明打开唤醒相关的设置。

请问上述代码是存在寄存器设置错误?如何让USART2在产生RXNE中断信号时唤醒MCU?谢谢!

回帖(1)

姜雪

2024-3-21 10:26:07
泛泛来讲,STM32L0芯片的UART2是具备唤醒STOP模式的功能的,具体来说还有看具体的料号,在参考手册的 USART implementation 的一个表格里有描述。要不你换UART1试试,它是一定支持STOP唤醒的。
举报

更多回帖

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