当前位置: 首页 > news >正文

[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所有,任何人未经允许禁止转载。

http://www.jsqmd.com/news/851858/

相关文章:

  • 【Perplexity谣言识别权威指南】:20年AI安全专家亲授5大验证法,97%虚假信息3秒识破
  • 3分钟零配置搭建静态服务器:http-server新手完全指南
  • 别再被Modelsim SE 2019.2的LICENSE报错劝退!一个脚本搞定环境变量与网卡地址
  • AUTO-MAS终极指南:如何用智能脚本管理器彻底解放你的游戏时间
  • CD3E与CD3D靶点深度解析:分子机制、免疫缺陷病及TCE双抗的最新进展
  • 别再只会Word画图了!用Visio 2021画流程图,5分钟搞定论文和PPT里的专业图表
  • [STM32U3] 【STM32U385RG 测评】基础任务1、串口通迅
  • 如何用AI智能分层技术将单张插画转化为可编辑的PSD文件
  • 如何将B站缓存的m4s文件转换为MP4:m4s-converter技术解析与实践指南
  • DayZ单机模式终极指南:打造专属末日世界的完整教程
  • 在Ubuntu 22.04上搞定DreamPlace安装:绕过GLIBCXX和C++17编译器的那些坑
  • 通达信缠论插件ChanlunX:让复杂的技术分析变得简单直观
  • 别再傻等API了!用AsyncOpenAI和asyncio让你的Python程序提速3倍(附完整代码)
  • Spring AI 可视化编排实战:构建 LangGraph 风格的 YAML DSL 工作流引擎
  • 别再空谈DDD了!我用一个真实的客服协同单案例,带你落地领域驱动设计
  • ThinkPad E14 BIOS开机画面DIY指南:用官方工具安全替换LOGO(附PS制作GIF教程)
  • 告别SD卡!手把手教你用Petalinux为Zynq-7000配置eMMC+EXT4双分区启动(含常见错误排查)
  • 从零开始使用Taotoken在个人项目中集成大模型API
  • 从游戏地图到GIS系统:线性四叉树与莫顿码如何提升你的空间查询效率?
  • Squirrel-RIFE:AI视频补帧终极指南 - 3步让老旧视频秒变流畅大片
  • Spring Boot 3.x 集成 EasyExcel 3.3.2:从零构建高性能Excel数据网关
  • OrangePi RV2深度评测:200元价位单板计算机的性价比革命
  • 南京景晟昊建筑装饰工程:六合硅钙高晶板吊顶公司怎么联系 - LYL仔仔
  • 重庆债权债务纠纷律所靠谱清单:本土精品律所怎么选更省心 - 可口饭
  • 仓储会员店零售系统选型如何避免“越用越累”?科脉云帆给出三个答案
  • 3个步骤解锁AMD Ryzen隐藏性能:SMUDebugTool实战指南
  • 大道理的本质,从来都不是真理,而是社会规训;是用来约束大多数人的,是为了让这个系统能够稳定运行。 制定规则的人,从来不会被规则约束
  • 九州PTV-8698刷当贝桌面后,这6个隐藏功能设置让老旧盒子焕发第二春
  • LAN9252的EEPROM配置详解:从XML的ConfigData到芯片寄存器(SPI模式避坑指南)
  • C语言新手必看:手把手教你写二进制转十进制函数(附ZZULIOJ 1142题解)