3197|0

3

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

为什么STM8S208MB写不对Flash? [复制链接]

我用STM8S208MB来做升级,在RAM里运行对flash的擦写工作,结果,前面写都是正确的,到了一定地址就写不正确了,不知道是怎么回事,已经弄了2周了,还没有弄好。请各位帮我看看,不然就不用STM8做了,这个项目就正式完蛋了。

传输协议都是自己定制协议,然后调用ST的库函数里的INRAM的那三个函数。
IN_RAM(void FLASH_EraseBlock(uint16_t BlockNum, FLASH_MemType_TypeDef FLASH_MemType));
IN_RAM(void FLASH_ProgramBlock(uint16_t BlockNum, FLASH_MemType_TypeDef FLASH_MemType,
                        FLASH_ProgramMode_TypeDef FLASH_ProgMode, uint8_t *Buffer));
IN_RAM(FLASH_Status_TypeDef FLASH_WaitForLastOperation(FLASH_MemType_TypeDef FLASH_MemType));
在操作过程中,我具体步骤如下:
解锁Flash,并COPY到RAM中:disableInterrupts();
unlock_PROG();
unlock_DATA();
_fctcpy('F');
MCUUpdateCodeProc();
写Flash的动作:
for(i=0;i<128;i++)
{
FlashBuf = DataBuffer[6+i];
}
FLASH_EraseBlock(blockcnt,FLASH_MEMTYPE_PROG);
FLASH_ProgramBlock(blockcnt,FLASH_MEMTYPE_PROG,FLASH_PROGRAMMODE_STANDARD,FlashBuf);
FLASH_WaitForLastOperation(FLASH_MEMTYPE_PROG);Blockcnt++;
写完以后的动作:
/* Lock program memory */
FLASH->IAPSR = ~0x02;
/* Lock data memory */
FLASH->IAPSR = ~0x08;

跳转到起始位置,相当于重启:
//reset stack pointer (lower byte - because compiler decreases SP with some bytes)
_asm("LDW X, SP ");
_asm("LD A, $FF");
_asm("LD XL, A ");
_asm("LDW SP, X ");

此帖出自stm32/stm8论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表