stm32篇--内置flash
来源:互联网 发布:html5 css3游戏源码 编辑:程序博客网 时间:2024/04/30 03:29
stm32自带内置flash,我对内置flash研究不多,曾试过隔2k内还是一块,不明原因。
stm32的FLASH分为主存储块和信息块。主存储块用于保存具体的程序代码和用户数据,信息块用于负责由stm32出厂是放置2KB的启动程序(Bootloader)和512B的用户配置信息区。
主存储块是以页为单位划分的,一页大小为1KB。范围为从地址0x08000000开始的128KB内。
对Flash 的写入操作要 “先擦除后写入”的原则;
stm32的内置flash 编程操作都是以页为单位写入的,而写入的操作必须要以16位半字宽度数据位单位,允许跨页写,写入非16位数据时将导致stm32内部总线错误。
进行内置flash读写时,必须要打开内部Rc振荡器。
下面是我用到的网络上的一个例子,改一下就可以用了:
#define FLASH_ADR 0x08008000 //要写入数据的地址
union union_temp16
{
unsigned int un_temp16;
unsigned char un_temp8[2]; // example 16: 0x0102 8:[0]2 [1]1
}my_unTemp16;
configStruct myConf =
{
"cmnet",
"\0",
"\0",
"201.2.2.2",
"9002",
{
"test123","\0","\0"
}
};
/******************************************************
flash 字符串写入
每次存入两个字节
*******************************************************/
void FlashWriteStr( u32 flash_add, u16 len, u8* data )
{
//char cp[12];
//u8 s = 0;
u16 byteN = 0;
FLASH_Unlock();
FLASH_ErasePage(flash_add);
//sprintf( cp, "len:%d", len);
//USART1_Puts(cp);
while( len )
{
my_unTemp16.un_temp8[0] = *(data+byteN);
my_unTemp16.un_temp8[1] = *(data+byteN+1);
FLASH_ProgramHalfWord( flash_add+byteN , my_unTemp16.un_temp16 );
//sprintf( cp, "bye:%d\r\n", s);
//USART1_Puts(cp);
if( 1==len )
{
//如果数据长度是奇数,为1的时候跳出
break;
}
else
{
byteN += 2;
len -= 2;
}
}
FLASH_Lock();
}
/******************************************************
flash 字符串读出到指定data中
地址与写入data地址同 读出的保存类型也必须一致
*******************************************************/
void FlashReadStr( u32 flash_add, u16 len, u8* data )
{
u16 byteN = 0;
while( len )
{
my_unTemp16.un_temp16 = *(vu16*)(flash_add+byteN);
if( 1==len )
{
*(data+byteN) = my_unTemp16.un_temp8[0];
break;
}
else
{
*(data+byteN) = my_unTemp16.un_temp8[0];
*(data+byteN+1) = my_unTemp16.un_temp8[1];
byteN += 2;
len -= 2;
}
}
}
void FlashInit(void)
{
u32 tmp=*(vu32*)(FLASH_ADR);
if(tmp==0xffffffff)
{
FlashWriteStr(FLASH_ADR, sizeof(myConf), (u8*)&myConf);
}
else
{
FlashReadStr(FLASH_ADR, sizeof(myConf), (u8*)&myConf);
}
}
- stm32篇--内置flash
- STM32 FLASH
- 【STM32】STM32之flash
- U盘GPIO文件系统映射-STM32利用内置FLASH做U盘
- STM32-FSMC-NOR FLASH
- stm32 flash 零星领悟
- STM32 flash操作
- stm32的flash编程
- stm32 Flash读写[库函数]
- STM32 Nor Flash DFU
- STM32 SPI Flash DFU
- STM32 FLASH模拟 EEPROM
- stm32 Flash读写[库函数]
- STM32的FLASH操作
- stm32 Flash读写[库函数]
- stm32 读写内部Flash
- STM32 Flash模拟E2prom
- STM32读写内部Flash
- c++23种设计模式之单例模式
- IOS中动画的实现:以及视图的移动、缩放和旋转
- 自制eclipse上的java编程助手软件
- ios学习的网址和视屏
- 怎样选择编程语言
- stm32篇--内置flash
- c++ 23种设计模式之组合模式
- unzip 到指定文件夹
- GDI和GDI+的区别和联系
- c++ 23种设计模式之建造者模式
- FusionCharts动态改变图形的类型和数据
- Quartz定时任务时间格式cronExpression设置
- Collections类汇总
- c++ 23种设计模式之桥接者模式