/*
Library: STM32F40x Internal FLASH read/write
Written by: Mohamed Yaqoob (MYaqoobEmbedded YouTube Channel)
Last modified: 15/03/2019
Description:
MY_FLASH library implements the following basic functionalities
- Set sectos address
- Flash Sector Erase
- Flash Write
- Flash Read
* Copyright (C) 2019 - M. Yaqoob
This is a free software under the GNU license, you can redistribute it and/or modify it under the terms
of the GNU General Public Licenseversion 3 as published by the Free Software Foundation.
This software library is shared with puplic for educational purposes, without WARRANTY and Author is not liable for any damages caused directly
or indirectly by this software, read more about this on the GNU General Public License.
*/
#include "MY_FLASH.h"
//Private variables
//1. sector start address
static uint32_t MY_SectorAddrs;
static uint8_t MY_SectorNum;
//functions definitions
//1. Erase Sector
static void MY_FLASH_EraseSector(void)
{
HAL_FLASH_Unlock();
//Erase the required Flash sector
FLASH_Erase_Sector(MY_SectorNum, FLASH_VOLTAGE_RANGE_3);
HAL_FLASH_Lock();
}
//2. Set Sector Adress
void MY_FLASH_SetSectorAddrs(uint8_t sector, uint32_t addrs)
{
MY_SectorNum = sector;
MY_SectorAddrs = addrs;
}
//3. Write Flash
void MY_FLASH_WriteN(uint32_t idx, void *wrBuf, uint32_t Nsize, DataTypeDef dataType)
{
uint32_t flashAddress = MY_SectorAddrs + idx;
//Erase sector before write
MY_FLASH_EraseSector();
//Unlock Flash
HAL_FLASH_Unlock();
//Write to Flash
switch(dataType)
{
case DATA_TYPE_8:
for(uint32_t i=0; i<Nsize; i++)
{
HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, flashAddress , ((uint8_t *)wrBuf)[i]);
flashAddress++;
}
break;
case DATA_TYPE_16:
for(uint32_t i=0; i<Nsize; i++)
{
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, flashAddress , ((uint16_t *)wrBuf)[i]);
flashAddress+=2;
}
break;
case DATA_TYPE_32:
for(uint32_t i=0; i<Nsize; i++)
{
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, flashAddress , ((uint32_t *)wrBuf)[i]);
flashAddress+=4;
}
break;
}
//Lock the Flash space
HAL_FLASH_Lock();
}
//4. Read Flash
void MY_FLASH_ReadN(uint32_t idx, void *rdBuf, uint32_t Nsize, DataTypeDef dataType)
{
uint32_t flashAddress = MY_SectorAddrs + idx;
switch(dataType)
{
case DATA_TYPE_8:
for(uint32_t i=0; i<Nsize; i++)
{
*((uint8_t *)rdBuf + i) = *(uint8_t *)flashAddress;
flashAddress++;
}
break;
case DATA_TYPE_16:
for(uint32_t i=0; i<Nsize; i++)
{
*((uint16_t *)rdBuf + i) = *(uint16_t *)flashAddress;
flashAddress+=2;
}
break;
case DATA_TYPE_32:
for(uint32_t i=0; i<Nsize; i++)
{
*((uint32_t *)rdBuf + i) = *(uint32_t *)flashAddress;
flashAddress+=4;
}
break;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
STM32F40x微控制器上进行内部FLASH的读写操作: 1.设置扇区地址 (MY_FLASH_SetSectorAddrs): 功能:设置特定扇区的起始地址。 参数: sector:要设置的扇区号。 addrs:扇区的起始地址。 2. 扇区擦除 (MY_FLASH_EraseSector): 功能:擦除之前设置的扇区。 操作: 解锁FLASH。 使用FLASH_Erase_Sector函数擦除扇区。 锁定FLASH。 3. 写入FLASH (MY_FLASH_WriteN): 功能:向FLASH中写入数据。 参数: idx:起始偏移地址。 wrBuf:指向要写入数据的缓冲区。 Nsize:要写入的数据数量。 dataType:数据类型(DATA_TYPE_8、DATA_TYPE_16、DATA_TYPE_32)。 操作: 4. 擦除目标扇区。 解锁FLASH。 根据数据类型,循环写入数据。 锁定FLASH。 5.读取FLASH (MY_FLASH_ReadN): 功能:从FLASH中读取数据。 参数: idx:起始偏移地址。 rdBuf:指向存放读取数据的缓冲区。
资源推荐
资源详情
资源评论
收起资源包目录
Tutorial 30 - FLASH Memory.rar (2个子文件)
Tutorial 30 - FLASH Memory
MY_FLASH.h 1KB
MY_FLASH.c 3KB
共 2 条
- 1
资源评论
香菜配汤
- 粉丝: 508
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功