硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2884|回复: 5
收起左侧

[有问必答] 串口IAP问题求助

[复制链接]

3

主题

5

回帖

14

积分

新手上路

积分
14
发表于 2020-1-8 10:10:25 | 显示全部楼层 |阅读模式
在实现串口升级的程序当中,我将V5板子上的IAP程序移植到了F103的上,总是跑不通,还请各位大佬能给点调试建议。
在移植过程当中,ymodem和common文件都没有更改,更改的只是FLASH_IF文件,更改了其中的擦除函数,因为F103
没有扇区的概念,所以更改如下:
5244D.png
其中串口初始化的函数如下:
1.png
在运用超级终端进行传输的时候,传输信息如下:
超级终端能接收到消息
3.png
但是在传输文件的时候,却是这样的
100.png
运用示波器测试单片机的接收端,在点击发送按钮的瞬间,会有波形,之后就没有波形了。
调试了好久,没有头绪,还请各位能加以指点
回复

使用道具 举报

3

主题

5

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2020-1-8 20:38:01 | 显示全部楼层
问题解决了,分享一下解决方法,避免其他人像我一样入坑。
问题所在只是由于我自己的堆栈设置的太小了,我使用的工程模板默认的堆栈大小是0x00000400,也就是1k。
15.png
而在使用Ymodem传输协议的时候发生了几个嵌套层数比较深的函数调用,我猜测也就是因为这个原因导致堆栈不够使用,
从而造成堆栈溢出,所以我将堆栈大小扩大到0x00002500,也就是9k,这里我看到硬汉在设置F407的堆栈的时候,是设置的
0x00004000,也就是16k,但是基于我使用的是STM32F103C8,RAM只有20K,因此在这里我没有设置那么大(设置0x00004000应该也没问题
,毕竟我的堆只有0x00000200,512字节,也不会因为栈设置过大导致堆不够用的情况)
20.png
调试花了好长时间,在这期间我居然还怀疑通信协议的问题,也不知道谁给我的勇气。
本人水平有限,如果上述说法有错,还请各位能给与指点。



回复

使用道具 举报

3

主题

5

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2020-1-9 13:34:31 | 显示全部楼层
##再次补充##
上一个补充说的是更改了堆栈的大小,程序能够跑通,还有一个地方的更改忘记说了,
更改的地方如下:
40.png
我将判断要写入的数据和已经写入FLASH的数据是否相同的判断注释了,注释的原因
是我用jlink RTT输出的时候发现这两个数据不一样,从而导致数据传输出错,将这里注释
掉之后就能传输成功,而且传输的数据也没错。
我所疑惑的地方是V5板子的例程这里是进行判断的,而且也能传输正确,更加令我疑惑的是我用
RTT输出V5这里的数据时,两者也不一样,但是却没有传输出错,下图是我添加的RTT数据输出程序
70.png
下图是我RTT输出的数据
200.png
看数据这也不一样。。。
嗯,但是数据传输也没错,是我哪里理解出错了么?

回复

使用道具 举报

3

主题

90

回帖

99

积分

初级会员

积分
99
发表于 2020-3-14 16:04:45 | 显示全部楼层
        /* 将接收到的数据编程到flash */
                                                                        if (FLASH_If_Write(&flashdestination, (uint32_t*) ramsource, (uint16_t) packet_length/4)  == 0)
                                                                        {
                                                                                Send_Byte(ACK);
                                                                        }
各位大神你们好,我想请教一下。flashdestination这个地址是怎么偏移的。每次写入1K数据,写入地址不需要偏移+1024个字节吗?
回复

使用道具 举报

3

主题

90

回帖

99

积分

初级会员

积分
99
发表于 2020-3-14 16:34:14 | 显示全部楼层
@eric2013 硬汉大哥能指导一下吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107145
QQ
发表于 2020-3-14 17:10:32 | 显示全部楼层
lib钱 发表于 2020-3-14 16:34
@eric2013 硬汉大哥能指导一下吗?

这里是指针地址传递,在函数FLASH_If_Write里面已经对此地址做了自增操作。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-20 14:28 , Processed in 0.184927 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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