0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32G071从standby模式退出后的SRAM数据保留

STM32单片机 来源:STM32单片机 2023-12-20 09:31 次阅读

01问题的描述

某客户使用 STM32G071 芯片从 standby 模式下唤醒,想要 SRAM 的数据在退出 standby模式后得以保持。根据手册的描述,配置了相应的比特位,但是发现数据仍然保持不了。

02问题的复现

根据客户的描述,以及 STM32G071 的最新版参考手册 RM0444 发现,在 standby 模式下,可以通过设置 PWR_CR3 的 RRS 比特位去控制 SRAM 的保持能力,相应的 API 接口函数为HAL_PWREx_EnableSRAMRetention()、HAL_PWREx_DisableSRAMRetention() ;

63553056-9ed7-11ee-8b88-92fbcf53809c.png

基于例程

......STM32CubeRepositorySTM32Cube_FW_G0_V1.6.1ProjectsNUCLEOG071RBExamplesPWRPWR_STANDBYEWARM

以及相应的 NUCLEO-G071 开发板,修改部分代码,根据 LED4 的闪烁频率去判断从 Standby 模式退出后,SARM 里面的数据是否能够保持住。

63647b1a-9ed7-11ee-8b88-92fbcf53809c.png

03问题的排查

基于上述的配置,简单的测试了一下,发现即使 HAL_PWREx_EnableSRAMRetention() 使能了,但是测试代码中的 sram_magic_word 的值没有保持住,显示的是 LED4 的闪烁频率为1s。

究竟是什么原因导致了数据没有保持住呢,再次查看参考手册,确定了只要使能 PWR_CR3的 RRS 比特位即能保持住,对比了 PWR_CR3 的 RRS 比特位的说明,在 standby 模式下,SRAM 的数据可以保持,但是当退出 standby 模式呢?

63687e7c-9ed7-11ee-8b88-92fbcf53809c.png

由于测试的是从 standby 模式退出,standby 模式退出后会进行 reset,该复位导致了 SRAM的数据被覆盖或丢失?通过查阅资料,发现是编译器的配置导致的。以 IAR 为例,查看其默认的脚本文件 icf;

6379c9b6-9ed7-11ee-8b88-92fbcf53809c.png

也就是说,在程序执行的时候,会将 readwrite 的数据进行自动的初始化,而具有.noint 性质的块则不初始化,所以这儿还需要将 SRAM 里面要保持的数据放置在.noinit 的 section 中。

04问题的解决

知道原因之后,相应的措施也就明朗了,修改 icf 文件如下:

638ed84c-9ed7-11ee-8b88-92fbcf53809c.png

并将想要保持的 SRAM 中的数据前面加关键字__no_init :

63a72500-9ed7-11ee-8b88-92fbcf53809c.png

再次下载程序,发现 LED4 的闪烁频率跟随 RRS 比特位值的不同而不同,符合预期。另外在实现的过程中,需要说明两点的是:

1、修改 icf 后,可以通过 map 文件查看,应如下文所示,如果发现“P2”mismatch 之类的提示,检查下该 section 中的变量,如上面提到的 sram_magic_word,可能被编译器优化了,在map 中也搜索不到该名称,则可以在实际的代码中使用该变量进行一些运算或判断,然后重新编译即可解决。

63aed7d2-9ed7-11ee-8b88-92fbcf53809c.png

2、当调试器连着 IAR 调试界面运行的时候,无论 RRS 的值设置为 0 或 1,G071 从standby 模式下退出后,SRAM 中的内容均可以保持,如果需要验证 RRS 的值的影响,则建议断开调试器,让程序 free-running ,可以通过比如 LED 的闪烁频率去判断结果。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    447

    文章

    47838

    浏览量

    409254
  • 接口
    +关注

    关注

    33

    文章

    7653

    浏览量

    148565
  • sram
    +关注

    关注

    6

    文章

    742

    浏览量

    113918
  • STM32
    +关注

    关注

    2240

    文章

    10675

    浏览量

    348872
  • 代码
    +关注

    关注

    30

    文章

    4557

    浏览量

    66835

