原子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 来算的。 我改了这行后程序就正常了。  



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。