bsp_flash.c main.h struct_bsp_Flash_Pack uint32_t uint32_t FlashAddr FlashAddr = 0x08010000 读写Flash起始地址,跳过程序部分 bsp_ReadFlash bsp_WriteFlashOnePage struct struct_bsp_Flash_Pack struct struct_bsp_Flash_Pack bsp_Flash_Pack bsp_Flash_Pack ={0,0,0} bsp_ReadFlash_Pack bsp_WriteFlash_Pack uint32_t uint32_t bsp_WriteFlashOnePage (uint32_t *dat, uint32_t num) bsp_WriteFlashOnePage uint32_t * dat uint32_t num 写入一页Flash空间 *dat 要写入的数据 num 要写入的数量 返回0则成功 FlashAddr bsp_WriteFlash_Pack void void bsp_ReadFlash (uint32_t *dat, uint32_t num) bsp_ReadFlash uint32_t * dat uint32_t num 读取一页Flash空间 *dat 读取数据的缓冲区 num 读取数量 无返回 FlashAddr bsp_ReadFlash_Pack void void bsp_WriteFlash_Pack (void) bsp_WriteFlash_Pack void 将一包数据存入Flash 无返回 bsp_Flash_Pack bsp_WriteFlashOnePage void void bsp_ReadFlash_Pack (void) bsp_ReadFlash_Pack void 从Flash读取一包数据 无返回 bsp_Flash_Pack bsp_ReadFlash 写STM32的Flash库 /*---------------------------------------------------------------------------------------------------- # #Copyright(c)2022YuankangLiang(XerolySkinner) # #本软件按原样提供,无任何明示或暗示 #在任何情况下,作者都不承担任何损害赔偿责任 # #使用的许可声明: #1.不得歪曲本软件的来源,你不能声称你编写了原始软件. #2.免费授予以任何目的,前提是版权声明出现在所有副本中. #并且版权声明和许可声明同时出现. #3.你有使用,复制,修改,分发,和销售本软件的许可. #4.如果你在产品中使用,产品文档中的声明是赞赏的但不是必须的. #5.本通知不得从任何来源删除或更改. # #YuankangLiang(XerolySkinner) #E-mail:zabbcccbbaz@163.com #QQ:2715099320 #MobilePhone:13005636215 # #Allrightsreserved. */ #include"main.h" uint32_tFlashAddr=0x08010000; //---------------------------------------------------------------------------------------------------- #pragmapack(4) structstruct_bsp_Flash_Pack{ charVar0; shortVar1; intVar2; }bsp_Flash_Pack={0,0,0}; #pragmapack() //---------------------------------------------------------------------------------------------------- uint32_tbsp_WriteFlashOnePage(uint32_t*dat,uint32_tnum){ FLASH_EraseInitTypeDeff; uint32_tPageError=0;//错误号7 HAL_FLASH_Unlock();//解锁FLASH f.TypeErase=FLASH_TYPEERASE_PAGES;//Flash擦除 f.PageAddress=FlashAddr;//擦除地址(起始页) f.NbPages=1;//擦除1页 HAL_FLASHEx_Erase(&f,&PageError);//调用擦除函数 for(inti=0;i<num;i++) HAL_FLASH_Program(TYPEPROGRAM_WORD,FlashAddr+i*4,dat[i]);//对FLASH烧写 HAL_FLASH_Lock();//锁住FLASH returnPageError;} //---------------------------------------------------------------------------------------------------- voidbsp_ReadFlash(uint32_t*dat,uint32_tnum){//读入一串数据 for(inti=0;i<num;i++) dat[i]=*(__IOuint32_t*)(FlashAddr+i*4);} //---------------------------------------------------------------------------------------------------- voidbsp_WriteFlash_Pack(void){ bsp_WriteFlashOnePage((uint32_t*)(&bsp_Flash_Pack),sizeof(structstruct_bsp_Flash_Pack)); return;} //---------------------------------------------------------------------------------------------------- voidbsp_ReadFlash_Pack(void){ bsp_ReadFlash((uint32_t*)(&bsp_Flash_Pack),sizeof(structstruct_bsp_Flash_Pack)); return;}