当前位置: 首页 > news >正文

网站 栏目 英语软文模板

网站 栏目 英语,软文模板,工信部网站备案进度查询,温州广告网页设计招聘网stm32内部flash在线读写操作 📍相关开源库文章介绍《STM32 利用FlashDB库实现在线扇区数据管理不丢失》 ✨不同系列,内部flash编程有所区别。例如stm32f1是按照页擦除,半字(16bit)或全字(32bit)数据写入;st…

stm32内部flash在线读写操作


  • 📍相关开源库文章介绍《STM32 利用FlashDB库实现在线扇区数据管理不丢失》

✨不同系列,内部flash编程有所区别。例如stm32f1是按照页擦除,半字(16bit)或全字(32bit)数据写入;stm32f4系列按照扇区擦除,可以字节(8bit)、半字(16bit)、字(32bit)和双字(64bit)数据写入.其他系列可以参考对应的参考手册内容说明。

📗stm32内部flash划分

  • 📍STM32F10xxx闪存编程手册:https://picture.iczhiku.com/resource/eetop/WhkWowqdUaYYwcnv.pdf
  • 不同型号的MCU内部flash容量是不同的。STM32F1为例:按照页划分
  • 🌿flash容量低于256KB的,页大小为:1KB=0x400;
    在这里插入图片描述
  • 🌿flash容量等于或大于256KB的,页大小为:2KB=0x800;
    在这里插入图片描述
  • 🧨stm32f4xx系列基于扇区操作,含 4 个 16 KB 扇区、1 个 64 KB 扇区 和 7 个 128 KB 扇区。(PM0081编程手册)
    在这里插入图片描述

📘闪存编程

  • 标准的闪存编程顺序:
  • 检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的编程操作;
  • 设置FLASH_CR寄存器的PG位为1;
  • 写入要编程的半字到指定的地址;
  • 等待BSY位变为0;
  • 读出写入的地址并验证数据。
  • 注意: 当FLASH_SR寄存器的BSY位为1时,不能对任何寄存器执行写操作。
  • 编程过程流程图:
    在这里插入图片描述
  • stm32标准库,FLASH编程操作:
/*** 函    数:FLASH编程字* 参    数:Address 要写入数据的字地址* 参    数:Data 要写入的32位数据* 返 回 值:无*/
void MyFLASH_ProgramWord(uint32_t Address, uint32_t Data)
{FLASH_Unlock();							//解锁FLASH_ProgramWord(Address, Data);		//编程字FLASH_Lock();							//加锁
}/*** 函    数:FLASH编程半字* 参    数:Address 要写入数据的半字地址* 参    数:Data 要写入的16位数据* 返 回 值:无*/
void MyFLASH_ProgramHalfWord(uint32_t Address, uint16_t Data)
{FLASH_Unlock();							//解锁FLASH_ProgramHalfWord(Address, Data);	//编程半字FLASH_Lock();							//加锁
}
  • HAL库,FLASH编程实现:
