这里就stm32l053芯片的flash编程做个简单演示并做些提醒,以供有需要的人参考。
一般来讲,flash编程主要包括擦除、代码编程、option字修改操作,关于option编程下面不做介绍。stm32l0芯片的擦除除了支持全片擦除外,再就是支持页擦除,每页的大小为128bytes,即32个字。编程可以按字或按半页【64bytes】编程。单页擦除、单字编程以及半页编程的时间都是一样的,大概3.2ms左右,这点在芯片数据手册上也明确出来了。
这里提醒两点。第一点,在做擦除或编程时,要注意地址对齐的问题,页擦除时地址要128字节对齐,字编程注意4字节对齐,半页编程时注意64字节对齐。还有一点就是做半页编程时,半页编程的执行代码要放到ram里进行,这点手册也强调了。
下面演示字编程、页编程、页擦除的操作。这里我先以字编程模式写5个字,然后以半页编程模式对5个半页进行flash编程,并记录二者所花的时间,看看字编程时间跟半页编程的是否一致。另外,在完成5个半页编程之后,又进行了页擦除操作,擦除刚才已编程的5个半页中的1页,即最后应只剩下3个半页的内容【注:对于stm32l0系列芯片,内部flash被擦除后内容为全0】。
下面代码截图是基于stm32cube库来组织的,主要涉及到字编程、半页编程、页擦除三个操作,对应着绿色下划线的3个库函数。
其中,半页编程的执行代码需配置到ram里去运行。另外,period1和period2分别来存放写5个字和5个半页的编程时间,并放在指定的flash位置。编译运行后我们可以看到如下结果:
上面截图是经过运行后芯片内部的部分flash空间的内容。5个红色方框围住的数据乃5个字编程后的结果,蓝色方框内的数据乃5次半页编程后的结果,但最终只看到3个半页的编程内容,那是因为后面两个半页的内容经页擦除操作后而消失了。
用来统计编程时间的定时器的计数频率为1mhz,显然period1和period2基本是相等的,将它们再除以5后所得编程时间都是3.3ms的样子。显而易见,进行批量代码编程时采用半页编程更高效。
前面说了做半页编程时其执行代码需放到ram运行,该代码在stm32cube库的这个文件stm32l0xx_hal_flash_ramfunc.c里面。实现该操作对于不同的ide在处理上稍有差异。这里基于arm mdk进行简单配置,划分点ram出来给它用。
关于stm32l0系列flash编程的演示就介绍到这里,愿能帮到有需之人以节省些时间和精力。
豪威集团发布用于SVS和RVC的最高级汽车图像传感器OX01J
2020年上半年,这家日系半导体企业交出了优秀的答卷
小米正式开启高端之路 不再走性价比之路
华为Mate10首曝光:麒麟970+全面屏 3D感应镜头神加持
lm3886封装及参数介绍
STM32L0芯片FLASH编程简单演示
三点看清乐视手机全金属外壳天线性能有没有吹牛逼
NEC Energy Solutions公司瑞士部署了一个目前规模最大的电池储能系统
西班牙Orange联合华为成功完成了单波400G现网测试
ESD对电子设备的危害及防护
SIPC矿币的崛起之路探讨
银联宝新工艺新产品电源开关芯片U65113
苹果将花10亿美元收购英特尔智能手机调制解调器业务大部分股权
三星S8什么时候上市:也在学苹果取消3.5mm耳机孔?
鸿利智汇推出高光效植物光照LED系列产品
国芯思辰|基于RFID技术的智能电表设计可采用射频前端芯片GC1101
5G智慧医疗一直在进步中
为什么目前国内核心的光通信芯片及器件仍然严重依赖于进口?
iPhone8什么时候上市最新消息汇总:iPhone8命名iPhone X Edition?iPhone8这几大改变你知道吗?
HTC推出两款虚拟现实头戴设备,提升用户的产品体验