本帖最后由 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 来算的。 我改了这行后程序就正常了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
注意看函数开头
#if STM32_FLASH_SIZE<256
#define STM_SECTOR_SIZE 1024 //字节
#else
#define STM_SECTOR_SIZE 2048
#endif
小于256KB的片子,记得修改STM32_FLASH_SIZE定义
一周热门 更多>