news 2026/5/20 14:09:29

[STM32U3] 【STM32U385RG 测评】基础任务2 基于低功耗串口测试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[STM32U3] 【STM32U385RG 测评】基础任务2 基于低功耗串口测试

根据评测任务,此次测试需要用到低功耗串口,我这里使用lpuart1做为测试口,根据原理图,他接到PA2、PA3


1、串口初始化:

  1. static void MX_LPUART1_UART_Init(void)
  2. {
  3. /* USER CODE BEGIN LPUART1_Init 0 */
  4. /* USER CODE END LPUART1_Init 0 */
  5. /* USER CODE BEGIN LPUART1_Init 1 */
  6. /* USER CODE END LPUART1_Init 1 */
  7. hlpuart1.Instance = LPUART1;
  8. hlpuart1.Init.BaudRate = 115200;
  9. hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
  10. hlpuart1.Init.StopBits = UART_STOPBITS_1;
  11. hlpuart1.Init.Parity = UART_PARITY_NONE;
  12. hlpuart1.Init.Mode = UART_MODE_TX_RX;
  13. hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  14. hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  15. hlpuart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  16. hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  17. hlpuart1.FifoMode = UART_FIFOMODE_DISABLE;
  18. if (HAL_UART_Init(&hlpuart1) != HAL_OK)
  19. {
  20. Error_Handler();
  21. }
  22. if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  23. {
  24. Error_Handler();
  25. }
  26. if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  27. {
  28. Error_Handler();
  29. }
  30. if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK)
  31. {
  32. Error_Handler();
  33. }
  34. /* USER CODE BEGIN LPUART1_Init 2 */
  35. #ifdef BOARD_IN_STOP_MODE
  36. LPUART1_EXTI_ENABLE_IT();
  37. #endif /* BOARD_IN_STOP_MODE */
  38. /* USER CODE END LPUART1_Init 2 */
  39. }

2、同时为了显示LED,初始化led2

复制

  1. BSP_LED_Init(LD2);

3、配置低功耗时钟:

复制

  1. void SystemClock_Config_fromSTOP(void)
  2. {
  3. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  4. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  5. uint32_t pFLatency = 0;
  6. /* Get the Oscillators configuration from the internal RCC registers */
  7. HAL_RCC_GetOscConfig(&RCC_OscInitStruct);
  8. /* Wake up on HSI, re-enable PLL with HSI as source */
  9. /* Oscillator configuration unchanged */
  10. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  11. RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  12. RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  13. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  14. {
  15. Error_Handler();
  16. }
  17. /* Get the clock prescalers configuration from the internal RCC registers */
  18. HAL_RCC_GetClockConfig(&RCC_ClkInitStruct, &pFLatency);
  19. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  20. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
  21. |RCC_CLOCKTYPE_PCLK3;
  22. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  23. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  24. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  25. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  26. RCC_ClkInitStruct.APB3CLKDivider = RCC_HCLK_DIV1;
  27. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, pFLatency) != HAL_OK)
  28. {
  29. Error_Handler();
  30. }
  31. }



4、测试程序设计,在主程序中,首先延时2秒,然后开启低功耗串口的接收中断,然后进入低功耗模式,关闭LD2,当有串口数据接收后,周期闪烁,闪烁10次,如果没有数据再次进入,则再次进入低功耗模式。

