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

2019-08-19 17:22发布

本帖最后由 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 来算的。 我改了这行后程序就正常了。  



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
笙歌余生
1楼-- · 2019-08-19 21:07
给力。谢谢解决了我困扰了一周的问题。那些256以上的芯片估计都是一页写完了,没继续运行到这个bug
eagles321
2楼-- · 2019-08-20 02:54
本帖最后由 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定义

一周热门 更多>