为我找到STM32F767IGT6的FLASH读写擦除封装的函数
时间: 2024-03-24 07:40:06 浏览: 54
STM32 对FLASH的读写程序
4星 · 用户满意度95%
好的,以下是STM32F767IGT6的FLASH读写擦除封装的函数示例:
```c
#include "stm32f7xx_hal.h"
// 定义FLASH起始地址
#define FLASH_START_ADDRESS 0x08000000
/**
* @brief FLASH擦除函数
* @param[in] PageAddr 要擦除的页地址
* @return 操作是否成功
* @retval HAL_OK 成功
* @retval HAL_ERROR 失败
*/
HAL_StatusTypeDef FLASH_ErasePage(uint32_t PageAddr)
{
FLASH_EraseInitTypeDef erase_init;
uint32_t page_error = 0;
HAL_StatusTypeDef status = HAL_OK;
// 初始化FLASH擦除结构体
erase_init.TypeErase = FLASH_TYPEERASE_PAGES;
erase_init.PageAddress = PageAddr;
erase_init.NbPages = 1;
// 解锁FLASH并擦除指定页
HAL_FLASH_Unlock();
status = HAL_FLASHEx_Erase(&erase_init, &page_error);
HAL_FLASH_Lock();
return status;
}
/**
* @brief FLASH写入函数
* @param[in] address 要写入的地址
* @param[in] data 要写入的数据
* @param[in] size 要写入的数据大小(单位:字节)
* @return 操作是否成功
* @retval HAL_OK 成功
* @retval HAL_ERROR 失败
*/
HAL_StatusTypeDef FLASH_Write(uint32_t address, uint8_t* data, uint32_t size)
{
HAL_StatusTypeDef status = HAL_OK;
uint32_t i;
// 解锁FLASH并写入数据
HAL_FLASH_Unlock();
for (i = 0; i < size; i += 2)
{
status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, address + i, *(uint16_t*)(data + i));
if (status != HAL_OK)
{
break;
}
}
HAL_FLASH_Lock();
return status;
}
/**
* @brief FLASH读取函数
* @param[in] address 要读取的地址
* @param[out] data 读取到的数据
* @param[in] size 要读取的数据大小(单位:字节)
* @return 操作是否成功
* @retval HAL_OK 成功
* @retval HAL_ERROR 失败
*/
HAL_StatusTypeDef FLASH_Read(uint32_t address, uint8_t* data, uint32_t size)
{
uint32_t i;
// 读取数据
for (i = 0; i < size; i++)
{
*(data + i) = *(uint8_t*)(FLASH_START_ADDRESS + address + i);
}
return HAL_OK;
}
```
这是一个简单的封装示例,其中包含了FLASH擦除、写入和读取三个函数。你可以根据自己的需求进行修改和扩展。
阅读全文