复制

  1. /* LD2 is on till stop mode */
  2. BSP_LED_On(LD2);
  3. /* wait for two seconds before test start */
  4. HAL_Delay(2000);
  5. /* Disable Debug during Stop mode */
  6. HAL_DBGMCU_DisableDBGStopMode();
  7. /* Enable MCU wake-up by LPUART */
  8. HAL_UARTEx_EnableStopMode(&hlpuart1);
  9. /*##-1- Put UART peripheral in reception process ###########################*/
  10. if (HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
  11. {
  12. Error_Handler();
  13. }
  14. /* about to enter STOP mode: switch off LD2 */
  15. BSP_LED_Off(LD2);
  16. /* enter STOP mode */
  17. HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
  18. /* The board receives the message from the other board. Message reception wakes up the board. */
  19. /* Switch On LD2 */
  20. BSP_LED_On(LD2);
  21. /* At that point, MCU has been awoken: LD2 has been turned back on ; Wake Up based on RXNE flag successful */
  22. SystemClock_Config_fromSTOP();
  23. /* Disable MCU wake-up by LPUART */
  24. HAL_UARTEx_DisableStopMode(&hlpuart1);
  25. #endif /* !BOARD_IN_STOP_MODE */
  26. /* USER CODE END 2 */
  27. /* Infinite loop */
  28. /* USER CODE BEGIN WHILE */
  29. while (1)
  30. {
  31. BSP_LED_Off(LD2);
  32. HAL_Delay(500);
  33. BSP_LED_On(LD2);
  34. HAL_Delay(500);
  35. cnt++;
  36. if(cnt >10)
  37. {
  38. /* Disable Debug during Stop mode */
  39. HAL_DBGMCU_DisableDBGStopMode();
  40. /* Enable MCU wake-up by LPUART */
  41. HAL_UARTEx_EnableStopMode(&hlpuart1);
  42. /*##-1- Put UART peripheral in reception process ###########################*/
  43. if (HAL_UART_Receive_IT(&hlpuart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)
  44. {
  45. Error_Handler();
  46. }
  47. /* about to enter STOP mode: switch off LD2 */
  48. BSP_LED_Off(LD2);
  49. /* enter STOP mode */
  50. HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
  51. /* The board receives the message from the other board. Message reception wakes up the board. */
  52. /* Switch On LD2 */
  53. BSP_LED_On(LD2);
  54. /* At that point, MCU has been awoken: LD2 has been turned back on ; Wake Up based on RXNE flag successful */
  55. SystemClock_Config_fromSTOP();
  56. /* Disable MCU wake-up by LPUART */
  57. HAL_UARTEx_DisableStopMode(&hlpuart1);
  58. cnt = 0;
  59. }
  60. /* USER CODE END WHILE */
  61. /* USER CODE BEGIN 3 */
  62. }
  63. /* USER CODE END 3 */

【测试】
我使用微安表进行测试,在正常工作时工作电流为1.1MA,进入低功耗时电流为400uA,使用串口发送数据后,可以正常唤醒。


---------------------
作者:lulugl
链接:https://bbs.21ic.com/icview-3481350-1-1.html?_dsign=6d32beff
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 14:04:30

如何将B站缓存的m4s文件转换为MP4:m4s-converter技术解析与实践指南

如何将B站缓存的m4s文件转换为MP4:m4s-converter技术解析与实践指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 当你收藏的B站视…

作者头像 李华
网站建设 2026/5/20 14:03:03

告别臃肿!华硕笔记本终极轻量化控制神器G-Helper完全指南

告别臃肿!华硕笔记本终极轻量化控制神器G-Helper完全指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook,…

作者头像 李华
网站建设 2026/5/20 14:03:02

GitHub Copilot @workspace实战:5个真实场景教你像资深工程师一样提问

GitHub Copilot workspace实战:5个真实场景教你像资深工程师一样提问 在代码的海洋里航行,每个开发者都渴望拥有一位永不疲倦的结对编程伙伴。GitHub Copilot的workspace功能,正是这样一位能理解整个项目上下文的AI助手。但要让这位伙伴真正发…

作者头像 李华
网站建设 2026/5/20 14:03:01

从约束到布线:Power Network Synthesis (PNS) 实战指南与IR Drop优化

1. Power Network Synthesis (PNS) 基础概念 想象一下城市供电系统:发电厂相当于芯片的电源焊盘(Power Pad),高压输电线路如同顶层金属层的电源网格(PG Mesh),而小区变电站就像标准单元的电源轨…

作者头像 李华