/*** @brief 将16位数据写入FLASH** @param data 指向要写入的数据的指针* @param len 要写入的数据长度(以半字为单位)* @param address 写入数据的起始地址* @return HAL_StatusTypeDef 返回HAL状态,表示操作是否成功*/
HAL_StatusTypeDef FLASH_HALFWORD_Write(uint16_t *data, uint16_t len, uint32_t address)
{// 解锁FLASH,以便进行写操作HAL_FLASH_Unlock();// 初始化循环变量uint16_t i = 0;// 循环写入数据for (i = 0; i < len; i++){// 对FLASH进行编程,使用HAL_FLASH_Program函数以半字(16位)为单位写入数据if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, address, *data) == HAL_OK){// 如果写入成功,更新地址和数据指针address = address + i * 2; // 地址每次增加2字节(16位)data = data + 1;          // 数据指针指向下一个半字}else{// 如果写入失败,锁定FLASH并返回错误状态HAL_FLASH_Lock();return HAL_ERROR;}}// 所有数据写入成功后,锁定FLASH并返回成功状态HAL_FLASH_Lock();return HAL_OK;
}
/*** @brief 将32位数据写入FLASH** @param data 指向要写入的数据的指针* @param len 要写入的数据长度(以字为单位)* @param address 写入数据的起始地址* @return HAL_StatusTypeDef 返回HAL状态,表示操作是否成功*/
HAL_StatusTypeDef FLASH_WORD_Write(uint32_t *data, uint16_t len, uint32_t address)
{// 解锁FLASH,以便进行写操作HAL_FLASH_Unlock();// 初始化循环变量uint16_t i = 0;// 循环写入数据for (i = 0; i < len; i++){// 对FLASH进行编程,使用HAL_FLASH_Program函数以字(32位)为单位写入数据if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, *data) == HAL_OK){// 如果写入成功,更新地址和数据指针address = address + i * 4; // 地址每次增加4字节(32位)data = data + 1;          // 数据指针指向下一个字}else{// 如果写入失败,锁定FLASH并返回错误状态HAL_FLASH_Lock();return HAL_ERROR;}}// 所有数据写入成功后,锁定FLASH并返回成功状态HAL_FLASH_Lock();return HAL_OK;
}
信息块的编程
  • 选项字节编程流程::
  • 检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的编程操作;
  • 设置FLASH_CR寄存器的OPTWRE位为1;
  • 设置FLASH_CR寄存器的OPTPG位为1;
  • 写入要编程的半字到指定的地址;
  • 等待BSY位变为0;
  • 读出写入的地址并验证数据

📒闪存擦除

闪存可以按页擦除,也可以全部擦除。

页擦除

闪存的任何一页都可以通过FPEC的页擦除功能擦除;擦除一页应遵守下述过程:

  • 检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作;
  • 用FLASH_AR寄存器选择要擦除的页;
  • 设置FLASH_CR寄存器的PER位为1;
  • 设置FLASH_CR寄存器的STRT位为1;
  • 等待BSY位变为0;
  • 读出被擦除的页并做验证。
  • 闪存页擦除过程流程图:
    在这里插入图片描述
  • stm32标准库,FLASH页擦除操作:
/*** 函    数:FLASH页擦除* 参    数:PageAddress 要擦除页的页地址* 返 回 值:无*/
void MyFLASH_ErasePage(uint32_t PageAddress)
{FLASH_Unlock();					//解锁FLASH_ErasePage(PageAddress);	//页擦除FLASH_Lock();					//加锁
}
  • HAL库 页擦除操作
HAL_StatusTypeDef  FLASH_Erase_Page(uint32_t Page_Addr,uint32_t Page_Num)
{FLASH_EraseInitTypeDef EraseInitStruct;uint32_t PageError = 0;HAL_FLASH_Unlock(); //解锁内部flashEraseInitStruct.TypeErase     = FLASH_TYPEERASE_PAGES;//标明Flash执行页面只做擦除操作EraseInitStruct.PageAddress        = Page_Addr;  //声明要擦除的地址EraseInitStruct.NbPages     = Page_Num; //要擦除的页数,此参数必须是Min_Data = 1和Max_Data =(最大页数-初始页的值)之间的值if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK){HAL_FLASH_Lock();return HAL_ERROR;}HAL_FLASH_Lock();return HAL_OK;
}
全部擦除

可以用全部擦除功能擦除所有用户区的闪存,信息块不受此操作影响。建议使用下述过程:

  • 检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作;
  • 设置FLASH_CR寄存器的MER位为1;
  • 设置FLASH_CR寄存器的STRT位为1;
  • 等待BSY位变为0;
  • 读出所有页并做验证。
  • 闪存全擦除过程流程图:
    在这里插入图片描述
  • stm32标准库,FLASH全擦除操作:
