11.flash数据存储实验

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值