关于FALSH写数据乱码

2019-08-14 07:36发布

请问 就是我想给两个地址写数据 然后就会有一个乱码请问怎么回事

const u8 TEXT_Buffer[]={"STM32 FLASH TEST"};
const u8 TEXT_Buffer1[] = {"helloword"};

#define FLASH_SAVE_ADDR   0X08020000
#define FLASH_SAVE_ADDR1  0X08024000



        STMFLASH_Write(0X08004000,(u16*)TEXT_Buffer,sizeof(TEXT_Buffer));
        delay_ms(2000);
         STMFLASH_Write(0X08006000,(u16*)TEXT_Buffer1,sizeof(TEXT_Buffer1));
         delay_ms(2000);
         STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)datatemp,sizeof(datatemp));
         delay_ms(2000);
         STMFLASH_Read(FLASH_SAVE_ADDR1,(u16*)datatemp1,sizeof(datatemp1));
         while(1)
                        {
                                        LED1 =!LED1;
                                        delay_ms(500);
                                //TEST();       
                               
                                u2_printf("%s ",datatemp);
                                delay_ms(1000);
                                u2_printf("%s ",datatemp1);
                                //delay_ms(1000);
                        }               

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
STM32初学~zy
1楼-- · 2019-08-14 12:33
请问谁遇到过 第一次写可以写进去也没问题 第二次在写就会打印第一次乱码 第二次正常显示这是什么愿意啊  我两个地址就不在一个扇区啊
BJTT
2楼-- · 2019-08-14 12:44
写FLASH之前要擦除该页的数据
操作系统
3楼-- · 2019-08-14 14:41
FLASH是以块为单位 擦除的.以页为单位写的.读取时 随意.  块=N*页.
所以  FLASH操作 比想像中的 还是要复杂一点.有时候修改一个字节,要重新擦一大片.好心疼.
不过,还好.FLASH可以随便擦.一般寿命在10万次左右.
搞清楚这些 估计程序不难了.
super910906
4楼-- · 2019-08-14 15:56
4楼正解。
q247341184
5楼-- · 2019-08-14 16:03
 精彩回答 2  元偷偷看……
STM32初学~zy
6楼-- · 2019-08-14 17:55
q247341184 发表于 2017-8-16 15:10
有个疑问,是这样,我在看例程的时候我记得给的flash相关读写的函数里都包括了擦除了部分,也就是调用wri ...

#define FLASH_SAVE_ADDR   0X08020000
#define FLASH_SAVE_ADDR1  0X08024000
#define FLASH_SAVE_ADDR2  0X08028000
#define FLASH_SAVE_ADDR3  0X08034000
#define FLASH_SAVE_ADDR4  0X08010000

STMFLASH_Read(FLASH_SAVE_ADDR1,(u16*)cipsta,sizeof(cipsta));
                                delay_ms(1000);
                                STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)wifi,sizeof(wifi));
                                delay_ms(2000);
                                STMFLASH_Read(FLASH_SAVE_ADDR3,(u16*)cipopen,sizeof(cipopen));
                                delay_ms(1000);
                                STMFLASH_Read(FLASH_SAVE_ADDR2,(u16*)cipsto,sizeof(cipsto));后来我发现从低地址开始写 从高地址开始读是没有问题的的。我不知道这是为什么呢?用的是原子哥他们写的读写FLASH函数 人家写函数里已经对擦除和上锁解锁做了处理的了我觉得应该不是这个问题吧? 还有就是我想向FLASH_SAVE_ADDR比如这个地址里先写一个字符串然后在写按道理应该是覆盖掉原来的数据吧?不过也不是总能成功也不知道为什么

一周热门 更多>