OpenEdv-开源电子网

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

STM32F0内部FLASH写入导致内存溢出

[复制链接]

16

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-5-11
在线时间
100 小时
发表于 2019-5-5 17:15:54 | 显示全部楼层 |阅读模式
1金钱
[mw_shl_code=c,true]void Write_Flash(void)
{
        u8 i = 0,nPage = 0;
        u32 Address = 0;
        volatile FLASH_Status FLASHStatus = FLASH_COMPLETE;//擦除完成标志
       
        FLASH_Unlock();//擦写Flash解锁
        FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPERR);//清除操作结束|编写错误|页写保护错误
        nPage = (Write_End_Address - Write_Start_Address)/Flash_Page;//计算页数
        for(i=0;(i<nPage)&&(FLASHStatus == FLASH_COMPLETE);i++)//循环擦除flash
                FLASHStatus = FLASH_ErasePage(Write_Start_Address+(Flash_Page*i));
        //FLASH_ProgramHalfWord();半字写入(16位)FLASH_ProgramWord();全字写入(32位)
       
        Address = Write_Start_Address;
        if(FLASHStatus == FLASH_COMPLETE)//写入X轴水平点
                FLASHStatus = FLASH_ProgramWord(Address,0x12345678);
        Address +=4;
        if(FLASHStatus == FLASH_COMPLETE)//写入Y轴水平点
                FLASHStatus = FLASH_ProgramWord(Address,0x23456789);
        Address +=4;
        if(FLASHStatus == FLASH_COMPLETE)//写入Z轴水平点
                FLASHStatus = FLASH_ProgramWord(Address,0x34567890);
        Address +=4;
        if(FLASHStatus == FLASH_COMPLETE)//写入设备ID
                FLASHStatus = FLASH_ProgramWord(Address,Device_ID);
       
        FLASH_Lock();//锁定Flash
}
[/mw_shl_code]
在调用这个函数后,写入地址时就会进入内存溢出,看了一些都是说的没有对齐,请问这个怎么对齐,我全字写入也不行,直接写入固定数也不行,

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-5-6 01:38:49 | 显示全部楼层
写flash首地址是多少的倍数,就是多少对齐,比如是4字节的倍数,就是4字节对齐。
回复

使用道具 举报

16

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-5-11
在线时间
100 小时
 楼主| 发表于 2019-5-6 08:51:05 | 显示全部楼层
正点原子 发表于 2019-5-6 01:38
写flash首地址是多少的倍数,就是多少对齐,比如是4字节的倍数,就是4字节对齐。

//STM32F042F4内部16KFlash,
#define Flash_Page                                ((uint32_t)0x00000400)
//Page 15
#define Write_Start_Address                        ((uint32_t)0x08003C00)
#define Write_End_Address                        ((uint32_t)0x08004000)
回复

使用道具 举报

16

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-5-11
在线时间
100 小时
 楼主| 发表于 2019-5-6 08:52:00 | 显示全部楼层
这个是4字节的倍数把,我后面直接改成全字节写入还是会这样,再F1的板子上又一切正常,,
回复

使用道具 举报

16

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
767
金钱
767
注册时间
2017-5-11
在线时间
100 小时
 楼主| 发表于 2019-5-6 09:51:25 | 显示全部楼层
file:///C:/Users/Admin/Desktop/QQ%E5%9B%BE%E7%89%8720190506094951.png
其他都是正常的,每次到写入就会溢出。。。
QQ图片20190506094951.png
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 16:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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