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

《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中文论坛活动

即日起开启活动话题入口,之后的活动统一都放在此处,欢迎大家的加入!


最新内容

相似分享

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