OpenEdv-开源电子网

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

USB-HOST IAP升级程序,有中断相关问题

[复制链接]

8

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2018-8-14
在线时间
37 小时
发表于 2019-12-5 11:19:31 | 显示全部楼层 |阅读模式
10金钱
用正点原子的串口IAP程序,移植了一份USB的升级程序,出现的一些问题

USB—IAP功能:识别U盘中的驱动文件(FAT32),读到APP-BUFF中,然后while循环中写入内部FLASH,跳转到APP
USART-APP功能:串口 ,LED
USB-APP功能:U盘读写,串口 ,LED
问题;
1、如果是插着U盘升级,在拔出U盘的时候,APP程序会死机。如果拔出U盘后在升级就没事,是不是跳转前要屏蔽一些中断啊?
2、升级USB-APP,怎么都不好使,跳到APP就死了,我尝试跳转前屏蔽中断,但好像没什么作用?

怀疑是中断问题引起的,但是具体屏蔽那些中断,在哪屏蔽,请教大佬

IAP代码

int USBH_USR_MSC_Application(void)
{
                res = f_open(&file, "0:driver.bin", FA_READ);
                if (res == FR_OK)
    {
                        //获取驱动文件大小
      applenth = f_size(&file);
      if (applenth)  /* EOF or Error */
      {
        printf("开始更新固件...\r\n");
                                printf("代码长度:%dBytes\r\n",applenth);
                                res = f_read(&file,APP_RX_BUF,applenth,&fnum);//APP程序复制到缓存
                                if(res == FR_OK)
                                {
                                        APP_RX_STA = 1;
                                        USBH_USR_ApplicationState = USH_USR_FS_READLIST;
                                }else
                                {
                                        printf("更新固件Eorr:%d\r\n",res);
                                }
      }
      else
      {
        printf("固件损坏Eorror:%d\r\n",res);
                                /* close file and filesystem */
                                USBH_USR_ApplicationState = USH_USR_FS_WRITEFILE;
      }
    }
                else
    {
      printf("没有可以更新的固件!\r\n");
                        USBH_USR_ApplicationState = USH_USR_FS_DRAW;
    }
                f_close(&file);

}


while (1)
  {
                USBH_Process(&USB_OTG_Core, &USB_Host);
                if((FF_TEST == 1) && (APP_RX_STA == 1))
                {
//                        INTX_DISABLE();
                        if(applenth)
                        {
                                if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
                                {         
                                        iap_write_appbin(FLASH_APP1_ADDR,APP_RX_BUF,applenth);//更新FLASH代码
                                        printf("固件更新完成!\r\n");       
                                }
                                applenth = 0;
                        }
                       
                        if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
                        {         
                                printf("开始执行FLASH用户代码!!\r\n");
                                iap_load_app(FLASH_APP1_ADDR);//执行FLASH APP代码
                        }else
                        {
                                printf("非FLASH应用程序,无法执行!\r\n");          
                        }

                        FF_TEST = 0;
                        APP_RX_STA =0;
                }

}

最佳答案

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

USB-APP也可以运行了,是USB-APP中的TIM定时器问题,这个中断延时去掉就可以运行了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2018-8-14
在线时间
37 小时
 楼主| 发表于 2019-12-5 11:19:32 | 显示全部楼层
USB-APP也可以运行了,是USB-APP中的TIM定时器问题,这个中断延时去掉就可以运行了
回复

使用道具 举报

8

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2018-8-14
在线时间
37 小时
 楼主| 发表于 2019-12-5 13:36:22 | 显示全部楼层
电脑用串口助手接受数据有时候会出现 0D 0A   这个换行回车符怎么回事 ?我没有发这个啊,怎么会显示出来
回复

使用道具 举报

8

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2018-8-14
在线时间
37 小时
 楼主| 发表于 2019-12-5 13:37:43 | 显示全部楼层
看了这个帖子 STM32-F407---USB-IAP升级问题
http://www.openedv.com/forum.php ... &fromuid=114349
(出处: OpenEdv-开源电子网)
我在USB-IAP中把串口1全删了,结果APP中串口1也不能用了,,,,这是什么情况?
串口都是中断接受的,感觉这个IAP只要是有中断的程序,升级就很容易出问题
有没有大佬指导一下
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4307
金钱
4307
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-12-5 13:54:21 | 显示全部楼层
帮顶!
回复

使用道具 举报

8

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2018-8-14
在线时间
37 小时
 楼主| 发表于 2019-12-6 07:44:19 | 显示全部楼层
求大佬
回复

使用道具 举报

8

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2018-8-14
在线时间
37 小时
 楼主| 发表于 2019-12-6 08:50:51 | 显示全部楼层
应该是我APP中所有带中断的程序都不正常工作,其他正常
但是我APPmian程序中有这句SCB->VTOR = FLASH_BASE | 0x10000; /* Vector Table Relocation in Internal FLASH. */
不应该出现向量问题啊/??
回复

使用道具 举报

8

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2018-8-14
在线时间
37 小时
 楼主| 发表于 2019-12-6 10:20:29 | 显示全部楼层
通过USB-IAP升级完USART-APP需要复位一次,APP串口中断才正常,不复位串口中断不响应,这是啥毛病?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-6 01:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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