如题我采用stm32f107串口做IAP固件升级,BOOT程序写好 测试bin文件小于11k下载运行良好,bin文件到20k以上时 使用超级终端就更新失败。 这是我boot程序 https://pan.baidu.com/s/1gdrc5az boot程序配置 1、 配置 2、#define ApplicationAddress 0x8010000 3、int main(void) { FLASH_Unlock(); NVIC_SetVectorTable(0x08000000,0x00); __disable_irq(); //关闭中断 IAP_Init();//串口初始化 if (ucUpdateFlag==1)//升级标志 一直为1 { Main_Menu();//更新固件 } } 4、程序跳转 if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000) { SerialPutString("Execute user Program\r\n\n"); JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4); Jump_To_Application = (pFunction) JumpAddress; __set_MSP(*(__IO uint32_t*) ApplicationAddress); Jump_To_Application(); } APP程序配置 1、 2、下面是测试程序bin文件 使用jlink下载测过都可以良好运行。 |
https://pan.baidu.com/s/1sjufXaH
你的不知道怎么用
hex是bootloader,用jlink烧进去,exe是pc端iap烧录程序。
还有,前面更新程序,如果是接收到所有数据存到RAM,然后再写FLASH,RAM满了的原因?
经过测试原来的LED程序我咋其中加入大量数组使用 使得生成BIN文件达到56k,还是能更新。其他的不能更新的 原因确定是跳转后进入硬件错误中断。是地址跳转错误 真是奇怪了
你好,如何检测是否RAM溢出了昵
Total RO Size (Code + RO Data) 56876 ( 55.54kB)
Total RW Size (RW Data + ZI Data) 1672 ( 1.63kB)
Total ROM Size (Code + RO Data + RW Data) 56916 ( 55.58kB)
上面这样的程序能够更新成功,下面的程序就是跳转时进入硬件错误中断
Total RO Size (Code + RO Data) 40540 ( 39.59kB)
Total RW Size (RW Data + ZI Data) 22048 ( 21.53kB)
Total ROM Size (Code + RO Data + RW Data) 47040 ( 45.94kB)
问题解决了吗?bootloader程序中
int32_t Ymodem_Receive (uint8_t *buf)函数中的定义 是否定义的最大字节数?为
(PACKET_1K_SIZE + PACKET_OVERHEAD) * FILE_SIZE_LENGTH 大约16K的升级包
uint8_t packet_data[PACKET_1K_SIZE + PACKET_OVERHEAD], file_size[FILE_SIZE_LENGTH],
for (i = 0, file_ptr ++; (*file_ptr != ' ') && (i < FILE_SIZE_LENGTH);)
我认为应该是这里出了问题 大于16K 会出问题
还有就是bootloader堆栈的大小 要注意下 MDK不熟悉 没找到堆栈的大小
我问题没找到是什么原因 后来去官网重新下载移植 就ok了