OpenEdv-开源电子网

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

(添加了CRC和重发)分享一个自己写的IAP程序,基于mini,欢迎拍砖

  [复制链接]

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
发表于 2014-8-29 19:28:46 | 显示全部楼层 |阅读模式
 添加了CRC 和重复功能,帖子太长了,传到楼下出啦
  注意使用的是keil5.11a


    自己根据开发指南写的一个IAP程序。在mini板上成功跑一个app。因为RB是128K的flash,所以将rom分割为 27K 1K 100K。其中27K 用来存储IAP。1K 用来存储一些信息,目前暂未使用到。100K就是app用的啦。

    IAP程序的大致流程是这样的,上电后,在5s内(实际测试发现大于5s,暂时不管这个误差),轮询串口是否发送:updata;(update这个可以随意,保证:;中间有6个字母就好)。如果超时没有收到:update;那么程序跳转到app,如果没有app,或者app出错,红灯常亮。如果收到:update;那么进入烧写程序。这时候,串口转为中断方式接收数据。
    
    烧录形式是这样的。按照1K,1K大小烧录,需要对bin文件进行分割。开辟了一个串口缓存,大小为1K+8。发送格式是这样子的,

    data_len_L  data_len_H  data(no more than 1K)   index_L index_H CRC

    index_L index_H CRC(4B)这六位暂时没用到,填充00,data_len为要写入数据长度,最大不会超过1K。

    目前IAP编译后才7K,还可以加入更多功能,预计加入STM32的CRC。app的bin文件需要自己分割,可以使用winHex,然后使用XCOM V2.0来发送,,我准备写个上位机用来传输bin,这样就不用自己分割bin了。


    欢迎各位,给建议,好丰富这个IAP。

    另外,app的做法,请参考开发指南。


——————————————————————————————————————————————————————————————————————————————
刚刚画好的上位机UI,样子很挫,始终想不出好的界面样子



-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
弄了几天,终于把上位机弄好了。qt写的。测试可以用。
写完最大的感受就是,让C++单身了。完全还是安装面向过程的方法写的。不多说,附图,附源码。



伪扁平化设计


另外,使用新版本的keil编译老版本出现一个报错,双击跳转到stm32F1xx.h,可能是重复定义



2.MDK_5_Led.zip

59.36 KB, 下载次数: 3205

IAP_load.zip

31.06 KB, 下载次数: 3502

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-8-29 19:29:51 | 显示全部楼层
压缩文件中包含了bin文件,一个流水灯的程序。板字是1.8的版本
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-8-29 19:30:51 | 显示全部楼层
高大上啊,谢谢分享!
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-8-29 19:33:57 | 显示全部楼层
回复【3楼】Badu_Space:
---------------------------------
还不过,没有容错和重发功能,晚点在加,先捣鼓一下上位机
回复 支持 反对

使用道具 举报

126

主题

820

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1683
金钱
1683
注册时间
2012-10-28
在线时间
62 小时
发表于 2014-8-29 21:34:31 | 显示全部楼层
顶一个,好样的
坚持学习!就能成功!
回复 支持 反对

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2014-8-29 22:09:26 | 显示全部楼层
我是这样做的,引用XCOM提供的通讯协议,通过串口收发,把收到的bin存进外部Flash,MCU接收到升级指令时,跳转到IAP运行,并读出外部Flash的bin进行MCU内部的APP区更新。MCU的Flash开辟两段空间,一段运行bootloader(即IAP),一段运行APP,APP和IAP之间可以相互跳转
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-8-29 22:26:30 | 显示全部楼层
回复【6楼】小温:
---------------------------------
从app跳转到iap,是这个意思吗?
回复 支持 反对

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2014-8-29 22:28:50 | 显示全部楼层
是的,APP程序在运行时,接收到升级指令,跳转到IAP等待升级操作,等待时间到后没有升级的话,重新跳回APP
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-8-29 22:30:14 | 显示全部楼层
回复【8楼】小温:
---------------------------------
这个不错,
回复 支持 反对

使用道具 举报

19

主题

702

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3339
金钱
3339
注册时间
2013-7-30
在线时间
708 小时
发表于 2014-8-29 22:32:33 | 显示全部楼层
回复【9楼】寒寒:
---------------------------------
bin文件不用分割的,直接用XCOM发,不过在发送比较大(30Kbyte以上)时,会出现帧序列错误,然后进入重发机制,该问题还有待解决
思想很重要,无论做人还是编程!
我的技术公众号【微联智控工作室】
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-8-29 22:56:19 | 显示全部楼层
回复【10楼】小温:
---------------------------------
我正在用qt写个上位机,从Bin文件里面读1K,然后发送,循环发送到bin读完
回复 支持 反对