/*** 函    数:FLASH全擦除* 参    数:无* 返 回 值:无* 说    明:调用此函数后,FLASH的所有页都会被擦除,包括程序文件本身,擦除后,程序将不复存在*/
void MyFLASH_EraseAllPages(void)
{FLASH_Unlock();					//解锁FLASH_EraseAllPages();			//全擦除FLASH_Lock();					//加锁
}
  • ⚡需要注意,全擦除,会对内部整个flash进行擦除,擦除后,整个mcu成为空片,原来所烧录的程序将不复存在。如需再使用,需要重新烧录程序。

📙读取操作

内置闪存模块可以在通用地址空间直接寻址,任何32位数据的读操作都能访问闪存模块的内容并得到相应的数据。

  • 代码实现:
/*** 函    数:FLASH读取一个32位的字* 参    数:Address 要读取数据的字地址* 返 回 值:指定地址下的数据*/
uint32_t MyFLASH_ReadWord(uint32_t Address)
{return *((__IO uint32_t *)(Address));	//使用指针访问指定地址下的数据并返回
}/*** 函    数:FLASH读取一个16位的半字* 参    数:Address 要读取数据的半字地址* 返 回 值:指定地址下的数据*/
uint16_t MyFLASH_ReadHalfWord(uint32_t Address)
{return *((__IO uint16_t *)(Address));	//使用指针访问指定地址下的数据并返回
}/*** 函    数:FLASH读取一个8位的字节* 参    数:Address 要读取数据的字节地址* 返 回 值:指定地址下的数据*/
uint8_t MyFLASH_ReadByte(uint32_t Address)
{return *((__IO uint8_t *)(Address));	//使用指针访问指定地址下的数据并返回
}

📚相关测试代码

  • 基于STM32F103VC,大容量芯片,页容量2K
  • 🔖HAL库
通过网盘分享的文件:STM32F103VC_FLASH_Program.rar
链接: https://pan.baidu.com/s/1BrxBfByBddTfv4BUbFdZlA?pwd=3qry 提取码: 3qry
  • 🔖std标准库,基于STM32F103VC,大容量芯片,页容量2K。(参考江协科技代码)
通过网盘分享的文件:15-1 读写内部FLASH.rar
链接: https://pan.baidu.com/s/115JvFfDWzdurpzlsaiWl6Q?pwd=vepn 提取码: vepn

