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编程时千万别跟着惯性或感觉走。还有,不同的编程模式往往对芯片的电源电压有不同的要求,这点也要特别特别特别注意。

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

    关注

    90

    文章

    3707

    浏览量

    96764
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66837
  • STM32L4
    +关注

    关注

    1

    文章

    42

    浏览量

    9989

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32L010的内部框图

    CW32L010系列产品是基于 eFlash 的单芯片低功耗微控制器,集成了主频高达 48MHz 的 ARM® Cortex®-M0+ 内核、高速嵌入式存储器(多至 64K 字节 FLASH 和多至
    发表于 11-21 06:40

    STM32C011开发(3)----Flash操作

    STM32C011 系列微控制器内置 Flash 存储器,支持程序存储与数据保存,具备页面擦除、双字写入、读写保护等功能。本文将简要介绍 STM32
    的头像 发表于 09-18 16:48 3628次阅读
    <b class='flag-5'>STM32</b>C011开发(3)----<b class='flag-5'>Flash</b>操作

    请问STM32内部Flash操作是不是优先级最高?

    STM32内部Flash操作是不是优先级最高?目前在内部Flash的单独一页存储了数据,发现在进行页擦除的时候正常工作的定时器中断无法进入
    发表于 08-13 07:03

    FLASH烧写/编程白皮书

    白皮书:如何烧写Flash——不同场景不同需求下的选择认识Flash NAND vs. NOR如何烧写/编程不同方案比较
    发表于 07-28 16:05 0次下载

    STM32F3系列STM32F4系列STM32L4系列STM32L4+系列Cortex-M4编程手册

    电子发烧友网站提供《STM32F3系列STM32F4系列STM32L4系列
    发表于 06-06 17:06 9次下载

    STM32F40xxx和STM32f41xx flash编程手册

    PM0081_STM32F40xxx and STM32F41xxx单片机编程手册
    发表于 06-06 17:02 4次下载

    手机APP远程控制,智能家居监测、智能控制系统(STM32L4、服务器、安卓源码)实例项目打包下载

    手机APP远程控制,智能家居监测、智能控制系统(STM32L4、服务器、安卓源码)实例项目打包,推荐下载!
    发表于 05-29 21:47

    手机APP远程控制,智能家居监测、智能控制系统(STM32L4、服务器、安卓源码)

    手机APP远程控制,智能家居监测、智能控制系统(STM32L4、服务器、安卓源码) 项目实例下载! 纯分享帖,需要者可点击附件免费获取完整资料~~~【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,删除内容!
    发表于 05-23 21:00

    昂科烧录器支持ST意法半导体的超低功耗微控制器STM32L4S5VIT

    芯片烧录领导者昂科技术近期宣布了其烧录软件的最新迭代,并公布了一系列新增兼容芯片型号。在此次更新中,意法半导体(ST)推出的超低功耗微控制器STM32L4S5VIT已被昂科通用编程器AP8000所
    的头像 发表于 05-08 16:08 636次阅读
    昂科烧录器支持ST意法半导体的超低功耗微控制器<b class='flag-5'>STM32L4</b>S5VIT

    请问STM32U3系列的定位是怎样的?

    领先的每毫瓦 Coremark分数117。这几乎是意法半导体之前 STM32U5系列效率的两倍,是STM32L4系列的五倍。
    发表于 04-25 07:05

    STM32L476 Flash擦除失败的原因?

    开发板MCU型号:STM32L476RG 同样的固件在开发板中flash读写擦除操作都没问题,但在产品中擦除函数返回成功,但flash中的数据其实并没有擦除。 这两款MCU在Flash
    发表于 04-23 08:26

    请问STM32U3系列的定位是怎样的?

    领先的每毫瓦 Coremark分数117。这几乎是意法半导体之前 STM32U5系列效率的两倍,是STM32L4系列的五倍。
    发表于 04-23 06:45

    cubeide的代码怎么编译到内部+外部FLASH里面去?

    我有一个项目,准备使用GUI和AI,准备使用STM32U5,但是编译出来的代码很多,STM32U5的内部FLASH不够用,准备使用OSPI扩展外部F
    发表于 03-07 07:48

    WTVxxxx系列语音芯片(一线&二线 单双字节)资料V1

    WTVxxxx系列语音芯片(一线&二线单双字节)资料V1
    发表于 03-06 08:27 0次下载

    AN-881: 通过LIN—协议4进行Flash/EE存储器编程

    电子发烧友网站提供《AN-881: 通过LIN—协议4进行Flash/EE存储器编程.pdf》资料免费下载
    发表于 01-14 16:12 0次下载
    AN-881: 通过LIN—协议<b class='flag-5'>4</b>进行<b class='flag-5'>Flash</b>/EE存储器<b class='flag-5'>编程</b>