STM3210XX读写Flash操作

  这个星期开始接触单片机基于STM32的编程,C语言只是在学校时用过,20多年过去了,重新捡起来。

  编程工具是Keil uVision5。

  这个星期完成了单片机之间的串口通讯,有些设置需要在机器断电的情况下保存,这时要将设置写入Flash,需要的时候再读取出来。经过一天的努力,测试成功了。

  实际的代码:

uint32_t ReadFromFlashOneWord(uint32_t Addr){
		//从Flash中读取一个字(半个字的读取)
	    uint32_t HData,LData;//定义高位、低位两个数据
		HData=*(__IO uint16_t*)Addr;
		LData=*(__IO uint16_t*)(Addr+2);
		return (HData<<16)+LData;
}

uint16_t ReadFromFlashHalfWord(uint32_t Addr){
	//读取32位字节数据后返回16位数据
	return *(__IO uint16_t*)Addr;
}

void ReadFromFlashMultipleWord(uint32_t StartAddr,uint16_t *ReadData,uint16_t Count){
		uint16_t i;
		for(i=0;i<Count;i++){
				ReadData[i]=ReadFromFlashHalfWord(StartAddr+i*2);
		}
}

void WriteToFlashOneWord(uint32_t StartAddr,uint32_t WriteData){
		//向Flash指定的地址写入一个字
		HAL_FLASH_Unlock();
		//擦除
		FLASH_EraseInitTypeDef EraseInitStrut;
		EraseInitStrut.TypeErase=FLASH_TYPEERASE_PAGES;
		EraseInitStrut.PageAddress=StartAddr;
		EraseInitStrut.NbPages=1;
		//设置页面错误
		uint32_t PageError=0;
		//擦除
		HAL_FLASHEx_Erase(&EraseInitStrut,&PageError);
		//写入Flash
		HAL_FLASH_Program(TYPEPROGRAM_WORD,StartAddr,WriteData);
		//锁定Flash
		HAL_FLASH_Lock();
}

  读写测试:

	  uint32_t TestData=0x12345678;
	  uint32_t TestAddr=0x0800F000;          		//写入Flash
	  WriteToFlashOneWord(TestAddr,TestData);
	  HAL_Delay (100);

	  //uint16_t OutData;
	  uint8_t HData1,HData2,LData1,LData2;
	
	  HData1= (uint8_t)(TestData>>24);
	  HData2= (uint8_t)(TestData>>16);
	  LData1= (uint8_t)(TestData>>8);
	  LData2=(uint8_t)TestData;
		
	  //OutData=ReadFromFlashHalfWord(TestAddr);
	  Send_Buffer[61]=HData1;
	  Send_Buffer[62]=HData2;
	  Send_Buffer[63]=LData1;
	  Send_Buffer[64]=LData2;
      HAL_UART_Transmit(&hlpuart1,Send_Buffer,70,10);
		

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值