OpenEdv-开源电子网

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

iap_write_appbin函数无法写数据

[复制链接]

25

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2016-6-2
在线时间
49 小时
发表于 2018-1-4 22:34:26 | 显示全部楼层 |阅读模式
1金钱
[mw_shl_code=applescript,true]u16 iapbuf[512];   
//appxaddr:应用程序的起始地址
//appbuf:应用程序CODE.
//appsize:应用程序大小(字节).
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)//2556
{
        u16 t;
        u16 i=0;
        u16 temp;
        u32 fwaddr=appxaddr;//当前写入的地址
        u8 *dfu=appbuf;
        for(t=0;t<appsize;t+=2)
        {                                                    
                temp=(u16)dfu[1]<<8;
                temp+=(u16)dfu[0];          
                dfu+=2;//偏移2个字节
                iapbuf[i++]=temp;            
                if(i==512)
                {
                        i=0;
                        STMFLASH_Write(fwaddr,iapbuf,512);       
                        fwaddr+=1024;//偏移1024 16=2*8.所以要乘以2.
                }
        }
        if(i)STMFLASH_Write(fwaddr,iapbuf,i);//将最后的一些内容字节写进去.  
}
[/mw_shl_code]

当appxaddr:应用程序的起始地址数值超过 0x08040000时,不工作,啥原因?
小的时候没问题。

最佳答案

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

解决了,是因为在APP的其他初始化里面调用了NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);,导致前面设置的向量偏移量被更新。 谢谢原子哥。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-4
在线时间
78 小时
发表于 2018-1-4 22:34:27 | 显示全部楼层
正点原子 发表于 2019-1-15 01:03
你如果用了systick中断,建议你在跳转之前,对SYSTICK的CTRL寄存器进行一次清零操作。

解决了,是因为在APP的其他初始化里面调用了NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);,导致前面设置的向量偏移量被更新。 谢谢原子哥。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-5 01:00:59 | 显示全部楼层
你的MCU什么型号?40000好大了哦
回复

使用道具 举报

25

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2016-6-2
在线时间
49 小时
 楼主| 发表于 2018-1-5 07:13:28 | 显示全部楼层
正点原子 发表于 2018-1-5 01:00
你的MCU什么型号?40000好大了哦

我 的 MCU是 F103RE,我的Bootloaderc从0x08010000开始写,写到0x08040000就写不了。
请原子大侠赐教。
谢谢!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-6 01:51:47 | 显示全部楼层
lancker 发表于 2018-1-5 07:13
我 的 MCU是 F103RE,我的Bootloaderc从0x08010000开始写,写到0x08040000就写不了。
请原子大侠赐教。
...

RE有512KB FLASH,够用才对。
有战舰板?可以在我们战舰板上试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

25

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2016-6-2
在线时间
49 小时
 楼主| 发表于 2018-1-6 09:16:47 | 显示全部楼层
本帖最后由 lancker 于 2018-1-6 09:18 编辑
正点原子 发表于 2018-1-6 01:51
RE有512KB FLASH,够用才对。
有战舰板?可以在我们战舰板上试试。

将芯片flash换为512k, 可以将程序完整下载到flash里
但始终不能正常运行,是不是内存不够??
我的BIN大小为307kb.

将mini版小的源程序(不带EMWIN的),可以成功下载并正常运行。
但如果将扩展程序中“EMWIN实验1 STemWin无操作系统移植”程序移植过去也无法正常运行。

战舰板借给朋友了,下周试一试。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-7 01:26:08 | 显示全部楼层
lancker 发表于 2018-1-6 09:16
将芯片flash换为512k, 可以将程序完整下载到flash里
但始终不能正常运行,是不是内存不够??
我的BIN ...

恩,换大容量的战舰试下。
然后,还不行的话,换个芯片试试吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

25

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2016-6-2
在线时间
49 小时
 楼主| 发表于 2018-1-7 18:57:35 | 显示全部楼层
正点原子 发表于 2018-1-7 01:26
恩,换大容量的战舰试下。
然后,还不行的话,换个芯片试试吧

不知道放在那个SD卡的APP到底有啥要求?
一些接口的初始化等 ,还有内存初管理等

我发现跳入我的程序以后,在初始化定时器立马挂掉
        TIM3_Int_Init(999,71);        //1KHZ 定时器1ms
        TIM6_Int_Init(999,719);        //10ms中断
回复

使用道具 举报

25

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2016-6-2
在线时间
49 小时
 楼主| 发表于 2018-1-7 21:07:11 | 显示全部楼层
正点原子 发表于 2018-1-7 01:26
恩,换大容量的战舰试下。
然后,还不行的话,换个芯片试试吧

