Skip to main content
RPalm.1
Visitor II
November 5, 2020
Question

HAL_FLASH_Program() returns Write protection error

  • November 5, 2020
  • 0 replies
  • 515 views

Hi all,

I'm using STM32f405 and i want to program FLASH using STM32CubeIDE.

My testing code is the following:

	uint32_t base = 0x080E0000;		//FLASH SECTOR 11
	uint64_t data= 0x55;
	FLASH_EraseInitTypeDef EraseInitStruct;
	uint32_t Error;
 
	EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS;
	EraseInitStruct.Sector = FLASH_SECTOR_11;
	EraseInitStruct.NbSectors = 1;
 
	HAL_FLASH_Unlock();
	HAL_FLASHEx_Erase(&EraseInitStruct, &Error);
	HAL_FLASH_Lock();	
 
	HAL_FLASH_Unlock();
	HAL_FLASH_Program(TYPEPROGRAM_DOUBLEWORD, base, data);
	HAL_FLASH_Lock();

In HAL_FLASH_Program

HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data)
{
 HAL_StatusTypeDef status = HAL_ERROR;
 
 /* Process Locked */
 __HAL_LOCK(&pFlash);
 
 /* Check the parameters */
 assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));
 
 /* Wait for last operation to be completed */
 status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);
 
 if(status == HAL_OK)
 {
 if(TypeProgram == FLASH_TYPEPROGRAM_BYTE)
 {
 /*Program byte (8-bit) at a specified address.*/
 FLASH_Program_Byte(Address, (uint8_t) Data);
 }
 else if(TypeProgram == FLASH_TYPEPROGRAM_HALFWORD)
 {
 /*Program halfword (16-bit) at a specified address.*/
 FLASH_Program_HalfWord(Address, (uint16_t) Data);
 }
 else if(TypeProgram == FLASH_TYPEPROGRAM_WORD)
 {
 /*Program word (32-bit) at a specified address.*/
 FLASH_Program_Word(Address, (uint32_t) Data);
 }
 else
 {
 /*Program double word (64-bit) at a specified address.*/
 FLASH_Program_DoubleWord(Address, Data);
 }
 
 /* Wait for last operation to be completed */
 status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);
 
 /* If the program operation is completed, disable the PG Bit */
 FLASH->CR &= (~FLASH_CR_PG); 
 }

the second istance of FLASH_WaitForLastOperation at line 38 generates error code 10 ->Write protection error.

I forgot something?

This topic has been closed for replies.