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

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

3天内不再提示

STM32L4系列内部FLASH双字编程示例

茶话MCU 来源:ST MCU 信息交流 2020-05-14 09:11 次阅读

有人使用STM32L476芯片开发产品,他想在内部FLASH空间特定位置写些数据,发现总是失败,并补充说之前使用STM32F1系列、STM32L1系列却没有类似问题。

其实,针对STM32L4的内部FLASH编程,跟STM32F1/L1系列是不同的,其中STM32F1的内部FLASH编程仅支持半字编程,STM32L1的内部FLASH编程主要支持字编程或半页编程。而STM32L4系列的内部FLASH编程所支持的则是64位双字编程或以32个双字为单位的快速行编程。

对于少量的零星数据编程自然会选择64位双字编程模式,即每次改写Flash内容必须以64位为单位。硬件还针对这64位数据做了8位的ECC,我们用户看不到而已。下面简单介绍下64位双字编程过程。

在基于64位双字编程时,如果只是就字节或半字进行编程则会产生错误;或者尽管使用双字编程却没有遵循双字地址对齐【8字节对齐】时也会产生错误。

这里我使用ARM MDK V2.9开发环境,借助于STM32L476_NUCELO开发板演示一下对内部FLASH某个位置写几个64位数据的实现过程【写之前相关区域已经被擦除过了】。

我通过IDE将内部FLASH最后的0x1000地址空间预留出来用于填写些数据,即我将内部FLASH分成2块,将最后的0x1000的FLASH空间划了出来。如下图所示:【这里的芯片是STM32L476RGT6,下面只演示写三个64位数据。】

我将特定数据区定义在内部FLASH空间0x80ff000开始的地方。

#define Address_Const (0x80FF000)

另外还定义了一个64位地址指针和一个64位数据数组。

相关执行参考代码如下:

代码是基于STM32Cube库来组织的,连续写了三个64位的数据到指定的FLASH空间。其中主要涉及到一个FLASH编程函数HAL_FLASH_Program(),它有三个变量,分别是编程模式,待编程的FLASH地址以及用于编程的数据。

代码比较简单,对欲编程的地址做检查确认,然后进行FLASH编程开锁,清除可能存在的各种挂起状态标志,进行双字编程,之后对FLASH寄存器访问进行上锁。

现在基于上面的代码看看运行结果:

我们可以看到在指定的FLASH地址空间写三个64位数据。

在上面介绍64位双字编程规则时,可能有人会问,如果我遵循了8字节地址对齐,待写的数据也不是字节或半字,而是一个字会怎么样呢?那你也得凑成2个字来写,方能完成一次写操作。

比方基于上面测试代码,仅仅将每次待写的数据改为32位字,最后结果便是高位字被填0了。就像下面这样:

好,关于STM32L4系列内部FLASH双字编程模式就介绍到这里。整个过程应该说不难,只要注意到各个细节就好。

趁此再抛砖引玉似地做些提醒:STM32系列众多,各个系列的内部FLASH编程模式以及页或扇区的容量规划、地址安排往往各有差异,在FLASH编程时千万别跟着惯性或感觉走。还有,不同的编程模式往往对芯片的电源电压有不同的要求,这点也要特别特别特别注意。

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

    关注

    88

    文章

    3440

    浏览量

    92382
  • 函数
    +关注

    关注

    3

    文章

    3866

    浏览量

    61308
  • STM32L4
    +关注

    关注

    1

    文章

    42

    浏览量

    9261

