OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5732|回复: 6

stm32F103C8芯片,用FLASH模拟EEPROM,擦写最后2KFLASH,但现在每次重新上电后都无显示

[复制链接]

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2015-6-27
在线时间
4 小时
发表于 2016-4-21 19:44:50 | 显示全部楼层 |阅读模式
1金钱
stm32F103C8芯片,用FLASH模拟EEPROM,擦写最后2KFLASH,但现在每次重新上电后都无显示,我想是自己把程序段也给擦除了吧;但一直不知道怎么解决;
我的要求是定义STM32F103C8的最后2KFLASH来做EEPROM,放置数据,由于103C8只有64K的flash,所以地址为定义为:#define EEROM_BASR_ADDR  0x0800f400;这个不知道我计算是不是正确,然后#define PageSize  0x400,因为这个芯片每页是1K的容量,而我需要2K,所以要擦2页,那我利用函数的方式来写,函数如下:
int WriteEEPROMData(unsigned int StartAddr,unsigned int *p_data, unsigned int size)
{
    int count = 0;
    unsigned int* p = (unsigned int*)p_data;
    FLASH_Unlock();  
    FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);  
    FLASH_ErasePage(EEROM_BASR_ADDR);
    FLASH_ErasePage(EEROM_BASR_ADDR + PageSize);
    while (count < size*sizeof(unsigned int))
    {
        FLASH_ProgramWord((EEROM_BASR_ADDR+count*4),*p++);   
        count++;
    }  
  FLASH_Lock();
  return 0;
}
以上是我的写FLASH的函数,现在我主要集中的问题是:STM32 的FLASH是16bit的,而我要存的数据是U8 类型的,我要把2048byte的U8 数据给存到EEPROM里面去,不知道这里该怎么处理,FLASH是16位,我想把高8位直接就附值0,低8位写我需要的数据就好了,但看原子教程里面又说这个FLASH不允许写单数的FLASH地址,我无法明白这个是啥意思?FLASH里面不允许一个地址一个地址的写吗?我上面的数据我也不知道该怎么处理了,能有高手指点我一下吗?

最佳答案

查看完整内容[请看2#楼]

我的问题解决了,就是一次必须写16bit数据或32bit数据,我之前可能是写的8bit数据导致的错误,现在更改为halfword写,且每次增加1地址,写16bit进去,就可以了!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2015-6-27
在线时间
4 小时
 楼主| 发表于 2016-4-21 19:44:51 | 显示全部楼层
我的问题解决了,就是一次必须写16bit数据或32bit数据,我之前可能是写的8bit数据导致的错误,现在更改为halfword写,且每次增加1地址,写16bit进去,就可以了!
回复

使用道具 举报

28

主题

303

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2014-8-14
在线时间
67 小时
发表于 2016-4-21 20:56:15 | 显示全部楼层
mark,标记一下
这个世界上还有很多很多的人,但你不认识他们,他们也不属于你的世界。这个世界上还有很多好吃的好玩的好看的东西,可真正属于你的世界其实是很小的,只是你去过的地方吃过的东西和见过的落日,还有会在乎你死活的朋友。”——《龙族》
回复

使用道具 举报

62

主题

275

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1155
金钱
1155
注册时间
2012-3-4
在线时间
80 小时
发表于 2016-4-22 13:47:33 | 显示全部楼层
今天用原子的程序,出现问题了,就是死在哪里
回复

使用道具 举报

11

主题

200

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1154
金钱
1154
注册时间
2014-11-9
在线时间
228 小时
发表于 2016-6-7 09:04:40 | 显示全部楼层
我想问一下,这个flash擦写的次数会是多少次?我的数据时一个小时就要存一次的,按照这样的话,一个月下来就要擦写很多次了
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2016-6-7 09:46:11 | 显示全部楼层
擦除次数问题可以考虑一个扇区分成n小块,每次写入向后递加写,而这个是不用擦除就可以写入的,当扇区写满就执行擦除,这样擦除的次数可以减小n次。
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

62

主题

275

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1155
金钱
1155
注册时间
2012-3-4
在线时间
80 小时
发表于 2016-6-7 17:28:54 | 显示全部楼层
l1234564555 发表于 2016-4-22 13:47
今天用原子的程序,出现问题了,就是死在哪里

原子的要该一下,需要i++还是什么,反正就是那个循环的地方
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 05:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表