OpenEdv-开源电子网

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

原子哥串口IAP实验中,applenth一直等于1,向各位大哥大姐求助

[复制链接]

5

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-3-19
在线时间
1 小时
发表于 2015-7-27 21:05:32 | 显示全部楼层 |阅读模式
5金钱
         


各位大哥大姐,帮帮小弟我。这是原子哥的代码,我将代码移植到F207的板子上做此实验,当我用丁丁调试助手发送完BIN文件,在Debug模式下applenth的值是1,后面想iap_write_appbin, 这个if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)就一直判断不过。所以我觉得是串口接收BIN文件出了问题。
          小弟有如下几个疑问,希望各位赐教,
       1. 串口是发送一个字就产生一次中断吗?因为只有是这样,applenth才不会=1啊,貌似我才产生了一次中断,就接收了一个字节。
       2. 在if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)中,应该是判断RAM中0X20001004此地址中存放的是否为0x08XXXXXX,我不太明白,根据原子哥的思路,此地址应该是UARST_BUF啊,应该是接收到的BIN文件啊,为什么是0x08XXXXXXXX。
         小弟是菜鸟,希望各位不吝赐教,感激不尽。

最佳答案

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

STM32是小端模式。 也就是多字节访问的时候,是高字节在前,低字节在后的。 88 06 00 20等效:0X20000688。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-27 21:05:33 | 显示全部楼层
STM32是小端模式。
也就是多字节访问的时候,是高字节在前,低字节在后的。
88 06 00 20等效:0X20000688。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-27 22:27:28 | 显示全部楼层
1,是的。
2,你得明白STM32的bin文件格式,最开始4个字节,是堆栈地址,接着4个字节,是复位中断服务函数的地址。所以,必定是在flash内的。。。flash范围是多少?自然是0X0800 0000~0X08XXXXXXX了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2015-3-19
在线时间
1 小时
 楼主| 发表于 2015-7-29 17:10:11 | 显示全部楼层
回复【2楼】 正点原子 :
---------------------------------
           原子哥非常感谢您的回答。
          关于您的解答,我下去又有琢磨。
          if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)这句话,我的理解是:vu32根据定义是可读取的32位整形变量,那么
(vu32*)(0X20001000+4)就是将0x20001004这个指针变量强制转换为32位整形指针,*(vu32*)(0X20001000+4)这就是在0x20001004这个地址读取一个32位的数据。与0xFF000000进行与操作判断是否为0x08000000就是判断这个数据的第一个字节是否为0x08。
         而在此地址应该BIN文件,我生成的BIN文件我用HEX WORKSHOP此软件打开它可以看到前五个字节是


         然后我在Debug模式下,在Keil的memory窗口中查询0x20001000此地址中的数据,发现也是


         这说明我的BIN文件已经成功接收到RAM中,但是,小弟不懂,这五个字节并非0x08啊?
         然后小弟设置了一个临时变量

然后在debug模式下将其加入                       watchdog中查看,结果是

,其第一个字节还真是0x08。
         小弟不死心,将临时变量变了一下

,发现:
        

。这好像我的前面直接用HEX WORKSHOP或者直接在memory中查看并不一致啊。。小弟实在不明白自己哪里理解错误了。
        请原子哥过目一下,感激不尽!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 06:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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