STM32L0 系列 EEPROM 读写,程序卡死?

发布者:纯真年代最新更新时间:2022-12-08 来源: zhihu关键字:STM32L0  系列  EEPROM  读写  程序卡死 手机看文章 扫描二维码
随时随地手机看文章

前言

使用 STM32L051 和 STM32L071 替换 STM32 有一年多了,替换完成以后还根据自己产品的需求写了几篇记录博文:

STM32L0 系列产品都自带了 EEPROM ,使用保存数据起来特别方便,因为写 EEPROM 并不需要删除一篇扇区,可以直接在指定地址写入。

但是最近有某个产品反馈,有时候会莫名其妙的“死机”,这是最直观的现象:

如果在初次配置完成(配置需要对 EEPROM 进行读写)后上电没问题,那么就一直没问题,如果断电重启,有可能遇到问题,遇到问题也是可以靠多重启几次解决(上电会读取 EEPROM 的数据)。

这个问题花了一些时间,其实就是 EEPROM 的读写问题。

我更新了好多次可以看出来,EEPROM 不止出了一次的问题。

所以本文的目的就在于,把 STM32L0 系列 EEPROM 读写使用注意事项说明清楚,供大家参考!

一、写入地址问题

在STM32L0 系列读取 EEPROM 的时候,需要注意:

字节操作,传入合理范围内的任何地址参数都可以;

半字操作,地址需要 2 字节对齐,就是 2的倍数;

全字操作,地址需要 4 字节对齐,就是 4 的倍数;

这个在以前的测试文章《STM32L051测试 (四、Flash和EEPROM的读写)》中已经做过测试和总结。

二、写入时候容易死机问题

上面的地址写入问题,通过自己的测试可以很容的一发现,但是接下来的这个莫名其妙程序卡死的问题,花了好一阵子功夫。

2.1 问题的原因

这里我就不一步一步的说明我遇到的各种莫名其妙的程序卡死问题,当时虽然基本上猜测是 EEPROM 的写入有问题,因为读取直接取某个指针的值,速度快,也没有什么特别需要注意的,写 EEPROM 的时候需要时间,这个时间是必须等待的,所以基本上确定出问题就是在写入的时候。

虽然中间“优化”维护过程序好几次,但是莫名卡死的问题依然存在。。。。。

这里我直接说明最终原因,就是 在写入EEPROM 的时候,如果发生了串口中断,那么就很容易出问题。

这里非常感谢 ST 社区一篇文章:STM32L0擦写EEPROM,然后宕机了?

我在自己有限的范围搜索这个问题,有且只有这一篇文章真正的说到了电子上,给了极大的参考价值:

出问题之后,我并没有单步调试,因为我虽然知道写 EEPROM 的时候会出问题,但也发现不是每次都会出这个问题,而且问题不一定能够复现,对于这个问题,上文说到:

2.2 问题的解决

2.2.1 不同的 Bank

在上面推荐文章中,给了一个很好的解决办法:在有的芯片中,有 2 块NVM (non-volatile memory 非易失性存储器),分为 Bank1 和 Bank2 ,两个区域都有 Flash 与 EEPROM区域, 对 Bank1 的读写操作并不会影响对 Bank2 的读写操作,说直白点,就是 CPU 不用再挂起等待了。

那么我们我们可以做到使得对 EEPROM 的操作的地址区域 与 我们存放程序的 Flash 地址区域处于不同的 Bank 就可以。

那么这个怎么做到呢?首先,你得明白我们程序存放于 Flash 中一般都是从 0x0800 0000 开始存放,也就是 Bank1,除非你自己修改了偏移地址。

那么我们只要保证我们的 EEPROM 的读写地址为 Bank2 即可:

于是,在程序中,我简单做了修改:

那么有的小伙伴会说,如果我的程序特别大,超过了 Bank1 怎么办?

1、首先如果是使用的有2个Bank的芯片, Bank1有 64k 大小,一般来说程序足够了;

2、个人认为,对于中断程序来说,他们存在的位置一定是程序的前面,即便程序超过大小,存放在 Bank2 中的也是用户自己的一些程序,不可能回事中断响应程序。即便中断发生了,也是在 Bank1 中运行,无影响;

3、再者,即便不分 Bank ,我们可以屏蔽中断。下面我将介绍在没有两个 Bank 的芯片上的处理方式。

2.2.2 临界区的保护

临界区的保护,是不是特别熟悉了, 我们在讲 FreeRTOS 或者 RT-Thread 的时候都讲到过 临界区保护。

上面我们介绍了直接把 EEPROM 的操作地址与程序地址区分开的解决方式,但是对于大部分产品上我使用的 STM32L051C8 来说,没有两块 NVM ,那么只能是做临界区保护了。

