OpenEdv-开源电子网

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

原子STM32 串口IAP例程中的一处BUG?

[复制链接]

9

主题

108

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1137
金钱
1137
注册时间
2013-7-16
在线时间
81 小时
发表于 2016-8-24 09:56:52 | 显示全部楼层 |阅读模式
本帖最后由 cookles 于 2016-8-24 09:55 编辑

最近在写STM32 的Bootloader, 所以看了一下原子开发板上的那个串口IAP例程。我的Mini板子,MCU是STM32F103RBT6.
我使用了例程中写FLASH 的函数:
iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,applenth);//更新FLASH代码

我的目的是一次写2K数据,但是总是写了1K后面1k写不进去? 后来调试的时候发现是檫除失败返回了  FLASH_ERROR_PG,就是下图中标号1的函数:

我调用这个函数的参数是这样的:
void STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite); //函数原型
                         |
STMFLASH_Write(0x0801F800,DataBuff,1024); //地址 0x0801F800 表示写的区域是FLASH的最后2K, DataBuff 为数据缓存, 1024 是数据长度,2K字节 转换成半字 就是1024

问题:
1. 檫除的函数什么情况下会返回这个
FLASH_ERROR_PG 错误。
2. 标号2 的代码是不是应该改成: WriteAddr+=secremain*2;//secremain 是按 u16 来算的, 而WriteAddr 应该是按u8 来算的。 我改了这行后程序就正常了。  



QQ截图20160824092144.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2016-12-13
在线时间
42 小时
发表于 2017-5-10 22:17:06 | 显示全部楼层
给力。谢谢解决了我困扰了一周的问题。那些256以上的芯片估计都是一页写完了,没继续运行到这个bug
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2017-5-12
在线时间
2 小时
发表于 2017-5-12 12:31:51 | 显示全部楼层
本帖最后由 eagles321 于 2017-5-12 12:33 编辑

注意看函数开头

#if STM32_FLASH_SIZE<256
#define STM_SECTOR_SIZE 1024 //字节
#else
#define STM_SECTOR_SIZE        2048
#endif


小于256KB的片子,记得修改STM32_FLASH_SIZE定义
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-21 08:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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