MR16/User/bsp/flash.c
2025-12-03 23:55:24 +08:00

57 lines
1.9 KiB
C

/* Includes ----------------------------------------------------------------- */
#include "bsp\flash.h"
#include "flash.h"
#include <main.h>
#include <string.h>
/* Private define ----------------------------------------------------------- */
/* Private macro ------------------------------------------------------------ */
/* Private typedef ---------------------------------------------------------- */
/* Private variables -------------------------------------------------------- */
/* Private function -------------------------------------------------------- */
/* Exported functions ------------------------------------------------------- */
void BSP_Flash_EraseSector(uint32_t sector) {
FLASH_EraseInitTypeDef flash_erase;
uint32_t sector_error;
#ifdef DEV_BOARD_C
if (sector > 0 && sector < 12) {
flash_erase.Sector = sector;
flash_erase.TypeErase = FLASH_TYPEERASE_PAGES;
flash_erase.VoltageRange = FLASH_VOLTAGE_RANGE_3;
flash_erase.NbSectors = 1;
#endif
#ifdef STM32F103x8
if (sector > 0 && sector < 12) {
flash_erase.TypeErase = FLASH_TYPEERASE_PAGES;
flash_erase.Banks = FLASH_BANK_1; // 单 bank 器件通常这样写
flash_erase.PageAddress = ADDR_FLASH_SECTOR(sector); // 要擦除的页地址
flash_erase.NbPages = 1;
#endif
HAL_FLASH_Unlock();
while (FLASH_WaitForLastOperation(50) != HAL_OK)
;
HAL_FLASHEx_Erase(&flash_erase, &sector_error);
HAL_FLASH_Lock();
}
}
void BSP_Flash_WriteBytes(uint32_t address, const uint8_t *buf, size_t len) {
HAL_FLASH_Unlock();
while (len > 0) {
while (FLASH_WaitForLastOperation(50) != HAL_OK)
;
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, address, *buf);
address++;
buf++;
len--;
}
HAL_FLASH_Lock();
}
void BSP_Flash_ReadBytes(uint32_t address, void *buf, size_t len) {
memcpy(buf, (void *)address, len);
}