STM32_Examples/STM_Flash.c
2021-07-01 14:12:44 +02:00

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;
}
}