原文标题:实战经验 | STM32G071 从 standby 模式退出后的 SRAM 数据保留

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问STM32G071如何通过DWT实现us精准定时?

    STM32G071怎样通过DWT实现us精准定时?,各位大佬有实现的吗?
    发表于 03-20 06:59

    STM32G071G070在未烧写程序时,MCU上电其PB7脚输出的是个高电平,为什么?

    STM32G071G070在未烧写程序时,MCU上电其PB7脚输出的是个高电平,因为此脚接的是一个蜂鸣器,MCU上电一直在响,烧写程序蜂鸣器工作逻辑正常,PB7脚并不是jlink或SW的调试引脚(调试引脚MCU硬件内部有上拉
    发表于 03-29 08:13

    嵌入式系统的核心器件:STM32G071开发事项

    STM32G071的PD0,PD2作为外部中断使用,外部接10K上拉电阻拉到3.3V。外部设备被触发电平为低电平,正常无信号。【问题】在以上背景下,按道理外部设备正常时(未触发中断),IO口输入电平应该是
    发表于 12-06 09:39

    WakeUpTimer定时器产生的中断将STM32STOP低功耗模式下唤醒

    STM32低功耗运行模式之一,该模式下CPU会停止工作,但RAM中的数据仍然保留。待中断或事件触发
    发表于 08-12 06:54

    STM32G071x8/STM32G071xB的数据手册

    STM32G071x8,STM32G071xB】本文档是关于主流产品线32位Arm Cortex-M0+单片机STM32G071x8,STM32G071xB的
    发表于 11-25 06:43

    时钟小部件是不是不适用于STM32G071应用程序模板呢

    你好 !对于我的 TouchGFX 设计器,数字小部件和模拟时钟小部件不适用于 STM32G071 应用程序模板(至少在模拟器中,我无法与板确认)。当我说它不起作用时,我的意思是它显示得很好,但值(或动画)永远不会更新。小部件被冻结为原始值。
    发表于 12-02 11:02

    没有VREF+ 输入的STM32G071设备的参考是什么?

    在我的 NUCLEO-G071RB 板上,我能够使用 CubeMX 设置 VREFBUF 模式以使用 VREF+ 输入引脚、内部 2.5V 或 2.048V 作为 ADC 和 DAC 的参考。但是我
    发表于 12-05 06:57

    如何为stm32g071板开发一种Keil环境呢?

    我正在为 stm32g071 核板使用 Keil 开发环境。我应该选择哪种设备?stm32g071rbIx 还是 stm32g071rbTx? 我如何决定哪一个适合我?
    发表于 01-04 08:11

    STM32G071 NUCLEO使用flash >30%时位图渲染不正确怎么解决?

    的项目,选择 STM32G071 演示加载一些额外的图像到项目(拆分的 .gif 文件发出的一系列 40 png 总大小:150kb连接板生成代码和闪存目标结果:GUI 的一些图像丢失(黑线),例如
    发表于 01-09 07:32

    如何用STM32G071输出比较计算1KHz频率?

    我有 NUCLEO-G071RB 板。如何用STM32G071输出比较计算1KHz频率?我的系统时钟频率是 64 MHz 。 --
    发表于 01-10 07:36

    如何连接STM32G071进行USB Type-C PD充电?

    和 D- 以允许 5V 负载以更高的功率(DCP)充电?我们的计划是自主 USB PD 充电 IC 切换到 STM32G071
    发表于 01-10 07:45

    如何通过TouchGFX Designer 4.15.0下载的STM32G071 NUCLEO DEMO移植到NUCLEO-F446RE?

    我正在尝试将通过 TouchGFX Designer 4.15.0 下载的 STM32G071 NUCLEO DEMO 移植到 NUCLEO-F446RE。为了在 X-NUCLEO-GFX01M1
    发表于 01-11 08:35

    STM32G071GB HSE引脚可用吗?

    我计划在 STM32G071GB(UFQFPN28 - 28 引脚封装)上使用 HSE第 41 页上的数据STM32G071 确实明确说明 HSE 引脚是否可用于小型封装(28 引脚)数据
    发表于 02-08 07:34

    MCU退出standby模式时历史数据会丢失吗?

    MCU退出standby模式时历史数据会丢失吗?唤醒=重置?S32K3是否有专门的待机模式数据
    发表于 05-10 06:06

    STM32G071最小系统板原理图与PCb源文件

    STM32G071最小系统板原理图与PCb源文件
    发表于 09-26 14:20 0次下载