远程跟朋友在战舰板子试了:
1. 通过JLINK刷好Bootloader
2. APP1的在flash起始位置为0x8010000
3. 打开 \战舰V3 资料盘(A盘)\4,程序源码\3,扩展例程.rar\3,扩展例程\3,EMWIN扩展例程\EMWIN实验1 STemWin无操作系统移植\,作为demo程序
4. 将起始位置设为0x8010000,并在user里设置生成bin
5. 使用SD下载该BIN文件,或者是JLINK直接下载,程序均不能正常启动

如使用其他程序则可正常运行,如何 \战舰V3 资料盘(A盘)\4,程序源码\2,标准例程-库函数版本.rar\2,标准例程-库函数版本\实验13 TFTLCD显示实验\
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-8 01:09:45 | 显示全部楼层
lancker 发表于 2018-1-7 18:57
不知道放在那个SD卡的APP到底有啥要求?
一些接口的初始化等 ,还有内存初管理等

没特殊要求的,只要你配置好中断偏移量,设置好地址,就可以的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

25

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2016-6-2
在线时间
49 小时
 楼主| 发表于 2018-1-12 07:16:30 | 显示全部楼层
主要原因是 向量表设置错误,需要更新为目前的便宜地址0x8010000.
回复

使用道具 举报

11

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-4
在线时间
78 小时
发表于 2019-1-10 11:35:33 | 显示全部楼层
正点原子 发表于 2018-1-8 01:09
没特殊要求的,只要你配置好中断偏移量,设置好地址,就可以的

请教原子哥,串口每帧接受1K的字节的程序,然后用iap_write_appbin()往FLASH里面写,接收一帧写一帧。。写前两帧还好好的,第三帧就出现问题,只能写进去五十几个字节,往后的都写不进去,为啥啊。起始地址为0x0804000
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-1-11 02:30:10 | 显示全部楼层
铭哥哥 发表于 2019-1-10 11:35
请教原子哥,串口每帧接受1K的字节的程序,然后用iap_write_appbin()往FLASH里面写,接收一帧写一帧。 ...

这个不好说哦,你得调试找问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

11

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-4
在线时间
78 小时
发表于 2019-1-11 14:19:12 | 显示全部楼层
正点原子 发表于 2019-1-11 02:30
这个不好说哦,你得调试找问题

再次请教原子哥,不下载引导程序,直接将设置好偏移地址的APP程序写到FLASH里面,这个程序可以正常运行吗?为什么我写完不运行
回复

使用道具 举报

11

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-4
在线时间
78 小时
发表于 2019-1-11 14:20:56 | 显示全部楼层
正点原子 发表于 2019-1-11 02:30
这个不好说哦,你得调试找问题

直接写例程里面的APP程序也不行
回复

使用道具 举报

11

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-4
在线时间
78 小时
发表于 2019-1-11 15:20:32 | 显示全部楼层
正点原子 发表于 2019-1-11 02:30
这个不好说哦,你得调试找问题

跟硬件引脚连接有关系吗,BOOT0和BOOT1都接地了。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-1-12 02:24:51 | 显示全部楼层
铭哥哥 发表于 2019-1-11 15:20
跟硬件引脚连接有关系吗,BOOT0和BOOT1都接地了。

和boot无关
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

11

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-4
在线时间
78 小时
发表于 2019-1-14 11:14:56 | 显示全部楼层

原子哥,到底能不能不写引导程序,直接写设置好偏移地址的APP程序。使用STLINK仿真,不动。FLASH DOWNLOAD页面里面的设置项需要更改吗。
回复

使用道具 举报

11

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-4
在线时间
78 小时
发表于 2019-1-14 17:21:08 | 显示全部楼层

现在引导程序确认没问题了,APP程序始终是不知道哪里出问题了,怎么确认APP程序一下呢?偏移地址设置了,中断也打开了(__enable_irq();),真是没办法了。
回复

使用道具 举报

11

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-4
在线时间
78 小时
发表于 2019-1-14 18:05:31 | 显示全部楼层

原子哥,现在可以跳转过去了,仿真发现是因为APP程序里面的滴答定时器不进中断函数,导致定时函数空循环,我以为没跳转过去呢还。。。但是我已经用__enable_irq();打开中断了啊,为啥不进中断函数呢
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-1-15 01:03:31 | 显示全部楼层
铭哥哥 发表于 2019-1-14 18:05
原子哥,现在可以跳转过去了,仿真发现是因为APP程序里面的滴答定时器不进中断函数,导致定时函数空循环 ...

你如果用了systick中断,建议你在跳转之前,对SYSTICK的CTRL寄存器进行一次清零操作。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

11

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2018-5-4
在线时间
78 小时
发表于 2019-1-15 11:06:15 | 显示全部楼层
正点原子 发表于 2019-1-15 01:03
你如果用了systick中断,建议你在跳转之前,对SYSTICK的CTRL寄存器进行一次清零操作。

还是不行啊,大哥。你每天睡那么晚啊,早点休息
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 04:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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