STM32Flash擦出和编写

2019-03-23 19:11发布

对于STM32的flash地址不是太明白。。。求解答。。我应该怎么擦出和编写呢?我能从0x8002000开始擦出吗?我需要写入大概2000个。 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
error_echo
1楼-- · 2019-03-24 03:53
/   应该是有捷径的,2000个咋弄
zhaojun_xf
2楼-- · 2019-03-24 07:06
 精彩回答 2  元偷偷看……
zhaojun_xf
3楼-- · 2019-03-24 11:12
  1. /**************************************************************************************
  2. * FunctionName   : FLSEraseFlash()
  3. * Description    : Flash擦除
  4. * EntryParameter : sAddr - 起始地址,eAddr - 结束地址,pageSize - 页大小
  5. * ReturnValue    : None
  6. **************************************************************************************/
  7. void FLSEraseFlash(u32 sAddr, u32 eAddr, u32 pageSize)
  8. {
  9.     u8 i, maxPag;
  10.     volatile FLASH_Status fshStu = FLASH_COMPLETE;
  11.    
  12.     maxPag = (eAddr - sAddr) / pageSize;                                        // 页数
  13.     FLASH_Unlock();                                                             // 解锁的闪存程序擦除控制器
  14.     FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
  15.    
  16.     for (i=0; ((i
  17.     {
  18.         fshStu = FLASH_ErasePage(sAddr + (pageSize * i));                       // 擦除FLASH页
  19.     }
  20.    
  21.     FLASH_Lock();                                                               // 锁Flash
  22. }
复制代码
  1. /**************************************************************************************
  2. * FunctionName   : FLSWriteFlash()
  3. * Description    : 写Flash
  4. * EntryParameter : wrtAddr - 写地址,pDat - 数据,len - 数据长度
  5. * ReturnValue    : 成功返回0,否则返回1
  6. **************************************************************************************/
  7. u8 FLSWriteFlash(u32 wrtAddr, u8 *pDat, u32 len)
  8. {
  9.     u8  times = 0;
  10.     u16 i;
  11.     u32 wrtDat = 0, reaDat = 0;                                                 // 读写缓冲
  12.     u32 addr = wrtAddr;
  13.    
  14.     FLASH_Unlock();                                                             // 解锁的闪存程序擦除控制器
  15.     for (i=0; i
  16.     {
  17.         wrtDat = (pDat[i+0]<<0) + (pDat[i+1]<<8) + (pDat[i+2]<<16) + (pDat[i+3]<<24);                           
  18.         
  19.         do
  20.         {
  21.             times++;
  22.             FLASH_ProgramWord(addr, wrtDat);                                    // 写Flash
  23.             reaDat = FLSReadDword(addr);                                        // 读Flash
  24.             
  25.         } while ((reaDat != wrtDat) && (times < 5));
  26.         
  27.         if (times == 0)                                                         // 读写错误
  28.         {
  29.             FLASH_Lock();                                                       // 锁Flash
  30.             return 1;
  31.         }
  32.         
  33.         times = 0;
  34.         addr += 4;                                                              // 偏移地址
  35.     }
  36.    
  37.     FLASH_Lock();                                                               // 锁Flash
  38.     return 0;
  39. }
复制代码

一周热门 更多>