原文标题:STM32L4系列内部FLASH双字编程示例

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32WB和STM32L4/L4+的区别和优劣势是什么?

    STM32WB 和 STM32L4 / L4+的区别,和优劣势
    发表于 04-26 08:07

    STM32L4使用内部参考电压时是否也需要打开VREFINT通道?

    STM32L4使用内部参考电压时是否也需要打开VREFINT通道
    发表于 04-17 06:23

    stm32l4是否能支持ndis和ecm?

    各位大神,请教下stm32l4是否能支持ndis和ecm
    发表于 04-11 08:11

    stm32l4如何下载到usb host的固件库?

    各位大神,请教下stm32l4如何下载到usb host的固件库,还想请教下stm32有没有开源的rndis和ecm代码
    发表于 04-11 07:19

    请问STM32L4如何利用STM32CubeMX实现EXTI控制LED?

    STM32L4利用STM32CubeMX如何实现EXTI控制LED?
    发表于 04-09 08:07

    使用FlyMcu软件给STM32L4烧录程序经常失败是为什么?

    使用FlyMcu软件给STM32L4烧录程序?经常失败?显示\"写入出错在0KB,进度0%,耗时828毫秒\"。请问这是为什么呢?
    发表于 03-26 06:50

    STM32L4和电容传感器无法通信的原因?

    我在 CY8CMBR3110 电容式传感器上工作,我尝试在 stm32CubeIDE 中编写代码,但是 STM32L4 和电容传感器无法通信。 我想,我在代码中做错了什么。 在 STM32CubeIDE 中对这个传感器进行过
    发表于 01-25 06:05

    STM32L4STM32L4+和STM32G4系列微控制器上的专利代码读取保护

    电子发烧友网站提供《STM32L4STM32L4+和STM32G4系列微控制器上的专利代码读取保护.pdf》资料免费下载
    发表于 09-19 16:16 0次下载
    <b class='flag-5'>STM32L4</b>、<b class='flag-5'>STM32</b>L4+和<b class='flag-5'>STM32</b>G4<b class='flag-5'>系列</b>微控制器上的专利代码读取保护

    STM32L4触摸感应控制模块(TSC)介绍

    上提供的经验证且稳健的表面电荷转移采集原理 STM32F0、STM32F3、STM32L0和STM32L4系列 •支持多达24个电容感应通道
    发表于 09-12 07:04

    STM32L4闪存(FLASH)及读写保护介绍

    给STMicroelectronics使用,并包含引导加载程序。 •1 KB(128个双字)OTP(一次性可编程)字节,用于用户数据。这个 OTP区域仅在银行1中可用。OTP数据不能擦除,可以 只写过一次。如果只有一位为0,则无法写入整个
    发表于 09-11 07:20

    STM32L4产品的低功耗特性及应用

    包含了• ST低功耗MCU产品介绍• STM32L4 低功耗产品特性• STM32L 低功耗模式对比• 如何评估功耗,如何根据应用选择• 低功耗MCU ULPBench• 低功耗市场应用
    发表于 09-07 08:12

    STM32L4 STM32L4+和STM32G4系列微控制器上的专利代码读取保护

    基于Arm®(a)内核的STM32L4STM32L4+和STM32G4系列微控制器采用多种机制,可对全存储器或特定段进行读写保护。读保护用于保护代码免受外部访问的转储(SW IP保护
    发表于 09-07 07:45

    STM32L4系统架构及移植介绍

    STM32L0轻松过渡到STM32L4: •VLCD被VBAT取代(VLCD现在与PC3多路复用) •PH9/PH10被VSS/VDD取代 •引脚73和75交换(VDD/VDDUSB) •引脚功能映射接近100%兼容通用功能
    发表于 09-07 07:38

    STM32L4的工程,stm32l4xx_hal_conf.h改名了?

    我是基于STM32L4芯片建的工程,STUDIO自动把stm32l4xx_hal_conf.h改名为stm32l4xx_hal_conf_bak.h了,好像改的时候给了个提示,因为我点的太快了,没
    发表于 05-11 11:17

    有在STM32L4上用easyflash的么?

    我看armink老大的文档里说V4.0 新模式暂时无法使用在 STM32L4 片内 Flash 上,L4 只能使用 V3.0 版本或者 V4.0 的 EF_ENV_USING_LEGACY_MODE
    发表于 05-11 11:06