1.实验目的
把数据写入flash中,通过读出的数据与写入的数据进行比对,来判断是否写入成功!
重要实现代码
res = StmFlash_Erase(FLASH_USER_START_ADDR,FLASH_USER_END_ADDR);
res = StmFlash_Program(FLASH_USER_START_ADDR,wr_buff,250);
StmFalsh_Read(FLASH_USER_START_ADDR,rd_buff,250);
if(strncmp((char *)wr_buff,(char *)rd_buff,250) != 0) //读写错误
{
LCD_ShowStr(50,50,16,"STM32 FLASH ReadWrite ERROR!!!",1,LCD_COLOR_RED,NULL);
while(1);
}
核心代码
res = StmFlash_Erase(FLASH_USER_START_ADDR,FLASH_USER_END_ADDR);
res = StmFlash_Program(FLASH_USER_START_ADDR,wr_buff,250);
/*******************************************************************************
* Function Name : StmFlash_Program
* Description : STM32F7的FLASH编程
* Input : WriteAddr: 编程起始地址
wr_buff: 待编程的数据
Len:编程长度
* Output : None
* Return : None
* Note : None
*******************************************************************************/
uint32_t StmFlash_Program(uint32_t WriteAddr, uint8_t *wr_buff, uint32_t Len)
{
uint8_t err = FLASH_SUCESS;
uint32_t Address,EndAddress;
Address = WriteAddr;
EndAddress = WriteAddr+Len;
//解锁
HAL_FLASH_Unlock();
while (Address < EndAddress)
{
if(HAL_FLASH_Program(FLASH_TYPEPROGRAM_BYTE, Address, *wr_buff) == HAL_OK) //字节编程
{
Address++;
wr_buff++;
}
else
{
err = FLASH_ERROR;
break;
}
}
HAL_FLASH_Lock(); //FALSH上锁
return err;
}
/**
* @brief Program byte, halfword, word or double word at a specified address
* @param TypeProgram: Indicate the way to program at a specified address.
* This parameter can be a value of @ref FLASH_Type_Program
* @param Address: specifies the address to be programmed.
* @param Data: specifies the data to be programmed
*
* @retval HAL_StatusTypeDef HAL Status
*/
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)
{
switch(TypeProgram)
{
case FLASH_TYPEPROGRAM_BYTE :
{
/*Program byte (8-bit) at a specified address.*/
FLASH_Program_Byte(Address, (uint8_t) Data);
break;
}
case FLASH_TYPEPROGRAM_HALFWORD :
{
/*Program halfword (16-bit) at a specified address.*/
FLASH_Program_HalfWord(Address, (uint16_t) Data);
break;
}
case FLASH_TYPEPROGRAM_WORD :
{
/*Program word (32-bit) at a specified address.*/
FLASH_Program_Word(Address, (uint32_t) Data);
break;
}
case FLASH_TYPEPROGRAM_DOUBLEWORD :
{
/*Program double word (64-bit) at a specified address.*/
FLASH_Program_DoubleWord(Address, Data);
break;
}
default :
break;
}
/* 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);
}
/* Process Unlocked */
__HAL_UNLOCK(&pFlash);
return status;
}

9640

被折叠的 条评论
为什么被折叠?