查看自己的 STM32L0 系列芯片有没有两块 NVM, 可以通过 J-Flash 工具查看他们的内存情况:

那知道了原因,我们只要在程序有 EEPROM 写的位置加上临界区保护即可,比如:

如果使用裸机操作,我们可以直接在写 EEPROM 的时候屏蔽中断,使用下面2个函数:

如图:

虽然写需要花时间,但是该等还是得等。

因为我使用的串口通讯是收无线的报文,虽然在屏蔽中断的时候有一定的概率丢数据,但是偶尔丢数据是可以接收的,至少比写数据的时候发生中断程序卡死来得好。

而且,EEPROM 虽然写方便,也不建议频繁的写入,往往需要写的时候都是第一次设置或者特殊情况设置的时候才用到。

2.2.3 关键程序放到 RAM 中执行

除了上面 2 种比较简单的解决办法,还有一种。

在网上看到有提问者说过,官方曾有过建议,把关键程序 放到 RAM 中执行,避免冲突。

把程序放到 RAM 中执行,如果有时间,我会单独写一篇博文说明,这里只是提一下解决这种问题的可行办法。

三、官方文档

这个问题告诉我们,要想真正用好一个芯片不出问题,还是得了解好对应的芯片文档。

即便我们已经很熟悉同类型的 STM32F103 系列,使用 STM32CUbeMX 可以快速简单的上手类似系列的芯片产品,但是在有些细节问题的处理上还是容易存在问题,此时官方的文档应该是首要想到的参考文档。

那么文档资料哪里下载,在 ST 社区可以通过站内搜索,关于 STM32L0 系列(后缀 1 ,3在这里应该都可以)有关的文档:RM0377文档,关如下图:

在文档中有一整个章节单独介绍存储设备 Flash 和 EEPROM:

其实对于产品遇到的这些问题,文档里面其实有详细的说明以及解决方式,当然,即便是到现在,我也没有 详细的全部看完,因为知道了一些注意事项,还是偷懒,文档没看那么仔细= =!

但是这里比必须强调一次官方文档的重要性。

因为在网上我找了很久这个问题,在 ST 社区也找了很久,除了上面给出的链接那篇文章,再也没有第二篇 有问题也有解决办法的文章,那么这时候,我们就只能自己去啃官方文档了!

结语

一个简单的芯片,一个方便使用的 EEPROM ,前前后后出了这么多问题,也不得不感叹,细节问题还真是不能偷一点懒 = =!


关键字:STM32L0  系列  EEPROM  读写  程序卡死 引用地址:STM32L0 系列 EEPROM 读写,程序卡死?

上一篇:STM32控制的电子负载
下一篇:STM32实例-待机唤醒实验

推荐阅读最新更新时间:2024-11-12 10:41

