OpenEdv-开源电子网

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

关于FLASH模拟EEPROM实验,小弟有2点疑问,恳请指教

[复制链接]

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
发表于 2016-10-31 23:37:37 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 liuchang 于 2016-11-1 00:25 编辑

如下代码是原子的F4的源码,小弟关于这个函数有2个疑问,在程序的注释部分,恳请大神帮忙指教~~~谢谢~~~

[mw_shl_code=c,true]void STMFLASH_Write(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite)
{
  FLASH_Status status = FLASH_COMPLETE;
        u32 addrx=0;
        u32 endaddr=0;        
  if(WriteAddr<STM32_FLASH_BASE||WriteAddr%4)return;        
        FLASH_Unlock();                                                               
  FLASH_DataCacheCmd(DISABLE);
                 
        addrx=WriteAddr;               
        endaddr=WriteAddr+NumToWrite*4;        
        if(addrx<0X1FFF0000)                        
        {
                while(addrx<endaddr)        
                {
                        if(STMFLASH_ReadWord(addrx)!=0XFFFFFFFF) //问题1:这个读函数没有判断BUSY状态,也就是没有使用if(FLASH_WaitForLastOperation ==FLASH_COMPLETE),这样会不会有潜在的风险???
//我看视频也说了,在读的时候不能写,在写的时候不能读,也就是总线不能被同时占用,是这个意思吧?恳请大神指教~~~
                        {
//问题2:FLASH_EraseSector()函数是直接擦除整个扇区吧?这个没问题吧?那假设我在addrx地址和addrx+4地址,甚至addrx+8的地址的值都不是0xFFFFFFFF,
//那是不是我需要将这个指定的扇区擦除3次,我觉得,这里是不是会导致重复擦除同一个扇区的问题,恳请大神指教~~~
                                status=FLASH_EraseSector(STMFLASH_GetFlashSector(addrx),VoltageRange_3);
                                if(status!=FLASH_COMPLETE)break;
                        }else addrx+=4;
                }
        }
        if(status==FLASH_COMPLETE)
        {
                while(WriteAddr<endaddr)
                {
                        if(FLASH_ProgramWord(WriteAddr,*pBuffer)!=FLASH_COMPLETE)
                        {
                                break;        
                        }
                        WriteAddr+=4;
                        pBuffer++;
                }
        }
  FLASH_DataCacheCmd(ENABLE);        
        FLASH_Lock();
} [/mw_shl_code]

最佳答案

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

第一个看不太懂,第二个可以回答你,擦除了你再读就是全部为0XFFFFFFFF。不存在擦除多次的问题。这里是程序语言理解不到位,再思考一下。
电子爱好者
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1130
金钱
1130
注册时间
2015-8-4
在线时间
107 小时
发表于 2016-10-31 23:37:38 | 显示全部楼层
第一个看不太懂,第二个可以回答你,擦除了你再读就是全部为0XFFFFFFFF。不存在擦除多次的问题。这里是程序语言理解不到位,再思考一下。
活到老,学到老。
回复

使用道具 举报

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
 楼主| 发表于 2016-11-1 09:03:09 | 显示全部楼层
自己先顶
回复

使用道具 举报

7

主题

90

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-10-21
在线时间
43 小时
发表于 2016-11-1 09:04:45 | 显示全部楼层
本帖最后由 ldskendy 于 2016-11-1 09:08 编辑

帮顶看看
看看
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-11-1 11:20:59 | 显示全部楼层
1.读不会有潜在风险,顶多擦除2.C语言不够扎实,进一步补充学习吧
回复

使用道具 举报

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
 楼主| 发表于 2016-11-1 15:41:36 | 显示全部楼层
kingnike 发表于 2016-11-1 15:26
第一个看不太懂,第二个可以回答你,擦除了你再读就是全部为0XFFFFFFFF。不存在擦除多次的问题。这里是程序 ...

感谢指教
电子爱好者
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-3-1 06:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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