打印
[STM32U3]

【STM32U385RG 测评】+低功耗模式下,通过LPUART串口唤醒实验

[复制链接]
255|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 LiuDW091 于 2025-7-24 16:25 编辑

#申请原创# #有奖活动# #申请开发板#@21小跑堂
这个低功耗模式以前没玩过,这两天都在摸索着,IDE软件编译器也不给力
经常报错,说找不到文件,但是文件path路径都已经设置了的,哎,说多了都是泪
一、首先通原理图、数据手册,找到自己需要的DAC端口,以及连接到的外部管脚
还是老三样,找硬件原理图,看看需要的串口在哪里,别接错了

LPUART1设置的时候需要主要,默认的串口不是PA2、PA3,需要手动更改
二、IDE软件配置
1、GPIO

2、ICACHE

3、LPUART1

4、PWR

5、NVIC

6、时钟
手册上说HSI稳定点,当然这个没验证过,有兴趣也可以验证下

三、代码调试
生成代码后,可以参考例程来调试,不过需要将自己需要的文件放在目录下面,路径也需要添加
不过可能会遇到有文件却报错显示找不到文件的尴尬情况哦
这时候不要纠结了,可以换软件或者直接使用例程,在例程里面修改。
#if!defined(BOARD_IN_STOP_MODE)

  /* Configure User push-button in Interrupt mode */
  BSP_PB_Init(BUTTON_USER, BUTTON_MODE_EXTI);

  /* Wait for User push-button press before starting the Communication.
     In the meantime, LD2 is blinking */
  while (UserButtonStatus == 0)
  {
    /* Toggle LD2*/
    BSP_LED_Toggle(LD2);
    HAL_Delay(100);
  }

  BSP_LED_Off(LD2);

  /* The board sends the message and expects to receive it back */

  /*##-1- Start the transmission process #####################################*/
  if (HAL_UART_Transmit_IT(&hlpuart1, (uint8_t *)aTxBuffer, TXBUFFERSIZE) != HAL_OK)
  {
    Error_Handler();
  }

  /*##-2- Put UART peripheral in reception process ###########################*/
  if (HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
  {
    Error_Handler();
  }

  /* Wait for reception complete callback */
  while (UserReceptionComplete == 0)
  {
  }

  /* Compare the expected and received buffers */
  if (Buffercmp((uint8_t *)aTxBuffer, (uint8_t *)aRxBuffer, RXBUFFERSIZE))
  {
    Error_Handler();
  }

  /* Turn on LD2 if test is ok */
  BSP_LED_On(LD2);

#else


这段代码主要是串口接收、发送数据的,可以直接使用例程里面的




  /* LD2 is on till stop mode */
  BSP_LED_On(LD2);

  /* wait for two seconds before test start */
  HAL_Delay(2000);

  /* Disable Debug during Stop mode */
  HAL_DBGMCU_DisableDBGStopMode();

  /* Enable MCU wake-up by LPUART */
  HAL_UARTEx_EnableStopMode(&hlpuart1);

  /*##-1- Put UART peripheral in reception process ###########################*/
  if (HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
  {

      Error_Handler();
  }

  /* about to enter STOP mode: switch off LD2 */
  BSP_LED_Off(LD2);

  /* enter STOP mode */
  HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

  /* The board receives the message from the other board. Message reception wakes up the board. */
  /* Switch On LD2 */
  BSP_LED_On(LD2);

  /* At that point, MCU has been awoken: LD2 has been turned back on ; Wake Up based on RXNE flag successful */
  SystemClock_Config_fromSTOP();

  /* Disable MCU wake-up by LPUART */
  HAL_UARTEx_DisableStopMode(&hlpuart1);

  /* Wait for reception complete callback */
  while (UserReceptionComplete == 0)
  {
  }

  /*##-2- Start the transmission process #####################################*/
  /* Send back received buffer */
  if (HAL_UART_Transmit_IT(&hlpuart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
  {

    Error_Handler();

  }

这部分主要是通过中断/串口唤醒MCU,接收数据,




while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
          BSP_LED_Toggle(LD2);

          /* wait for two seconds before test start */
          HAL_Delay(100);
  }
  /* USER CODE END 3 */
}

唤醒后,LD2等开始闪烁
四、实验效果
视频:
复位后,进入低功耗模式,测得电流0.35mA;
USER唤醒后电流1.2mA左右,串口发送数据,可以收到并显示
按复位进入低功耗模式,串口发送数据,唤醒MCU,LD2闪烁。
代码: STOP低功耗模式下唤醒.rar (9.2 KB)









使用特权

评论回复
沙发
wang6623| | 2025-7-28 14:13 | 只看该作者
先解决 IDE “找不到文件” 的编译错误

使用特权

评论回复
板凳
LiuDW091|  楼主 | 2025-7-28 14:50 | 只看该作者
wang6623 发表于 2025-7-28 14:13
先解决 IDE “找不到文件” 的编译错误

最近开始有点忙了,有点想转战keil了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

145

帖子

0

粉丝