实现FLASH跨页写入,不采用先读取后写入的方式,提高内存利用率,从任意FLASH地址写入指定长度的 通用处理函数框架

1、需求背景

FLASH跨页写入是一个常见的需求,特别是在需要向FLASH中写入任意长度数据,且这些数据可能跨越多个FLASH页时。由于FLASH的写入通常是以页为单位的擦除操作,因此跨页写入时需要特别注意边界条件。

下面是一个简单的示例,以STM32F103为例,展示了如何编写一个通用函数,用于向STM32F103的FLASH中写入任意长度的数据,且不采用先读取后写入的方式。这个函数使用字(32位)作为编程单位。

首先,你需要知道STM32F103的FLASH页大小。通常,每一页的大小是1KB(即1024字节)或者2KB 或者16KB,但请查阅你的具体型号的数据手册以确认。此外,STM32F103的FLASH编程是以半字(16位)或字(32位)为单位的,这里我们使用字编程。

#include "stm32f1xx_hal.h"  
  
// 假设STM32F103的FLASH页大小为1024字节(1KB)  
#define FLASH_PAGE_SIZE       (1024U)  
  
// 检查给定的地址是否在FLASH范围内  
HAL_StatusTypeDef IsAddressInFlash(uint32_t address) {  
    if ((address >= FLASH_START_ADDRESS) && (address < (FLASH_START_ADDRESS + FLASH_END_ADDRESS))) {  
        return HAL_OK;  
    } else {  
        return HAL_ERROR

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万能之王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值