首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

STM32 简单读写FLASH

对于任何一款微处理器来说,flash无疑是最重要的一个模块,这个模块承载了相关程序代码以及数据参数。一般情况下,我们在存储一些非易失数据的时候,常常会用到这部分。通常有现成的flash芯片可供我们使用,然而操作flash芯片虽然不是十分困难的事,但是新增flash芯片的成本无疑对一些有成本要求的项目会有限制。那么能够熟练操作flash就可以一定程度上减少成本支出和效率,当然考虑到各种问题,这也许不是最好的办法,但应该是一种设计思路。另外这种方案也要求一款芯片的flash可读可写。

对于stm32系列芯片来说falsh应该是一个十分方便操作的模块了

首先对于stm32 flash的认识,第一步还是需要从官方数据手册开始。

搜索官网,会看到好多相关flash手册,会有很多,找到如下编号和文件名称。

手册总共31页,如果阅读起来的话,应该不算困难,不懂的词可以直接搜索英文翻译。

关于FLAH组织结构的表格有好几张,限于篇幅原因,只将要操作的stm32f103vet6的表格截图,其他的可以用到的时候再看。stm32f103vet6属于high-density  device(高密度设备),所以只找对应这个的表格就可以。

表格中,前面几个是主内存地址,后面几个是寄存器,稍后我们操作的就是后面几个寄存器。

粗略阅读这部分,对我们最有用的大概率就是表格了。

再往下到了 读写嵌入式内存 ,这部分因为涉及到读写,所以应该是比较重要的部分。

阅读这章后,会发现最重要的其实是 如下几个点

key-values、Programming procedure、Flash memory Page Erase procedure、Flash memory Mass Erase procedure(常用的多是按页擦除)

以上程序流程图非常清晰的写明了flash编写的过程。比较重要的是,无论是擦除还是写入,第一步都是先对flah进行解锁操作,在写数据之前,必须要对flash进行擦除(当然如果说空数据的话是不用擦的)。

还有一点就是,整篇文章对于如何读flash却没有做详细的解释,但是我们都知道,手册中已经给出了flash区块的地址,那么假如我们按指针的方式直接取值的话,应该也是可以的。通过对网络资源的搜索,大部分对flash读的操作都是按指针取值的方式。

下面我们首先写出读flash的程序,非常简单几条语句

unsigned char Flash_ReadByte(unsigned int addr) ////addr为输入的地址值{return(*(unsigned short*)addr);}

这样,我们就可以通过读来验证之后flash数据的写入是否准确无误。

对于写的过程,通过表格我们知道,写之前要擦除,而且是按要擦的字节所在的页来进行擦除。由于目前我们只写入一个字节,所以就不考虑所在页的整体擦除了。另外一点需要再次注意的是无论是擦除还是写入,都需要进行解锁操作。

void Flash_ErasePage(unsigned int addr){FLASH_Unlock(); //解锁FLASH->CR |= 1FLASH->AR = addr; //Write into FAR an address within the page to erase FLASH->CR |=1while(FLASH->SR&0x01); //FLASH_SR_BSY= 1 ? FLASH->CR &= ~(1FLASH_Lock();//加锁}

以上就是擦除指定地址所在页的程序,程序一一对应了手册上的表格,其中对PER写0的操作是为了停止选取页擦除功能所以相当于将这个寄存器复位,不然后续写入的话会出现问题。

void Flash_WriteHalfWord(unsigned int addr,unsigned short data){ FLASH_Unlock();FLASH->CR |= 0x01;*(unsigned short *)addr = data; while(FLASH->SR&0x01); FLASH->CR& = ~0x01;FLASH_Lock();}

上述就是写操作的过程,我们可以在主函数里通过开始的读程序来验证写入的正确与否了。

对于上述擦写的操作,是通过寄存器实现的,如果采用库函数的话还会更简单

擦除三句话

FLASH_Unlock();FLASH_ErasePage(addr);FLASH_Lock();

写入三句话

FLASH_Unlock();FLASH_ProgramHalfWord(addr,data);FLASH_Lock();

以上就是stm32读写flash的简单操作,不足之处还望留言建议,谢谢

wx搜索并关注:嵌入式软硬件爱好者

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200417A0CGLH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券