47#define USER_DATA_OB_HALFWORD_BASE 8U
50#define USER_DATA_CR_OPTPG_Set ((uint32_t)0x00000010)
51#define USER_DATA_CR_OPTPG_Reset ((uint32_t)0xFFFFFFEF)
52#define USER_DATA_CR_OPTER_Set ((uint32_t)0x00000020)
53#define USER_DATA_CR_OPTER_Reset ((uint32_t)0xFFFFFFDF)
54#define USER_DATA_CR_STRT_Set ((uint32_t)0x00000040)
55#define USER_DATA_CR_LOCK_Set ((uint32_t)0x00000080)
56#define USER_DATA_FLASH_KEY1 ((uint32_t)0x45670123)
57#define USER_DATA_FLASH_KEY2 ((uint32_t)0xCDEF89AB)
89 while (FLASH_GetFlagStatus(FLASH_FLAG_BSY) != RESET) {
92 if (FLASH_GetFlagStatus(FLASH_FLAG_WRPRTERR) != RESET) {
93 FLASH_ClearFlag(FLASH_FLAG_WRPRTERR);
97 if (FLASH_GetFlagStatus(FLASH_FLAG_EOP) != RESET) {
98 FLASH_ClearFlag(FLASH_FLAG_EOP);
160 uint8_t data = (uint8_t)hw;
161 uint8_t inv = (uint8_t)(hw >> 8);
163 if (data == 0xFFU && inv == 0xFFU) {
166 if ((uint8_t)(data ^ inv) == 0xFFU) {
317 *addr = (uint16_t)data;
359 uint32_t *hold32 = (uint32_t *)hold;
392 for (i = 0; i < 8U; i++) {
441 if (FLASH_GetFlagStatus(FLASH_FLAG_BSY) != RESET) {
502 for (i = 0; i < len; i++) {
523 for (i = 0; i < len; i++) {
554 for (i = 0; i < len; i++) {
UserData_Status UserData_Write(uint8_t offset, const uint8_t *buf, uint8_t len)
uint8_t UserData_Capacity(void)
UserData_Status UserData_Commit(void)
uint8_t * UserData_Buffer(void)
static void UserData_LockFlash(void)
UserData_Status UserData_Init(void)
static void UserData_CacheFillErased(void)
static UserData_Status UserData_LoadFromFlash(void)
#define USER_DATA_CR_LOCK_Set
#define USER_DATA_FLASH_KEY2
static UserData_Status UserData_FlashWait(void)
UserData_Status UserData_Fill(uint8_t offset, uint8_t len, uint8_t value)
static void UserData_UnlockFlash(void)
UserData_Status UserData_Erase(void)
static UserData_Status UserData_VerifyHalfword(uint16_t hw)
uint8_t UserData_IsDirty(void)
#define USER_DATA_CR_OPTER_Set
static uint8_t s_user_cache[USER_DATA_CAPACITY]
UserData_Status UserData_ReadByte(uint8_t offset, uint8_t *value)
UserData_Status UserData_Read(uint8_t offset, uint8_t *buf, uint8_t len)
#define USER_DATA_CR_OPTER_Reset
#define USER_DATA_CR_OPTPG_Reset
static UserData_Status UserData_ProgramUserByte(volatile uint16_t *addr, uint8_t data)
#define USER_DATA_CR_STRT_Set
UserData_Status UserData_WriteByte(uint8_t offset, uint8_t value)
#define USER_DATA_FLASH_KEY1
#define USER_DATA_OB_HALFWORD_BASE
#define USER_DATA_CR_OPTPG_Set
const uint8_t * UserData_ConstBuffer(void)
UserData_Status UserData_ReadFlashPageRaw(uint8_t *page)
static UserData_Status UserData_ProgramHalfwordRaw(volatile uint16_t *addr, uint16_t value)
static UserData_Status UserData_CheckRange(uint8_t offset, uint8_t len)
#define USER_DATA_FLASH_PAGE_SIZE
#define USER_DATA_FLASH_BASE
#define USER_DATA_OFF_EXT_BASE
#define USER_DATA_CAPACITY