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

STM32芯片软复位导致SRAM2的值被擦除话题

1. 问题描述

客户在使用 STM32L433CCY6 开发过程中,出现软件复位后 SRAM2 里的值被擦除问题。

2. 问题确认

客户用同一版软件在两块板子上的表现还不一样,一块软件复位后 SRAM2 的值不会被擦除,另一块则会被擦除,并且确认被擦除的板子没有发生掉电复位。出现问题的板子只是在硬件上拿掉了一些 ESD 保护器件。
在这里插入图片描述

3. 问题分析

根据客户的反馈,建议客户列出两块板子硬件改动的详细对比表。客户反馈两块板子在硬件上唯一的区别是多增加了一个串口,ESD 保护器件还没被拿掉。后面建议硬件上直接拿掉串口,但测试后发现问题还是没有解决。后来又怀疑跟客户使用的编译器有关 ,因为有的编译器会在复位后将 RAM 区的非初始化变量数据清零。所以建议客户针对 IAR 或 Keil 尝试使用下面的方式定义变量:

IAR:
将不能初始化为零的变量放入特别的限定符:

比如__no_init int my_i, my_j;

Keil:
代码部分:
将不能初始化为零的变量放入特别的 section 对其他变量正常处理。在编译时加入如下代码:

bss_threshold=0
#pragma arm section zidata = "non_init"
int my_i, my_j; 
#pragma arm section
int my_k = 0, my_l = 0;

链接脚本:

 加入特别的属性为 UNINIT 的 section
EXEC_2 0x20010000 UNINIT 0x8 {* (non_init) ;}

客户按照上面建议在代码上做相应修改后,发现 SRAM2 的值还是会被擦除。

4. 问题解决

后面查看 RM0394 发现下面一段关 SRAM2 的描述找到了思路:
在这里插入图片描述
通过参考手册可以发现,SRAM2 可以通过 Option byte 设置 SRAM2_RST 的值来确定是否允许在系统复位时被擦除。我们使用 STM32CubeProgrammer 连接上 STM32L433 的板子在User Configuration 页面也可以看到下面的配置:
在这里插入图片描述
根据上面的发现,让客户检查他们手上两块板子 SRAM2_RST 的值,看是否有差异。后来发现果然两块板子的 SRAM2_RST 的值不一样,没有出现 SRAM 擦除问题的板子 SRAM2_RST 值是配置为 1。
在这里插入图片描述
而出现擦除问题的板子 SRAM2_RST 的值是 0。
在这里插入图片描述
而且两块板进行交叉对比测试,确实是 SRAM2_RST 的值导致两块板子的行为表现不一样,跟两块板子的硬件差异无关。所以最后将出现问题的板子 SRAM2_RST 的值设置为 1,SRAM2 的值不会再被擦除,问题得到解决。

5. 小结

本篇笔记分析了 STM32L433CCY6 软复位导致 SRAM2 值被擦除问题。后面发现是SRAM2_RST 的值设置为 0 导致了该问题。客户反馈在产线烧录时有修改 option byte 的操作,可能是操作过程中 SRAM2_RST 的值被误修改导致出现了问题。同时我们也建议客户检查其它 option byte 的值是否也有被误修改,并建议客户在操作 option byte 或Flash 时,确保 MCU 供电稳定,烧录口接线良好。

参考文献

在这里插入图片描述

文档中所用到的工具及版本

STM32CubeProgrammer


本文档参考ST官方的《【应用笔记】LAT1349+STM32L4芯片软复位导致SRAM2的值被擦除话题》文档。
参考下载地址:https://download.csdn.net/download/u014319604/88969384

http://www.lryc.cn/news/339858.html

相关文章:

  • 【C++航海王:追寻罗杰的编程之路】异常——错误处理方式之一
  • 5.2 mybatis之autoMappingBehavior作用
  • 【算法一则】做算法学数据结构 - 简化路径 - 【栈】
  • OpenHarmony实战开发-如何使用Web预渲染实现功能介绍。
  • 三七互娱,oppo,快手25届暑期实习内推
  • InnoDB架构:内存篇
  • 8个Python高效数据分析的技巧
  • 暴力破解密码自动阻断
  • 【华为】Telnet实验配置
  • SAM功能改进VRP-SAM论文解读VRP-SAM: SAM with Visual Reference Prompt
  • MySQL truncate table 与 delete 清空表的区别和坑
  • Spring GA、PRE、SNAPSHOT 版本含义及区别
  • 一文看懂标准版和Pro版的区别
  • 腾讯云服务器价格表(腾讯云服务器报价表)
  • 试试把GPT和Suno结合起来用(附免费GPT)
  • SpringBoot修改菜品模块开发
  • Rust开发笔记 | 系统编程的守护神
  • dcoker+nginx解决前端本地开发跨域
  • 基于云开发和微信小程序的爱宠家系统
  • 光场相机建模与畸变校正改进方法
  • 面试算法-173-二叉树的直径
  • Python Typing模块
  • 【鸿蒙开发】饿了么页面练习
  • 鸿蒙开发学习笔记第一篇--TypeScript基础语法
  • Java基础知识总结(55)
  • python爬虫 - 爬取微博热搜数据
  • Pytorch-张量形状操作
  • k8s的service为什么不能ping通?——所有的service都不能ping通吗
  • [Linux] 权限控制命令 chmod、chown和chgrp
  • RNN知识体系构筑:详尽阐述其理论基础、技术架构及其在处理序列数据挑战中的创新应用