Hello i have a problem with FLASH SR REG setting up flags when i try to write in flash, im using stm32g4 wit 521kbs flash and dual banks plss help.
- August 25, 2022
- 5 replies
- 1381 views
Here is my code : ignore the led toggles , the screenshot of the sr reg is below and highlited bits. Im guessing it has something to to with the arhitecture of the cpu.
Kind regards.
void flash_page_write(void)
{
uint32_t addrr_start=0x08001000;
uint32_t addrr_end=0x08001FFF;
static const uint64_t Data64_To_Prog[32] = {
0x0000000000000000, 0x1111111111111111, 0x2222222222222222, 0x3333333333333333,
0x4444444444444444, 0x5555555555555555, 0x6666666666666666, 0x7777777777777777,
0x8888888888888888, 0x9999999999999999, 0xAAAAAAAAAAAAAAAA, 0xBBBBBBBBBBBBBBBB,
0xCCCCCCCCCCCCCCCC, 0xDDDDDDDDDDDDDDDD, 0xEEEEEEEEEEEEEEEE, 0xFFFFFFFFFFFFFFFF,
0x0011001100110011, 0x2233223322332233, 0x4455445544554455, 0x6677667766776677,
0x8899889988998899, 0xAABBAABBAABBAABB, 0xCCDDCCDDCCDDCCDD, 0xEEFFEEFFEEFFEEFF,
0x2200220022002200, 0x3311331133113311, 0x6644664466446644, 0x7755775577557755,
0xAA88AA88AA88AA88, 0xBB99BB99BB99BB99, 0xEECCEECCEECCEECC, 0xFFDDFFDDFFDDFFDD};
uint32_t src_addr = (uint32_t)Data64_To_Prog;
HAL_FLASH_Unlock();
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);
FLASH_PageErase(2, 1);
while(addrr_start<addrr_end){
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_FAST, addrr_start, (uint64_t)src_addr) == HAL_OK ) {
LED_toggle(LED7);
addrr_start=addrr_start+(32*sizeof(uint64_t));
LED_toggle(LED7);
}
else {LED_toggle(LED1); HAL_Delay(1000); LED_toggle(LED1);}
}
// HAL_FLASH_Program(FLASH_TYPEPROGRAM_FAST, addrr_start, (uint64_t)src_addr);
HAL_FLASH_Lock();
}