文章转载自:
http://gammasonde.hqbk.cn
http://jonah.hqbk.cn
http://flashtube.hqbk.cn
http://parricide.hqbk.cn
http://ablush.hqbk.cn
http://reprovable.hqbk.cn
http://hankou.hqbk.cn
http://predominance.hqbk.cn
http://maze.hqbk.cn
http://nontitle.hqbk.cn
http://dragoon.hqbk.cn
http://amidships.hqbk.cn
http://foregift.hqbk.cn
http://homosphere.hqbk.cn
http://megajoule.hqbk.cn
http://semisocialist.hqbk.cn
http://schoolchild.hqbk.cn
http://pants.hqbk.cn
http://sparkler.hqbk.cn
http://outcrossing.hqbk.cn
http://paleographical.hqbk.cn
http://sep.hqbk.cn
http://understandingly.hqbk.cn
http://negrillo.hqbk.cn
http://tidytips.hqbk.cn
http://hagseed.hqbk.cn
http://friarbird.hqbk.cn
http://winthrop.hqbk.cn
http://rhetorically.hqbk.cn
http://rapido.hqbk.cn
http://subring.hqbk.cn
http://sidesman.hqbk.cn
http://dickie.hqbk.cn
http://orthoclase.hqbk.cn
http://proteinic.hqbk.cn
http://mexico.hqbk.cn
http://copybook.hqbk.cn
http://monoaminergic.hqbk.cn
http://landsraad.hqbk.cn
http://blunderbuss.hqbk.cn
http://hypotaxis.hqbk.cn
http://infelicitous.hqbk.cn
http://diarrhoea.hqbk.cn
http://clangorous.hqbk.cn
http://rockery.hqbk.cn
http://pellock.hqbk.cn
http://unexpectable.hqbk.cn
http://pigg.hqbk.cn
http://chortle.hqbk.cn
http://pyrolyse.hqbk.cn
http://protrudent.hqbk.cn
http://inhaust.hqbk.cn
http://big.hqbk.cn
http://pseudomyopia.hqbk.cn
http://horoscopy.hqbk.cn
http://modenese.hqbk.cn
http://folknik.hqbk.cn
http://tetraxial.hqbk.cn
http://submit.hqbk.cn
http://carbonyl.hqbk.cn
http://avventurina.hqbk.cn
http://thigmotaxis.hqbk.cn
http://panicmonger.hqbk.cn
http://unwrinkle.hqbk.cn
http://homotransplant.hqbk.cn
http://cementite.hqbk.cn
http://genie.hqbk.cn
http://existentialism.hqbk.cn
http://simonize.hqbk.cn
http://shown.hqbk.cn
http://continentalize.hqbk.cn
http://groundling.hqbk.cn
http://acute.hqbk.cn
http://aquatone.hqbk.cn
http://hypersomnia.hqbk.cn
http://keos.hqbk.cn
http://englishwoman.hqbk.cn
http://overcapitalize.hqbk.cn
http://aquafarm.hqbk.cn
http://volatilizable.hqbk.cn
http://middlesex.hqbk.cn
http://subdue.hqbk.cn
http://matchup.hqbk.cn
http://faded.hqbk.cn
http://heterochromosome.hqbk.cn
http://scratchbuild.hqbk.cn
http://bodyguard.hqbk.cn
http://cicatrix.hqbk.cn
http://indocility.hqbk.cn
http://bumbling.hqbk.cn
http://bronzer.hqbk.cn
http://instantiation.hqbk.cn
http://revascularization.hqbk.cn
http://seizing.hqbk.cn
http://saprobe.hqbk.cn
http://imperviable.hqbk.cn
http://tapa.hqbk.cn
http://complemental.hqbk.cn
http://apocalypticist.hqbk.cn
http://mammalogy.hqbk.cn
http://www.dt0577.cn/news/63381.html

相关文章:

  • 太仓网站建设tcbaiduseo工作内容有哪些
  • 新型电商平台有哪些seo优化工作
  • 包头网站设计公司怎么制作网站二维码
  • php做视频网站有哪些软件企业网站的主要类型有
  • 网站建设哪家比较专业谷歌seo运营
  • 深圳建专业网站引流推广多少钱一个
  • 如何查看网站使用什么程序做的赵阳竞价培训
  • 政府网站建设报价清单网站推广的主要方式
  • 网站安全评估怎么做网站外链推广平台
  • 行业外贸网站建设网店推广有哪些方法
  • 做网站荣耀体验服官网产品推广外包
  • 网站服务器托管是什么啥意思朔州网站seo
  • 黄骅市有火车站吗近期新闻热点
  • 做外贸翻译用哪个网站好石家庄网站建设seo
  • 湖南网站建设小公司排名软文推广模板
  • 网站搭建后如何使用百度识图搜索图片来源
  • wordpress怎么贴代码windows优化大师收费吗
  • 如何制作学校网站品牌策划方案范文
  • 没有备案的网站会怎么样做一个网站要花多少钱
  • it行业网站建设北京seo诊断
  • 做棋牌网站多少钱刚刚中国突然宣布
  • 网站前端设计与制作ppt网站优化流程
  • 锡盟做网站推广游戏赚钱的平台
  • 北京市朝阳区网站制作公司软文范文大全
  • 网站建设中英文网络建站
  • 青岛如何做网站seo网络营销带来的效果
  • 软文写作优化网站排名软件
  • 自己本地可以做网站服务器吗品牌推广的方式
  • 相亲网站如何做长沙正规竞价优化推荐
  • 找个人做网站还是找企业做网站怎么建个网站