外媒:三星预计S9和S9+今年出货4300万 高于S8系列去年销量
据国外媒体报道,消息人士透露三星Galaxy S9和S9+今年的出货目标是4300万,高于Galaxy S8和S8+去年的销量。 外媒:三星预计S9和S9+今年出货4300万 高于S8去年销量 不愿透露姓名的消息人士表示,三星已经定下了Galaxy S9和Galaxy S9+今年的出货量目标,其今年的出货量目标是4300万。 外媒在报道中还表示,三星已要求其本地的供应商按这一出货量目标,制定生产计划。 不过这一消息人士也表示,三星可能会根据市场状况,对Galaxy S9和Galaxy S9+今年的出货量目标进行调整。 三星Galaxy S9系列4300万的出货量目标,也在分析师的预期之中,此前有多位分析师,包
[手机便携]
【超低功耗系列一】STM32L 低功耗产品和模式
大家知道意法半导体STM32产品中有四个系列,其中一个很重要的系列是超低功耗系列,今天我们就来聊一下 STM32超低功耗系列 产品。 意法半导体的超低功耗系列有非常优秀的低功耗表现,在EEMBC(嵌入式微处理器基准测评协会)的一个测评排名中,STM32L4系列的功耗可谓首屈一指,那我们就来看一下STM32L系列为什么可以做到那么低的功耗以及是如何做到的。 这篇文章先来说一下STM32L低功耗系列有哪些产品以及不同产品中低功耗模式的对比,之后我们还会发表后续文章,感兴趣的朋友可以持续关注。 超低功耗模式中的不同产品系列 有M0+内核的STM32L0,有Cortex-M3内核的L1以及Cortex-M4内核的L4和L4+,其中L0
[单片机]
MCS-51系列基本型单片机
MCS是Intel公司生产的单片机的系列符号,例如,Intel公司的MCS-48、MCS-51、MCS-96系列单片机。MCS-51系列单片机是Intel公司在MCS-48系列的基础上于20世纪80年代初发展起来的,是最早进入我国并在我国得到广泛应用的单片机主流品种。      MCS-51系列单片机主要包括基本型产品8031/8051/8751(对应的低功耗型80C31/80C51/87C51)和增强型产品8032/805218752。虽然它们是8位的单片机,但是具有品种全、兼容性强、性能价格比高等特点,且软硬件应用设计资料丰富齐全,已为我国广大工程技术人员所熟悉和掌握。在20世纪80年代和90年代,MCS-51系列单片机
[单片机]
LabVIEW系列——合并错误(VI)的用法
Merge Errors.vi的功能:1、按顺序搜索错误输入1,2,3,以及错误数组输入中的错误,输出第一个错误。 2、如果没有错误,也就是错误状态都为FALSE(勾),按顺序搜索第一个警告,也就是返回第一个code不为零的警告。 3、如果既没有错误,也没有警告,输出错误输入1。
[测试测量]
大联大诠鼎集团推出Toshiba针对ADAS的产品系列
致力于亚太地区市场的领先半导体元器件分销商--- 大联大控股 宣布,其旗下诠鼎推出东芝(Toshiba)针对ADAS的产品系列。 先进驾驶辅助系统(Advanced Driver Assistance Systems,ADAS),是近年来各车厂积极发展的智慧车辆技术之一,运用单一或是多个摄影机位驾驶人提供车辆的工作情形与车外环境变化等相关资讯进行分析,且预先警告可能发生的危险状况,让驾驶人提早采取因应措施,避免交通意外发生。 Toshiba IC可提供驾驶以下的行车协助及警告: Lane Departure Warning:车道偏移侦测警告; Traffic Road Sign Recognition:交通标志的辨识
[汽车电子]
大联大诠鼎集团推出Toshiba针对ADAS的产品<font color='red'>系列</font>
优派携小黑VP2468与众系列闪耀2016 CHINA P&I
中国上海,2016年7月22日 第十八届中国(上海)国际摄影器材和数码影像展览会(CHINA P&I)于7月21日-24日在上海浦东新国际博览中心隆重举行。全球视讯科技领导品牌美国优派(ViewSonic)携优派小黑VP2468与VP系列众机型震撼亮相,让现场观众一睹 优派小黑 的傲人风采,现场体验 小黑 在显示和校色过程中的完美表现。优派VP显示器家族为高端摄影发烧友、平面设计、CG动画等专业行业用户提供最佳的色彩管理方案。此外,优派还带来了四款投影机集聚P&I盛会,它们分别是光舰系列(PJD5353LS、PJD6352)和基于激光技术的LS系列(LS810、LS820)满足专业人士的不同需求。 中国(上海)国际摄影器
[焦点新闻]
优派携小黑VP2468与众<font color='red'>系列</font>闪耀2016 CHINA P&I
Microchip 最新的 PIC32 系列采用 XLP 技术
电子网消息,Microchip(微芯)日前宣布,最新的 PIC32 单片机系列把 Microchip 的 eXtreme 低功耗(XLP)技术扩展应用到 32 位产品。现在的 PIC32MX 客户采用 PIC32MX1/2 XLP 能够轻松地以更低的功耗实现更高的性能,在便携式应用中既增强了功能又延长了电池使用寿命。现有客户采用PIC32MX1/2 XLP 系列,只需要很少的重新编程工作就能够进一步提高小引脚数器件的性能。  Microchip 的 MCU32 部副总裁 Rod Drake 表示,PIC32MX 系列产品非常适合采用 XLP 技术。该系列在可穿戴市场上应用的非常成功,有大量的软件和支持。客户将轻松获得这一最新扩
[半导体设计/制造]
科索3.5kW输出AC-DC电源单元“HFA/HCA系列”采用罗姆的EcoSiC™
全球知名半导体制造商罗姆生产的EcoSiC™产品——SiC MOSFET和SiC肖特基势垒二极管(以下简称“SBD”),被日本先进电源制造商COSEL CO., LTD. (以下简称“科索”)生产的三相电源用3.5kW输出AC-DC电源单元“HFA/HCA系列”采用。强制风冷型“HFA系列”和传导散热型“HCA系列”均搭载了罗姆的SiC MOSFET和SiC SBD,从而实现了最大94%的工作效率。“HCA系列”于2023年开始量产和销售,“HFA系列”于2024年开始量产和销售。 在工业设备领域,有各种需要处理大功率的应用(如MRI和CO2激光器等)。这些应用使用的是与家用单相电源不同的三相电源。科索的三相电源用AC-
[电源管理]
科索3.5kW输出AC-DC电源单元“HFA/HCA<font color='red'>系列</font>”采用罗姆的EcoSiC™
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved