OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8939|回复: 15

串口IAP程序 bootloader与电脑端烧录工具

[复制链接]

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-10-9
在线时间
10 小时
发表于 2015-10-10 09:29:49 | 显示全部楼层 |阅读模式
5金钱
平台:
电脑系统    win7 X64
编译环境    Keil MDK 5.15
软件环境    VS2013 VB
ST固件库    v3.5
芯片型号    STM8F103C6U6A
HSE值    8MHz
IAP连接方式    485串口    usart1  波特率9600
bootloader程序空间    0x08000000~0x08005000    计20K
APP程序空间    0x08005000~0x08012000    计52K

IAP已经测试可以运行,可以用IAP工具下载程序到APP程序空间,而且检查过下载的数据完全正确

而且可以通过调试看到IAP跳转APP



遇到的问题是,实际APP程序并没有执行

下面附上IAP工程,APP工程和电脑端的IAP升级软件,这些都是我自己写的,测试过写入到APP区域的数据和BIN文件完全一致,实在找不到问题在哪里

请各位帮忙看看问题到底出在哪里

IAP Tool.zip

43.36 KB, 下载次数: 853

STM32 APP.zip

368.31 KB, 下载次数: 492

STM32 IAP.zip

371.99 KB, 下载次数: 676

最佳答案

查看完整内容[请看2#楼]

APP和IAP有没用到中断服务类的东西?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-10-10 09:29:50 | 显示全部楼层
APP和IAP有没用到中断服务类的东西?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-10-9
在线时间
10 小时
 楼主| 发表于 2015-10-10 13:29:27 | 显示全部楼层
回复【2楼】八度空间:
---------------------------------
IAP中用了 串口接收中断,APP中是使用循环做延时的,没有用到中断
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-10-10 13:31:43 | 显示全部楼层
回复【3楼】Pro_Xiao:
---------------------------------
在APP中要中断地址偏移http://www.openedv.com/posts/list/28635.htm
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-10-10 13:51:00 | 显示全部楼层
建议先搞个简单点的测试下,可参考我们的IAP例程,用串口助手发。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-10-9
在线时间
10 小时
 楼主| 发表于 2015-10-10 14:17:55 | 显示全部楼层
 回复【5楼】 正点原子 :
---------------------------------
写数据的方式基本就是参照IAP例程里面的写的,不过因为这个芯片RAM只有10K所以代码只能分段写进FLASH,所以我自己写的传输协议。
上位机软件里面写了验证写入正确性的功能,main.c文件中第57到 62行 去除“//”就可以支持,
[mw_shl_code=c,true]/*关闭IAP后加个延时,将APP程序段重新由串口发出*/[/mw_shl_code] [mw_shl_code=c,true]//NowTime=0; //while(1){ //    NowTime++; //    if(NowTime>0x00200000)break; //} //UART_SendBytes((char*)0x08005000,flash_count); [/mw_shl_code] [mw_shl_code=c,true]{     if(CRC_Value1==CRC_Value){//CRC正确则将程序段写入         /*FLASH编程使能*/         FLASH_Unlock();         /*清标志位*/         FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);         /*页擦除*/         FLASH_ErasePage(FLASH_APP_ADDR+STM_SECTOR_SIZE*Data_Index);//擦除程序段相应的页         /*编程*/         for(i=0;i<=0x100;i++){             addr=FLASH_APP_ADDR+STM_SECTOR_SIZE*Data_Index+i*4;             dat=*(vu32*)(USART_RX_BUF+i*4);             FLASH_ProgramWord(addr,dat);             flash_count+=4;         }         FLASH_Lock();//上锁 //    UART_SendStr("IAP Data OK!\r\n");         senddata[1]=Get_CMD;         senddata[2]=Data_Index+1;         senddata[3]=0x75;         UART_SendBytes(senddata,4);         //UART_SendBytes((char*)(FLASH_APP_ADDR+STM_SECTOR_SIZE*Data_Index),1024);/*此段将写入的APP*/     }else{         senddata[1]=Get_CMD;         senddata[2]=Data_Index;         senddata[3]=0x75;         UART_SendBytes(senddata,4);     } }[/mw_shl_code]


写入程序后过几秒点击IAP软件的帮助可以在下面窗口输出验证结果,这行注释掉时候IAP软件帮助按钮点击会死机
用这种方法
已经验证过写入芯片APP FLASH段的数据全部正确,而且bootloader在线仿真方式时直接看flash


上面右边是我写的IAP上位机载入的BIN文件,左边是在线仿真时候直接读芯片flash区域的结果,可以看出两侧数据也是一致的

但是跳转之后APP程序就是不能执行,我真是没招了
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-10-9
在线时间
10 小时
 楼主| 发表于 2015-10-10 14:45:24 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
刚刚又看了一下IAP的例程,好像也没什么区别啊,跳转还是不行
回复

使用道具 举报

14

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
248
金钱
248
注册时间
2011-10-16
在线时间
31 小时
发表于 2015-10-10 16:03:22 | 显示全部楼层
估计中断向量没有重定位,你要relocate vector table!,并且APP这段编译的时候也要设置偏移地址。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-10-10 18:24:36 | 显示全部楼层
回复【6楼】Pro_Xiao:
---------------------------------
你要多看一些数据,最好整个文件对比下,只要有一个地方出错,就可能导致程序崩溃。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-10-9
在线时间
10 小时
 楼主| 发表于 2015-10-11 19:31:11 | 显示全部楼层
回复【8楼】okyihu:
---------------------------------
APP程序第一句就是向量表跳转啊
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-10-9
在线时间
10 小时
 楼主| 发表于 2015-10-11 19:35:52 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
我有在IAP TOOL里面做过程序代码校验,没有问题,我用你的IAP例程精简后烧录到这个芯片APP可以执行,说明APP没问题,看来还是我写的代码有问题,但是找不到问题出在哪里

查了一下ST的官方资料这款芯片FLASH是32K的,不过我改过代码,还是不行,还得再看看
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-10-11 22:13:34 | 显示全部楼层
回复【11楼】Pro_Xiao:
---------------------------------
代码问题,一般就是中断向量偏移表没搞好.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-10-9
在线时间
10 小时
 楼主| 发表于 2015-10-12 07:36:13 | 显示全部楼层
回复【12楼】正点原子:
--------------------------------
问题是APP程序用IAP例程导入时候可以工作,说明APP里面的中断向量表偏移设置是没问题的,可能还是我的IAP 程序的问题
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-10-12 22:41:15 | 显示全部楼层
回复【13楼】Pro_Xiao:
---------------------------------
慢慢检查下吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-10-9
在线时间
10 小时
 楼主| 发表于 2015-12-2 15:10:23 | 显示全部楼层
 回复【14楼】 正点原子 :
---------------------------------
找到问题了,是因为在IAP里面修改了时钟和系统的中断配置,程序跳转时候重新映射向量表出错了
回复

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
发表于 2018-8-1 16:38:44 | 显示全部楼层
上位机有没有源码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 03:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表