读写STM32内部flash读写代码

这篇博客分享了如何编写读写STM32内部FLASH的代码,强调了FLASH以16位为单位进行读写,并指出写入地址必须是偶数以避免错误。作者提到STM32FLASH编程手册中提及的CPU运行速度可能受写入和擦除操作影响,以及闪存的保护机制可能基于页大小。提供了不需要初始化的简单读写函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于老师的要求,所以写了一份读写STM32内部FLASH的代码,这样的话就可以把STM32里面没有用来保存代码段的部分用来存储数据了。

由于《stm32flash编程手册》是很久很久以前看的,现在也没心情去仔细看那份手册了。大概浏览了一下,只看到了STM32里面的flash是以16位为单位读写的。

为什么记住这个,因为之前想写一个字节老是出错,所以翻翻手册,果然看到不能写1个字节数据。而且还发现,flash写地址为奇数时也会出错。所以这份代码里面

写flash的地址只能是偶数。浏览过程中还发现,手册里面说写flash和擦除flash的时候会影响cpu的运行速度,没仔细看(真心不想看)。其他具体手册里面的资料的话没有了,

看有没有高手仔细看完,然后写个总结什么的。。。

而且flash的读写保护也没看清楚,好像这些保护都是针对页大小来保护的话。这样的话就可以只保护代码段,这些放数据段不用保护了,这样可以省下flash芯片,不错吧。

废话不多说,直接上代码。。

flash读写代码也不用初始化,拿来直接就用。哈哈。。。。。。。。。。



-------------------DataFlash.c----------------------------------

#include "DataFlash.h"




uint16_t Flash_Write_Without_check(uint32_t iAddress, uint8_t *buf, uint16_t iNumByteToWrite) {
    uint16_t i;
    volatile FLASH_Status FLASHStatus = FLASH_COMPLETE;
    i = 0;
    
//    FLASH_UnlockBank1();
    while((i < iNumByteToWrite) && (FLASHStatus == FLASH_COMPLETE))
    {
      FLASHStatus = FLASH_ProgramHalfWord(iAddress, *(uint16_t*)buf);
      i = i+2;
      iAddress = iAddress + 2;
      buf = buf + 2;
    }
    
    return iNumByteToWrite;
}
/**
  * @brief  Programs a half word at a specified Option Byte Data address.
  * @note   This function can be used for all STM32
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值