arm_joint_sensor/devices/flash.c

40 lines
990 B
C

#include "flash.h"
#include "main.h"
#include <stdint.h>
#include <string.h>
#include <stdio.h>
#define FLASH_BASE_ADDR 0x08000000UL
// #define FLASH_PAGE_SIZE 0x800 // 2KB
#define FLASH_PAGE_NUM 128
#define FLASH_USER_PAGE (FLASH_PAGE_NUM - 1)
#define FLASH_USER_ADDR (FLASH_BASE_ADDR + FLASH_USER_PAGE * FLASH_PAGE_SIZE)
FlashConfig_t currentCfg;
FlashConfig_t *Flash_ReadConfig(void)
{
memcpy(&currentCfg, (void *)FLASH_USER_ADDR, sizeof(currentCfg));
return &currentCfg;
}
void Flash_WriteConfig(FlashConfig_t *cfg)
{
HAL_FLASH_Unlock();
FLASH_EraseInitTypeDef erase;
uint32_t page_error;
erase.TypeErase = FLASH_TYPEERASE_PAGES;
erase.Page = FLASH_USER_PAGE;
erase.NbPages = 1;
HAL_FLASHEx_Erase(&erase, &page_error);
uint32_t addr = FLASH_USER_ADDR;
uint64_t data = ((uint64_t)cfg->crc << 16) | cfg->can_id;
HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, addr, data);
HAL_FLASH_Lock();
}