1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
23
24
25
26
27
28
29
30
31
36
40
41
47
48
49
50
51
52
53
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/* ... */
#include "flash_if.h"
Includes
/* ... */
void FLASH_If_Init(void)
{
HAL_FLASH_Unlock();
}{ ... }
/* ... */
int8_t FLASH_If_Erase(uint32_t StartSector)
{
uint32_t FlashAddress;
FlashAddress = StartSector;
/* ... */
if (FlashAddress <= (uint32_t) USER_FLASH_LAST_PAGE_ADDRESS)
{
FLASH_EraseInitTypeDef FLASH_EraseInitStruct;
uint32_t sectornb = 0;
FLASH_EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;
FLASH_EraseInitStruct.Sector = FLASH_SECTOR_5;
FLASH_EraseInitStruct.NbSectors = 7;
FLASH_EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3;
if (HAL_FLASHEx_Erase(&FLASH_EraseInitStruct, §ornb) != HAL_OK)
return (1);
}if (FlashAddress <= (uint32_t) USER_FLASH_LAST_PAGE_ADDRESS) { ... }
else
{
return (1);
}else { ... }
return (0);
}{ ... }
/* ... */
uint32_t FLASH_If_Write(__IO uint32_t* FlashAddress, uint32_t* Data ,uint16_t DataLength)
{
uint32_t i = 0;
for (i = 0; (i < DataLength) && (*FlashAddress <= (USER_FLASH_END_ADDRESS-4)); i++)
{
/* ... */
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, *FlashAddress, *(uint32_t*)(Data+i)) == HAL_OK)
{
if (*(uint32_t*)*FlashAddress != *(uint32_t*)(Data+i))
{
return(2);
}if (*(uint32_t*)*FlashAddress != *(uint32_t*)(Data+i)) { ... }
*FlashAddress += 4;
}if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, *FlashAddress, *(uint32_t*)(Data+i)) == HAL_OK) { ... }
else
{
return (1);
}else { ... }
}for (i = 0; (i < DataLength) && (*FlashAddress <= (USER_FLASH_END_ADDRESS-4)); i++) { ... }
return (0);
}{ ... }