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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版