专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32Flash擦出和编写
2019-03-23 19:11
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
10705
3
1062
对于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
/**************************************************************************************
* FunctionName : FLSEraseFlash()
* Description : Flash擦除
* EntryParameter : sAddr - 起始地址,eAddr - 结束地址,pageSize - 页大小
* ReturnValue : None
**************************************************************************************/
void FLSEraseFlash(u32 sAddr, u32 eAddr, u32 pageSize)
{
u8 i, maxPag;
volatile FLASH_Status fshStu = FLASH_COMPLETE;
maxPag = (eAddr - sAddr) / pageSize; // 页数
FLASH_Unlock(); // 解锁的闪存程序擦除控制器
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
for (i=0; ((i
{
fshStu = FLASH_ErasePage(sAddr + (pageSize * i)); // 擦除FLASH页
}
FLASH_Lock(); // 锁Flash
}
复制代码
/**************************************************************************************
* FunctionName : FLSWriteFlash()
* Description : 写Flash
* EntryParameter : wrtAddr - 写地址,pDat - 数据,len - 数据长度
* ReturnValue : 成功返回0,否则返回1
**************************************************************************************/
u8 FLSWriteFlash(u32 wrtAddr, u8 *pDat, u32 len)
{
u8 times = 0;
u16 i;
u32 wrtDat = 0, reaDat = 0; // 读写缓冲
u32 addr = wrtAddr;
FLASH_Unlock(); // 解锁的闪存程序擦除控制器
for (i=0; i
{
wrtDat = (pDat[i+0]<<0) + (pDat[i+1]<<8) + (pDat[i+2]<<16) + (pDat[i+3]<<24);
do
{
times++;
FLASH_ProgramWord(addr, wrtDat); // 写Flash
reaDat = FLSReadDword(addr); // 读Flash
} while ((reaDat != wrtDat) && (times < 5));
if (times == 0) // 读写错误
{
FLASH_Lock(); // 锁Flash
return 1;
}
times = 0;
addr += 4; // 偏移地址
}
FLASH_Lock(); // 锁Flash
return 0;
}
复制代码
加载中...
一周热门
更多
>
相关问题
相关文章
嵌入式编译生成的HEX文件和BIN文件内容详解
0个评论
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
单片机中把部分Flash虚拟成Eeprom使用时,如何延长使用寿命
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
敢问路在何方,STM32迈出的第一步,却注定了它非凡的一生
0个评论
年工作时间真的就等于3年工作经验?也许你就不配
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- /**************************************************************************************
- * FunctionName : FLSEraseFlash()
- * Description : Flash擦除
- * EntryParameter : sAddr - 起始地址,eAddr - 结束地址,pageSize - 页大小
- * ReturnValue : None
- **************************************************************************************/
- void FLSEraseFlash(u32 sAddr, u32 eAddr, u32 pageSize)
- {
- u8 i, maxPag;
- volatile FLASH_Status fshStu = FLASH_COMPLETE;
-
- maxPag = (eAddr - sAddr) / pageSize; // 页数
- FLASH_Unlock(); // 解锁的闪存程序擦除控制器
- FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
-
- for (i=0; ((i
- {
- fshStu = FLASH_ErasePage(sAddr + (pageSize * i)); // 擦除FLASH页
- }
-
- FLASH_Lock(); // 锁Flash
- }
复制代码- /**************************************************************************************
- * FunctionName : FLSWriteFlash()
- * Description : 写Flash
- * EntryParameter : wrtAddr - 写地址,pDat - 数据,len - 数据长度
- * ReturnValue : 成功返回0,否则返回1
- **************************************************************************************/
- u8 FLSWriteFlash(u32 wrtAddr, u8 *pDat, u32 len)
- {
- u8 times = 0;
- u16 i;
- u32 wrtDat = 0, reaDat = 0; // 读写缓冲
- u32 addr = wrtAddr;
-
- FLASH_Unlock(); // 解锁的闪存程序擦除控制器
- for (i=0; i
- {
- wrtDat = (pDat[i+0]<<0) + (pDat[i+1]<<8) + (pDat[i+2]<<16) + (pDat[i+3]<<24);
-
- do
- {
- times++;
- FLASH_ProgramWord(addr, wrtDat); // 写Flash
- reaDat = FLSReadDword(addr); // 读Flash
-
- } while ((reaDat != wrtDat) && (times < 5));
-
- if (times == 0) // 读写错误
- {
- FLASH_Lock(); // 锁Flash
- return 1;
- }
-
- times = 0;
- addr += 4; // 偏移地址
- }
-
- FLASH_Lock(); // 锁Flash
- return 0;
- }
复制代码一周热门 更多>