栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

STM32 CUBEMX系列——flash的使用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STM32 CUBEMX系列——flash的使用

STM32 CUBEMX系列——flash的使用

文章目录
  • STM32 CUBEMX系列——flash的使用
  • 1、flash地址
  • 2、创建flash.c和flash.h
  • 3、添加代码
  • 4、函数使用
  • 总结


1、flash地址

查阅使用芯片的flash地址范围

2、创建flash.c和flash.h

创建flash.c放于src文件夹,flash.h放于inc文件夹。然后在工程中添加。



找到flash.c后点击add,编译工程后即可。

3、添加代码

在flash.h中添加如下代码:

#ifndef __flash_H
#define __flash_H
#ifdef __cplusplus
 extern "C" {
#endif


#include "main.h"
#include "stm32f1xx_hal_flash.h"

#define start_addr 0x0803A800  //flash 开始地址
#define flash_length 150
	 

extern  uint8_t flash_write(uint8_t addr ,uint32_t *data,uint16_t length);//flash写
extern  uint32_t flash_read(uint8_t addr);//flash读 
static  uint32_t GetPage(uint32_t addr);//flash 读
extern	uint16_t FLASH_ReadHalfWord(uint8_t addr) ;
extern	uint32_t FLASH_ReadWord(uint8_t addr);
extern  uint32_t mix32_t(uint8_t a1, uint8_t a2,uint8_t a3,uint8_t a4);//flash写


#ifdef __cplusplus
}
#endif
#endif 

在flash.c中添加如下函数

uint8_t flash_write(uint8_t addr ,uint32_t data[],uint16_t length)//flash д
{

	
	
		uint32_t flash_mem[flash_length];
		if((addr+length)<=length)
		{
			for(uint8_t i=addr;i<(addr+length);i++)
			{
			  flash_mem[i] = data[i-addr];
			}		
		}
		
		
		FLASH_EraseInitTypeDef my_flash;
		HAL_FLASH_Unlock(); 
		my_flash.Banks = FLASH_BANK_1;
		my_flash.TypeErase = FLASH_TYPEERASE_PAGES;  
		my_flash.PageAddress =start_addr ;  	
		my_flash.NbPages = 1;                      
		uint32_t PageError = 0;                    
		while(HAL_OK!=HAL_FLASHEx_Erase(&my_flash, &PageError)){}; 				
		__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);
			
		for(uint8_t i=0x00;i
			uint8_t mark=3;
			while((flash_mem[i]!=flash_read(i))&&mark)
			{
				HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, start_addr+i*4, flash_mem[i]); 
				//My_Printf(&huart1,"%d-%d  ",i,flash_read(i));
				mark--;
			}
			
		}
		HAL_FLASH_Lock(); 
	
		return NULL;	

}

以上为flash写入函数
flash读出函数如下

uint32_t flash_read(uint8_t addr)
{
	return	*(__IO uint32_t*)( start_addr+(addr)*4 );
}
4、函数使用

可在需要的地方调用函数即可。

总结

flash的使用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928316.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号