你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

《STM32U3线上课程》学习笔记+02 LUART使用以及指定变量地址

[复制链接]
EPTmachine 发布时间:2025-12-18 19:35

上一篇介绍使用RTC从STOP3模式唤醒MCU的一般流程,在STOP3模式下,无法进行调试,这时需要通过串口log的方式来获取MCU的运行状态。下面通过配置LPUART1通讯,并设置一个变量存储在STOP3模式下保持的内存区域,一个变量存储在STOP3模式下无法保持的内存区域,通过串口将两个变量的值发送到串口终端,查看两个变量的状态。

1、CubeMX参数设置

在上篇工程的基础上,添加LPUART1的设置如下:

CubeMX_LPUART1.png

2、添加变量并通过LPUART1输出

完成设置后,生成代码。在工程中添加以下代码为LPUART1传输数据的缓存区

#include "stdio.h"

char TXbuffer[16];
uint8_t length;
uint8_t i = 0;

STM32CubeIDE使用的工具链是gnu tools,在STM32U385RGTXQ_FLASH.ld中添加配置,可以指定存储区域,在代码中使用__attribute__((section("xxxx")))修饰变量,指定变量的存储地址。

STM32U385RGTXQ_FLASH.ld中添加以下设置,指定一个名为".LOST"的存储区域,其起始地址为0x20039000,大小为1K。

/* Memories definition */
MEMORY
{
/*  RAM     (xrw)    : ORIGIN = 0x20000000,   LENGTH = 192K */
/*  RAM2    (xrw)    : ORIGIN = 0x20030000,   LENGTH = 64K */
  RAM1    (xrw)    : ORIGIN = 0x20039000,   LENGTH = 1K
  RAM    (xrw)    : ORIGIN = 0x20030000,   LENGTH = 8K  
  FLASH    (rx)    : ORIGIN = 0x08000000,   LENGTH = 1024K

}

/* Sections */
SECTIONS
{
  .LOST :
  {
    *(RAM1)
  } >RAM1
}

在代码中,添加以下声明,可以指定lost_var存储到".LOST"的存储区域,在进入STOP3模式后,lost_var的变量值无法保持。

内存分区的RAM分区在STOP3下可以保持,添加一个变量retain_var可以保持其值不丢失。

uint16_t lost_var __attribute__((section(".LOST")));
uint16_t retain_var;

在while循环中添加如下代码实现两个变量的输出

/*Clear all wakeup source flags*/
__HAL_PWR_CLEAR_FLAG(PWR_WAKEUP_ALL_FLAG);

lost_var++;
retain_var++;
length = sprintf(TXbuffer, "%d,%d\r\n", lost_var, retain_var);

HAL_UART_Transmit(&hlpuart1, (uint8_t*)TXbuffer, length, 100);

/* Enter STOP 3 mode */
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERMODE_STOP3, PWR_STOPENTRY_WFI);

编译并下载到NUCLEO-U385RG-Q后,重新上电,可以在串口终端看到以下的输出。

LPUART1_output.png

收藏 评论0 发布时间:2025-12-18 19:35

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版