使用道具 举报

7

主题

85

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
298
金钱
298
注册时间
2013-10-10
在线时间
5 小时
发表于 2014-8-30 22:24:12 | 显示全部楼层
Qt写的呀?用的哪个版本的?
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-9-1 12:59:51 | 显示全部楼层
回复【12楼】祝锦烨:
---------------------------------
5.3好像,6月份那个版本的。
回复 支持 反对

使用道具 举报

头像被屏蔽

52

主题

440

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1237
金钱
1237
注册时间
2013-1-9
在线时间
151 小时
发表于 2014-9-1 17:31:40 | 显示全部楼层
回复【13楼】寒寒:
-------------------------------
一直想学上位机啊......还有推荐资料?
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-9-1 21:34:50 | 显示全部楼层
回复【14楼】hexboot:
---------------------------------
只会一点qt,一直按F1看帮助文档
回复 支持 反对

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-9-1 21:43:23 | 显示全部楼层
更新失败可以回滚吗?
于20150522停用该账号:http://www.microstar.club
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-9-1 22:37:43 | 显示全部楼层
不错,cool
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-9-1 23:13:17 | 显示全部楼层
回复【16楼】styleno1:
---------------------------------
暂时还没做这个。
回复 支持 反对

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2014-9-4
在线时间
0 小时
发表于 2014-9-4 19:14:44 | 显示全部楼层
回复【18楼】寒寒:
---------------------------------
文件解压错误,楼主再发次吧
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-9-5 11:19:50 | 显示全部楼层
回复【19楼】suoyiman:
---------------------------------
哪个,上位机,可以到这里下    https://github.com/hanfengcan/IAP_Load
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-9-5 11:21:56 | 显示全部楼层
回复【19楼】suoyiman:
---------------------------------
我试了没问题哦,下载后可以解压
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-9-6 19:57:23 | 显示全部楼层
继续捣鼓了一下,添加了CRC校验和重发功能,jtag调试的时候,强制修改串口buf某个值,来使crc不一致,可以实现重发。
CRC:使用STM32自带的CRC。因为是硬件CRC,所以和网上普遍的 RAR之类的CRC是不一样的。找了很久在百科上找到一份,copy了下来用。不过这个crc在大小端上有出入。幸好M3有个rev指令,将int的高地字节互转。才搞定了两边计算结果的CRC值。

