你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
说不定 提问时间:2014-11-5 15:18 /
如题我采用stm32f107串口做IAP固件升级,BOOT程序写好 测试bin文件小于11k下载运行良好,bin文件到20k以上时  使用超级终端就更新失败。
这是我boot程序
https://pan.baidu.com/s/1gdrc5az
boot程序配置
1、

配置

配置
29.jpg
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、 3.jpg 4.jpg
2、下面是测试程序bin文件  使用jlink下载测过都可以良好运行。
lcd_1_update.rar (7.14 KB, 下载次数: 42)
收藏 1 评论16 发布时间:2014-11-5 15:18

举报

16个回答
说不定 回答时间:2014-11-6 09:33:41
MouseCat 发表于 2014-11-5 22:44
先确认是更新失败,还是执行失败?

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

你好,如何检测是否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)
品读记忆 回答时间:2014-11-12 17:08:37
说不定 发表于 2014-11-6 09:33
你好,如何检测是否RAM溢出了昵

    Total RO  Size (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[PACKET_1K_SIZE + PACKET_OVERHEAD], file_size[FILE_SIZE_LENGTH],

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

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

还有就是bootloader堆栈的大小 要注意下 MDK不熟悉 没找到堆栈的大小
说不定 回答时间:2014-11-6 09:11:14
MouseCat 发表于 2014-11-5 22:44
先确认是更新失败,还是执行失败?

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

经过测试原来的LED程序我咋其中加入大量数组使用 使得生成BIN文件达到56k,还是能更新。其他的不能更新的 原因确定是跳转后进入硬件错误中断。是地址跳转错误 真是奇怪了
xulay 回答时间:2014-11-5 15:54:22
说不定 回答时间: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-05_161914.jpg
说不定 回答时间:2014-11-5 16:47:07
有人能帮我找原因吗
MouseCat 回答时间:2014-11-5 22:44:59
先确认是更新失败,还是执行失败?

还有,前面更新程序,如果是接收到所有数据存到RAM,然后再写FLASH,RAM满了的原因?
说不定 回答时间:2014-11-12 17:55:24
品读记忆 发表于 2014-11-12 17:08
问题解决了吗?bootloader程序中
int32_t Ymodem_Receive (uint8_t *buf)函数中的定义 是否定义的最大字 ...

我问题没找到是什么原因  后来去官网重新下载移植  就ok了
品读记忆 回答时间:2014-11-12 19:00:47
说不定 发表于 2014-11-12 17:55
我问题没找到是什么原因  后来去官网重新下载移植  就ok了

哦 后来一想 我说的也不对 呵呵
那就两个文件用Beyond Compare 对比一下
xiaoyustm32 回答时间:2016-7-9 15:34:21
刚刚接触,看了你的问题,有写了解了IAP。
xiaoyustm32 回答时间:2016-7-11 16:02:36
请问解决了吗?我才开始接触。都不知道从哪里入手。
906990839 回答时间:2016-8-3 20:22:44
这个确实是说不清啊
农夫水0533 回答时间:2016-8-4 16:48:52
我猜测你写到11K那个位置的Flash有问题,写的位置不对或者数据写错了
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版