OpenEdv-开源电子网

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

STM32F1 GPRS远程升级,更新固件完成,但是没有运行,请大家帮忙看看问题在哪里?

[复制链接]

6

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

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





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




3.APP设置:





4.IAP代码:

[mw_shl_code=c,true]// 从addr起烧录程序 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; __disable_irq(); //关闭总中断 STMFLASH_Write(addr_now, (uint16_t *)data_write, data_len / 2); __enable_irq(); // data_size += 1; STMFLASH_Write(IAP_INFO, &data_len, 1); //从指定地址开始写入指定长度的数据 U3_RS485_ACK(0x04); //所有固件接收完成,本次更新完成。 w_flag = 0; break; } else //写入512字节数据 { LED1 = ~LED1; __disable_irq(); //关闭总中断 STMFLASH_Write(addr_now, (uint16_t*)data_write, data_len / 2); __enable_irq(); // 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); 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, 下载次数: 2101

最佳答案

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

找到问题了,我把写Flash的地址算错了,data_len / 2 这儿:  STMFLASH_Write(addr_now, (uint16_t*)data_write, data_len / 2);
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
金钱
341
注册时间
2013-11-10
在线时间
91 小时
 楼主| 发表于 2014-11-24 17:40:37 | 显示全部楼层
找到问题了,我把写Flash的地址算错了,data_len / 2 这儿: 
STMFLASH_Write(addr_now, (uint16_t*)data_write, data_len / 2);
回复

使用道具 举报

3

主题

13

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2015-3-19
在线时间
4 小时
发表于 2014-11-24 17:40:37 | 显示全部楼层
回复【4楼】lijunlinv:
---------------------------------
上位机是您自己写的吗?可否给我一份
回复

使用道具 举报

72

主题

2719

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2014-11-24 21:01:06 | 显示全部楼层
关注帮顶。。
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

0

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
166
金钱
166
注册时间
2014-6-6
在线时间
22 小时
发表于 2014-11-24 22:35:10 | 显示全部楼层
没研究过,下载学习一下
回复

使用道具 举报

6

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
金钱
341
注册时间
2013-11-10
在线时间
91 小时
 楼主| 发表于 2015-5-15 11:41:34 | 显示全部楼层
回复【5楼】Canis_lupus:
---------------------------------
上位机是另一个同事写的,回头我要一下
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2014-12-15
在线时间
0 小时
发表于 2015-5-15 13:22:41 | 显示全部楼层
学习学习。以后要用。
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2013-7-30
在线时间
31 小时
发表于 2015-7-25 10:30:17 | 显示全部楼层
你这个GPRS远程升级,还需要客户连接串口线吗?
回复

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-6-30
在线时间
3 小时
发表于 2016-9-22 17:14:27 | 显示全部楼层
楼主是怎样将完整的固件包分开发送的?
回复

使用道具 举报

6

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
金钱
341
注册时间
2013-11-10
在线时间
91 小时
 楼主| 发表于 2016-9-23 08:48:53 | 显示全部楼层
Treeson 发表于 2016-9-22 17:14
楼主是怎样将完整的固件包分开发送的?

上位机软件打开bin文件,然后按照每包1024字节的长度发送。
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2017-6-18
在线时间
20 小时
发表于 2017-6-18 19:56:51 | 显示全部楼层
楼主GPRS升级固件的上位机还有吗?能不能发我一份651967768@qq.com 感恩楼主
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2016-4-25
在线时间
4 小时
发表于 2017-8-21 17:23:24 | 显示全部楼层
楼去,求一下上位机,谢谢。277922995@qq.com
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2017-11-29
在线时间
1 小时
发表于 2017-11-30 00:03:07 | 显示全部楼层
楼主,能否将代码发一份参考下,可以不用最终版的代码,谢谢!309332190@qq.com
回复

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2017-2-13
在线时间
20 小时
发表于 2018-8-24 11:24:57 | 显示全部楼层
大佬,发我份上位机的程序,谢谢!948130429@qq.com
回复

使用道具 举报

5

主题

179

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
8177
金钱
8177
注册时间
2016-9-7
在线时间
1111 小时
发表于 2018-10-19 09:45:39 | 显示全部楼层

lz,发我份上位机的程序,谢谢!
lrzxc@163.com
回复

使用道具 举报

6

主题

115

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2018-7-7
在线时间
13 小时
发表于 2018-12-4 16:43:24 | 显示全部楼层

http://www.openedv.com/forum.php ... d=284303&extra=

GPRS模块WIS800C支持MQTT/HTTP/HTTPS/TCP/UDP 连接
WIS800C 规格书已上传,可自行下载。后续几天将会上传
一些相关的案例,GPRS模块使用说明,以及应用文档。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-6-10 05:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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