60 lines
1.5 KiB
C
60 lines
1.5 KiB
C
void Flash(uint32_t address, uint32_t data, uint16_t datasize, char operation){
|
|
if(operation == 1){
|
|
HAL_FLASH_Unlock();
|
|
|
|
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
|
|
EraseInitStruct.PageAddress = address;
|
|
EraseInitStruct.NbPages = 1U;
|
|
|
|
if (HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError) != HAL_OK){
|
|
Error_Handler();
|
|
}
|
|
|
|
addressNew = address;
|
|
|
|
//while (Address < SECTOR_63){
|
|
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addressNew, data) == HAL_OK){
|
|
addressNew = addressNew + 4;
|
|
}
|
|
else
|
|
{
|
|
Error_Handler();
|
|
}
|
|
//}
|
|
|
|
HAL_FLASH_Lock();
|
|
|
|
DATA_READ = *(__IO uint32_t*)addressNew;
|
|
|
|
if(DATA_READ == data){
|
|
GPIOA->BSRR = DE_Pin;
|
|
char msg[9] = {"Flash OK"};
|
|
HAL_UART_Transmit(&huart2, (uint8_t *)&msg, sizeof(msg), 0xFFFF);
|
|
GPIOA->BRR = DE_Pin;
|
|
}
|
|
else{
|
|
GPIOA->BSRR = DE_Pin;
|
|
uint8_t msg[datasize];
|
|
for(int i = 0; i<sizeof(msg); i++){
|
|
msg[i] = 0;
|
|
}
|
|
msg[0] = DATA_READ >> 24;
|
|
msg[1] = DATA_READ >> 16;
|
|
msg[2] = DATA_READ >> 8;
|
|
msg[3] = DATA_READ;
|
|
HAL_UART_Transmit(&huart2, (uint8_t *)&msg, sizeof(msg), 0xFFFF);
|
|
GPIOA->BRR = DE_Pin;
|
|
}
|
|
}
|
|
else{
|
|
DATA_READ = *(__IO uint32_t*)address;
|
|
GPIOA->BSRR = DE_Pin;
|
|
uint8_t msg[4] = {0,0,0,0};
|
|
msg[0] = DATA_READ >> 24;
|
|
msg[1] = DATA_READ >> 16;
|
|
msg[2] = DATA_READ >> 8;
|
|
msg[3] = DATA_READ;
|
|
HAL_UART_Transmit(&huart2, (uint8_t *)&msg, sizeof(msg), 0xFFFF);
|
|
GPIOA->BRR = DE_Pin;
|
|
}
|
|
} |