[mw_shl_code=c,true]uint8_t CRC_GetVal(uint32_t *pdata, uint16_t len , uint32_t CRC_Val) { uint32_t temp; len -= 1; CRC_ResetDR(); //复位CRC,否则会将上次结果作为初值计算 while(len) { temp = __rev(*pdata); //在一个32位reg中翻转字节顺序 CRC->DR = temp; *pdata++; len--; } if(CRC_Val != CRC->DR)return 0; return 1; }[/mw_shl_code]
这里使用时,传入的是char类型,利用指针,从而不用手动将4字节转换为int。但是要注意大小端问题。
重发功能只是在计算CRC前,强制修改了buf里面的某个值,测试可以用。



关于上位机,已同步到github上面,地址看一楼。

代码越写越乱了。需要的朋友,将就着用吧。

2.MDK_5_Led.zip

68.37 KB, 下载次数: 1827

回复 支持 反对

使用道具 举报

6

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
金钱
341
注册时间
2013-11-10
在线时间
91 小时
发表于 2014-11-3 14:53:16 | 显示全部楼层
想使用GPRS 远程升级,不知道楼主有好的办法吗或者工程案例?
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-11-3 19:55:37 | 显示全部楼层
回复【23楼】lijunlinv:
---------------------------------
可以将固件先转存到外扩的flash上,然后在使用IAP。固件通过GPRS传送。外扩flash保存上一次成功升级的固件,和本次传送固件。如果本次升级失败,可以刷回上一次固件
回复 支持 反对

使用道具 举报

6

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
金钱
341
注册时间
2013-11-10
在线时间
91 小时
发表于 2014-11-4 09:19:59 | 显示全部楼层
CPU为107ZET6,硬件没有外扩Flash,我想的是256K的片上Flash分3个区,Bootload区,运行区,下载备份区。
1.终端开机如果运行区没有程序或者运行区程序无法执行,则每隔一定时间(如30分钟)通过GPRS向上位机发送请求下载固件消息。
2.如果收到GPRS升级命令,则自动复位,进入IAP,等待GPRS分包发送固件,将校验正确的固件储存至下载备份区。
3.全部接收完成,且总检验正确,向上位机发送接收完成消息。
4.上位机收到接收完成消息,发送更新固件命令,终端自动复位,开始将下载备份区中的固件搬移到运行区。
5.完成后自动复位,然后回复更新成功命令。
回复 支持 反对

使用道具 举报

6

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
金钱
341
注册时间
2013-11-10
在线时间
91 小时
发表于 2014-11-4 09:20:46 | 显示全部楼层
这是我目前APP用户程序的大小:

回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-11-4 19:15:37 | 显示全部楼层
回复【25楼】lijunlinv:
---------------------------------
感觉不用区分备份区和运行区。设运行区A和运行区B。假设本次使用运行区A,则升级时覆盖B区。升级完成后,重启使用B区,两个区切换使用。如果重启后不能正常运行则切换回A区。然后告诉服务器更新失败。另外,GPRS不用在bootload区吧,感觉这样有点冗余。当然容量足够就无所谓了。如果使用bootload模式下升级的话,设备就得有一段时间不能工作。不如在运行情况下更新。也许还可以保持部分外设正常工作。
回复 支持 反对

使用道具 举报

6

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
金钱
341
注册时间
2013-11-10
在线时间
91 小时
发表于 2014-11-4 19:21:21 | 显示全部楼层
嗯,A/B区的建议非常好,可以防止因为升级失败而无法工作。
不知道大侠是否有STM32 IAP工程共享一下,让我们这帮菜鸟学习一下?万分感谢!
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-11-4 20:02:29 | 显示全部楼层
回复【28楼】lijunlinv:
---------------------------------
没有,我就这个工程而已。最近实习没时间玩这些东西啊
回复 支持 反对

使用道具 举报

6

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
金钱
341
注册时间
2013-11-10
在线时间
91 小时
发表于 2014-11-4 20:03:22 | 显示全部楼层
好的,谢谢解答。我做好了放这里共享!
回复 支持 反对

使用道具 举报

6

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
金钱
341
注册时间
2013-11-10
在线时间
91 小时
发表于 2014-11-24 16:38:08 | 显示全部楼层
我按照楼主的例子改写了上位机软件,IAP,和APP。我把APP用JTAG下载到Flash,然后再下载IAP(JTAG下载设置清除扇区),下载后在IAP中使用IAP_LOAD()可以跳转到APP运行(因为APP没有擦除)。但是使用IAP_WRITE()每次发送512字节固件包。更新完成后,发现程序没有运行,不知道是什么原因?麻烦大家帮忙分析一下。
1.IAP设置:





2.上位机软件,自定协议,每次发送512字节固件包:




3.APP设置:





4.IAP代码:
[mw_shl_code=c,true]void Iap_Write(uint32_t addr) { u16 temp = 0; // u16 data_size = 0; //烧录大小 u16 data_len = 512; //数据长度 u16 index = 0; //数据块索引 // u32 crc_val = 0; u32 addr_now = addr; //写入地址 u8 data_write[DATA_SIZE] = {0}; //数据缓冲 u8 w_flag = 0; //收到数据校验正确,需要写入 U3_RS485_ACK(0x01); //应答强制升级 //准备烧录,数据大小为1K while(1) { delay_ms(10); U3_RS485_Rcvd_Data(RBuf,&lenlen); // while(lenlen<530); //等待数据接收完毕 if(U3_ISR_OK == 1) //如果U3收到了数据 { U4_RS485_Send_Data(RBuf,lenlen); U3_ISR_OK = 0; if(RBuf[0] == dizhi) { // crc_val = RBuf[526] << 24 | RBuf[527] << 16 |RBuf[528] << 8 | RBuf[529] ; // if(crc_val == CRC_GetVal((u32 *)RBuf,3)) // { data_len = (u16)RBuf[9] << 16 | RBuf[10] << 8 | RBuf[11]; //获取data有效长度 index = RBuf[524] << 8 | RBuf[525]; //获取索引 addr_now = addr + 512 * index; //准备写入地址 for(temp = 0; temp < 512; temp++) //从第12位开始拷贝数据 { data_write[temp] = RBuf[temp+12]; } w_flag = 1; // } // else //CRC校验错误 // { // U3_RS485_ACK(0x03); //本包固件接收失败,请求再次发送本包固件。 // continue; // } }//End 如果是本机地址 }//End 如果U3收到了数据 if(w_flag == 0) { continue; } //开始写数据 if(data_len < 512) //写入不足512字节的数据 { if(data_len % 2 != 0)data_len += 1; STMFLASH_Write(addr_now, (uint16_t *)data_write, data_len / 2); // data_size += 1; STMFLASH_Write(IAP_INFO, &data_len, 1); //从指定地址开始写入指定长度的数据 U3_RS485_ACK(0x04); //所有固件接收完成,本次更新完成。 w_flag = 0; break; } else //写入512字节数据 { STMFLASH_Write(addr_now, (uint16_t*)data_write, data_len / 2); // data_size += 1; for(temp = 0; temp < 530; temp++) { RBuf[temp] = 0; } U4_RS485_Send_Data(Test,2); U3_RS485_ACK(0x02); //本包固件接收完成,请求发送下一包固件。 w_flag = 0; } }//End while(1) 烧录完成 //清空串口缓存 for(temp = 0; temp < 530; temp++) { RBuf[temp] = 0; } IAP_LOAD(); } //设置栈顶地址 //addr:栈顶地址 __asm void MSR_MSP(u32 addr) { MSR MSP, r0 //set Main Stack value BX r14 } void Iap_load(uint32_t addr) { if(((*(vu32*)addr) & 0x2FFE0000) == 0x20000000) { jump = (iapfun) *(vu32*)(addr + 4); //强制转化为函数 MSR_MSP(*(vu32*)addr); LED1 = 0; jump(); } else { // U3_RS485_Send_String("Error\n"); // LED1 = 1; while(1); } }[/mw_shl_code]
其中的函数:
[mw_shl_code=c,true]/*1B地址 8B产品ID 1B功能码 2B版本号 4BCRC 00判断版本号升级。 01强制升级。 02本包固件接收完成,请求发送下一包固件。 03本包固件接收失败,请求再次发送本包固件。 04所有固件接收完成,本次更新完成。 */ void U3_RS485_ACK(u8 ACK_type) { u32 CRC_Result; u8 ACK_Buf[16]; // u16 len; ACK_Buf[0] = dizhi; ACK_Buf[1] = 0x00; ACK_Buf[2] = 0x00; ACK_Buf[3] = 0x00; ACK_Buf[4] = 0x00; ACK_Buf[5] = 0x00; ACK_Buf[6] = 0x00; ACK_Buf[7] = 0x00; ACK_Buf[8] = 0x00; ACK_Buf[9] = ACK_type; //1B功能码 ACK_Buf[10] = ver>>8; //2B版本号 高8位 ACK_Buf[11] = ver; //2B版本号 低8位 CRC_Result = CRC_GetVal((u32 *)ACK_Buf, 3); ACK_Buf[12] = CRC_Result>>24; //4BCRC ACK_Buf[13] = CRC_Result>>16; ACK_Buf[14] = CRC_Result>>8; ACK_Buf[15] = CRC_Result; U3_RS485_Send_Data(ACK_Buf,16); }[/mw_shl_code]






ARM_V102_20141124_IAP.rar

945.08 KB, 下载次数: 1720

回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-11-24 22:37:46 | 显示全部楼层
回复【31楼】lijunlinv:
---------------------------------
最简单也是最笨的办法是,在memory窗口里面输入 bin写入地址,看看写入的内容是否正确。可以看每个512B的头和尾。然后,APP部分看看中断向量有没有重新定位。用jtag 单步调试~
回复 支持 反对

使用道具 举报

6

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
金钱
341
注册时间
2013-11-10
在线时间
91 小时
发表于 2014-11-24 22:49:52 | 显示全部楼层
回复【32楼】寒寒:
---------------------------------
非常感谢你的指导,忠心的感谢。找到问题了,我把写Flash的地址算错了,data_len / 2 这儿:
STMFLASH_Write(addr_now, (uint16_t*)data_write, data_len / 2);
回复 支持 反对

使用道具 举报

头像被屏蔽

65

主题

277

帖子

0

精华

高级会员

Rank: 4

积分
674
金钱
674
注册时间
2013-8-11
在线时间
29 小时
发表于 2014-11-24 22:51:38 | 显示全部楼层
MARK,谢谢楼主
回复 支持 反对

使用道具 举报

6

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
金钱
341
注册时间
2013-11-10
在线时间
91 小时
发表于 2014-11-27 10:35:32 | 显示全部楼层
回复【32楼】寒寒:
---------------------------------
楼主,请问,你的USART_BUF_SIZE是1024+8,除以4刚好是个整数,我现在USART_BUF_SIZE是512固件数据+18字节其他数据,一共530字节(包含4字节CRC),USART_BUF_SIZE就是530字节,除以4不能整除,请问送入校验函数时,应该怎么计算temp?
temp = USART_BUF_SIZE ;
temp /= 4;
if(!CRC_GetVal((uint32_t *)usart_buf, temp, crc_val))
回复 支持 反对

使用道具 举报

96

主题

762

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1228
金钱
1228
注册时间
2012-10-19
在线时间
15 小时
发表于 2014-11-27 15:22:01 | 显示全部楼层
楼主你好,能共享下上位机的程序吗?最近想学习这些简单的上位机,希望楼主能分享下,有学习资料的话也一并分享下,邮箱859724644@qq.com
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-11-27 18:18:49 | 显示全部楼层
回复【35楼】lijunlinv:
---------------------------------
再补两个字节咯,512+20,这个应该可以吧
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2014-11-27 18:20:22 | 显示全部楼层
回复【36楼】tian123chi:
---------------------------------
https://github.com/hanfengcan/IAP_Load
回复 支持 反对

使用道具 举报

96

主题

762

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1228
金钱
1228
注册时间
2012-10-19
在线时间
15 小时
发表于 2014-11-28 08:11:41 | 显示全部楼层
回复【38楼】寒寒:
---------------------------------
感谢,我好好研究研究~
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2015-3-19
在线时间
4 小时
发表于 2015-3-19 10:06:12 | 显示全部楼层
回复【38楼】寒寒:
---------------------------------
你好啊,上位机没有可执行文件要怎么用呢?我用Qt(以前从没用过Qt)编译,有错误,请教要怎么用呢?
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2015-3-19 12:14:47 | 显示全部楼层
回复【40楼】Canis_lupus:
---------------------------------
你用什么Qt版本呢?

下载这个
https://github.com/hanfengcan/IAP_Load

把Iap_Load.pro拖进QtCreator里面
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2015-3-19
在线时间
4 小时
发表于 2015-3-19 13:54:39 | 显示全部楼层
回复【41楼】寒寒:
---------------------------------
Qt4.8.4 是不得用5.3呢?据说5以前的版本只能用第三方的串口。
如果需要5.3,我都不会安装,找不到安装的文件
还有可以生成可执行文件吗
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2015-3-19 14:17:16 | 显示全部楼层
回复【42楼】Canis_lupus:
---------------------------------
版本太低了,去官网找个新的用,我学Qt是从5开始的
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2015-3-19
在线时间
4 小时
发表于 2015-3-19 14:35:53 | 显示全部楼层
回复【43楼】寒寒:
---------------------------------
是Qt creater吗?还是Qt,能否给一个安装方式
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2015-3-19 14:58:36 | 显示全部楼层
http://download.qt.io/official_releases/qt/5.4/5.4.1/qt-opensource-windows-x86-mingw491_opengl-5.4.1.exe
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2015-3-19 14:59:01 | 显示全部楼层
回复【44楼】Canis_lupus:
---------------------------------
http://download.qt.io/official_releases/qt/5.4/5.4.1/qt-opensource-windows-x86-mingw491_opengl-5.4.1.exe
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2015-3-19
在线时间
4 小时
发表于 2015-3-19 16:18:36 | 显示全部楼层
回复【43楼】寒寒:
---------------------------------
已经成功了,谢谢
回复 支持 反对

使用道具 举报

3

主题

13

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2015-3-19
在线时间
4 小时
发表于 2015-3-20 16:30:22 | 显示全部楼层
回复【46楼】寒寒:
---------------------------------
楼主有尝试过最大的包是多大呢?我的bin大小是38K188B,上位机出现问题:QIODevice::read: Called with maxSize < 0
并且下载马上结束
回复 支持 反对

使用道具 举报

9

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
426
金钱
426
注册时间
2011-7-11
在线时间
49 小时
发表于 2015-3-21 00:42:44 | 显示全部楼层
MARK下,回头来学习!!
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
 楼主| 发表于 2015-3-21 18:57:55 | 显示全部楼层
回复【48楼】Canis_lupus:
---------------------------------
没测试过那么大,自己修改代码吧。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-17 04:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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