说不定 发表于 2014-11-5 15:18:38

STM32F107 串口IAP遇到问题(已经搞一个星期了) 请求技术...

如题我采用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下载测过都可以良好运行。





希望大家帮帮我多谢!


xulay 发表于 2014-11-5 15:54:22

试一下我的。
https://pan.baidu.com/s/1sjufXaH

说不定 发表于 2014-11-5 16:16:03

xulay 发表于 2014-11-5 15:54
试一下我的。
https://pan.baidu.com/s/1sjufXaH

你的不知道怎么用

xulay 发表于 2014-11-5 16:18:22

本帖最后由 xulay 于 2014-11-5 16:20 编辑

说不定 发表于 2014-11-5 16:16
你的不知道怎么用
hex是bootloader,用jlink烧进去,exe是pc端iap烧录程序。

说不定 发表于 2014-11-5 16:47:07

有人能帮我找原因吗

MouseCat 发表于 2014-11-5 22:44:59

先确认是更新失败,还是执行失败?

还有,前面更新程序,如果是接收到所有数据存到RAM,然后再写FLASH,RAM满了的原因?

说不定 发表于 2014-11-6 09:11:14

MouseCat 发表于 2014-11-5 22:44
先确认是更新失败,还是执行失败?

还有,前面更新程序,如果是接收到所有数据存到RAM,然后再写FLASH,RA ...

经过测试原来的LED程序我咋其中加入大量数组使用 使得生成BIN文件达到56k,还是能更新。其他的不能更新的 原因确定是跳转后进入硬件错误中断。是地址跳转错误 真是奇怪了

说不定 发表于 2014-11-6 09:33:41

MouseCat 发表于 2014-11-5 22:44
先确认是更新失败,还是执行失败?

还有,前面更新程序,如果是接收到所有数据存到RAM,然后再写FLASH,RA ...

你好,如何检测是否RAM溢出了昵

    Total ROSize (Code + RO Data)                56876 (55.54kB)
    Total RWSize (RW Data + ZI Data)            1672 (   1.63kB)
    Total ROM Size (Code + RO Data + RW Data)      56916 (55.58kB)
上面这样的程序能够更新成功,下面的程序就是跳转时进入硬件错误中断

    Total ROSize (Code + RO Data)                40540 (39.59kB)
    Total RWSize (RW Data + ZI Data)             22048 (21.53kB)
    Total ROM Size (Code + RO Data + RW Data)      47040 (45.94kB)

品读记忆 发表于 2014-11-12 17:08:37

说不定 发表于 2014-11-6 09:33
你好,如何检测是否RAM溢出了昵

    Total ROSize (Code + RO Data)                56876 (55.54kB ...

问题解决了吗?bootloader程序中
int32_t Ymodem_Receive (uint8_t *buf)函数中的定义 是否定义的最大字节数?为
(PACKET_1K_SIZE + PACKET_OVERHEAD) * FILE_SIZE_LENGTH 大约16K的升级包

uint8_t packet_data, file_size,

for (i = 0, file_ptr ++; (*file_ptr != ' ') && (i < FILE_SIZE_LENGTH);)

我认为应该是这里出了问题 大于16K 会出问题

还有就是bootloader堆栈的大小 要注意下 MDK不熟悉 没找到堆栈的大小

说不定 发表于 2014-11-12 17:55:24

品读记忆 发表于 2014-11-12 17:08
问题解决了吗?bootloader程序中
int32_t Ymodem_Receive (uint8_t *buf)函数中的定义 是否定义的最大字 ...

我问题没找到是什么原因后来去官网重新下载移植就ok了
页: [1] 2
查看完整版本: STM32F107 串口IAP遇到问题(已经搞一个星期了) 请求技术...