普洱市住房和城乡建设局网站,wordpress导航横着,建设工程招聘网,谷歌浏览器搜索入口时间记录#xff1a;2024/2/19
一、STM32F103C8T6FLASH介绍
#xff08;1#xff09;flash大小64K#xff0c;地址0x08000000-0x08010000 #xff08;2#xff09;此芯片内存大小属于中容量产品#xff0c;根据数据手册可知中容量产品一个扇区的大小为1K #xff08…时间记录2024/2/19
一、STM32F103C8T6FLASH介绍
1flash大小64K地址0x08000000-0x08010000 2此芯片内存大小属于中容量产品根据数据手册可知中容量产品一个扇区的大小为1K 3我们在这里需要知道的点就是可以将数据保存在flash中实现掉电保存
二、读写FLASH操作步骤
1写数据操作一种方法 1.解除写保护向KEYR寄存器写入KEY1-0x45670123和KEY2-0xCDEF89AB进行解锁按照顺序写入否则会锁定FLASH_CR寄存器直到下一次复位 2.清除状态位可选确认未在执行任何FLASH操作 3.清除扇区 4.写入半字16位数据 5.清除状态位可选 6.锁定写保护 RDP_Key-0x000000A5 2读数据操作一种方法 直接读取地址数据即可
三、代码示例基于标准库实现
1头文件
#ifndef __MYFLASH_H__
#define __MYFLASH_H__
#include stm32f10x.h#define SECTORSIZE 1024 //一个扇区大小定义
#define MAXADDR 0x08010000 //最大地址
#define LASTSECTORADDR 0x0800FC00 //最后一个扇区的地址void vFlashWriteData(u32 addr,u8 *data,int data_len);//写数据按照半字写入一个扇区最多写入512个数据
void vFlashReadData(u32 addr,u8 *data,int data_len);//读数据#endif
2源文件
#include my_flash.hvoid vFlashWriteData(u32 addr,u8 *data,int data_len)
{if(addr 0x08000000 || addr MAXADDR) return; //地址校验u32 sectorBaseAddr addr/1024*1024;FLASH_Unlock();//解锁FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR|FLASH_FLAG_OPTERR);//清除标志位可不要FLASH_ErasePage(sectorBaseAddr);//擦除页数据页的首地址最后一页for(int i0;idata_len;i){FLASH_ProgramHalfWord(addr2*i,data[i]);}FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR|FLASH_FLAG_OPTERR);//清除标志位可不要FLASH_Lock();//上锁
}void vFlashReadData(u32 addr,u8 *data,int data_len)
{if(addr 0x08000000 || addr MAXADDR) return; //地址校验for(int i0;idata_len;i){data[i](u8)(*(vu16*)(addri*2));}
}