搜索
bottom↓
回复: 57

USB HID的程序,加了个Boot后,跳到APP后HID不能识别(解决,答案37楼

  [复制链接]

出0入70汤圆

发表于 2016-8-8 19:58:44 | 显示全部楼层 |阅读模式
本帖最后由 SkyGz 于 2016-8-9 15:56 编辑

一个原基于USB HID的通讯程序, 平时是插电脑上用的
所以就加了个Bootloader, 可以方便通过USB更新程序

能正常启动到Bootloader下,  也能更新程序,  通过JLINK 读整芯片数据回来 一一对比检查, 也没有错
可是 设为APP启动,  就无法识别 USB HID了,      问这是什么问题呢
HID程序 改了起始地址 就不能运行了??????????????

首先我这这USB HID是 NRF24L01的接收器, 上面有一个LED, 有通讯 就快闪, 没通讯就慢闪
经过测试,   能与另一块板子NRF24L01通信,  LED能快闪,  说明已跳到APP程序中运行,  程序也没有卡死现像

已设置向量表偏移了(见图2代码中首行),,,就是唯独USB HID无法识别了.......




如果 丢个 点亮LED的测试程序 是没有问题的

Bootloader 跳到用户APP区的代码
#define         IN_FLASH_STAR                      0x08006000



APP程序的设定也是对的



可是 HID跑不起来了, 无法识别了....



上2个程序的代码,  各位大大有时间 帮我看看咋回事


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2016-8-8 20:44:36 来自手机 | 显示全部楼层
上代码,,,

出0入0汤圆

发表于 2016-8-8 20:48:09 来自手机 | 显示全部楼层
io断开重连

出0入70汤圆

 楼主| 发表于 2016-8-8 20:58:52 | 显示全部楼层

???????啥IO重连, 如果是 拔USB, 重插????? 早就试过了...

出0入0汤圆

发表于 2016-8-8 21:04:33 来自手机 | 显示全部楼层
SkyGz 发表于 2016-8-8 20:58
???????啥IO重连, 如果是 拔USB, 重插????? 早就试过了...

那就是中断向量

出0入70汤圆

 楼主| 发表于 2016-8-8 21:23:48 | 显示全部楼层

这个..........  能 说详细点不,  打多几个字啦 ,  实在没看明白你的意思....

出0入0汤圆

发表于 2016-8-8 21:49:17 来自手机 | 显示全部楼层
boot里有开过的中断没有关,就进app了。或者app中断向量没有设置对。

出0入70汤圆

 楼主| 发表于 2016-8-8 21:57:44 | 显示全部楼层
本帖最后由 SkyGz 于 2016-8-8 22:01 编辑
sbusr 发表于 2016-8-8 21:49
boot里有开过的中断没有关,就进app了。或者app中断向量没有设置对。


这回明白了,  APP原来是使用好好的,     应该不会错吧, ,,    那应该是 BOOT里的没关了.....

出0入70汤圆

 楼主| 发表于 2016-8-8 22:51:58 | 显示全部楼层
明白是明白了,  因为 Bootloader和app都用了相同的中断地址,  所以当app启动 后所用的中断地址实际是boot的,  所以出现不能识别USB问题

可是 已在程序开头设置 向量表SCB->VTOR = FLASH_BASE | 0x6000;  仍然是无法识别

出0入70汤圆

 楼主| 发表于 2016-8-8 23:03:34 | 显示全部楼层
本帖最后由 SkyGz 于 2016-8-8 23:05 编辑


已经设置 偏移了...仍是无法识别, 见9楼

出0入0汤圆

发表于 2016-8-8 23:14:52 来自手机 | 显示全部楼层
SkyGz 发表于 2016-8-8 23:03
已经设置 偏移了...仍是无法识别, 见9楼

那就没道理了  应该只有io重连接和中断重偏移两个

挂上link一直run. 过一段时间停下  看有没进fault先

出0入70汤圆

 楼主| 发表于 2016-8-9 01:59:25 | 显示全部楼层
huangqi412 发表于 2016-8-8 23:14
那就没道理了  应该只有io重连接和中断重偏移两个

挂上link一直run. 过一段时间停下  看有没进fault先 ...

用LINK  RUN,  停下 多次偿试, 都没有进 FAULT, 但 依然是无法识别
RCC_DeInit(); NVIC_SystemReset();  这些也加上,  不管是 BOOT端 还是APP端, 都加,  或分别加上试,  依然是无法识别

但恢复为 8000000地址,  注释掉 中断偏移,  又正常...

IO重连接 又怎么回事...咋整



出0入0汤圆

发表于 2016-8-9 06:57:08 | 显示全部楼层
下载一个bus hound 看看枚举到设备没有

出0入0汤圆

发表于 2016-8-9 06:59:28 | 显示全部楼层
仔细看一下一些usb相关,或者晶振相关,或者usb gpio 复用,寄存器的默认设置,是不是boot 给修改了

出0入0汤圆

发表于 2016-8-9 07:44:14 | 显示全部楼层
仔细查一查,没有上代码,说不清楚;这个东西很成熟 了,都是细节,我刚刚还帮坛友写过一个;

出0入0汤圆

发表于 2016-8-9 08:09:32 来自手机 | 显示全部楼层
SkyGz 发表于 2016-8-9 01:59
用LINK  RUN,  停下 多次偿试, 都没有进 FAULT, 但 依然是无法识别
RCC_DeInit(); NVIC_SystemReset();   ...

上拉电阻取消 引脚浮空  让电脑识别不到usb 过一段时间重新初始化usb上啦电阻识别usb

出0入0汤圆

发表于 2016-8-9 08:09:53 来自手机 | 显示全部楼层
不然不会重枚举

出0入70汤圆

 楼主| 发表于 2016-8-9 09:11:32 | 显示全部楼层
huangqi412 发表于 2016-8-9 08:09
上拉电阻取消 引脚浮空  让电脑识别不到usb 过一段时间重新初始化usb上啦电阻识别usb ...

这个, 我上拉电阻是直接 接到3.3V的...........不是用IO脚控制的

出0入70汤圆

 楼主| 发表于 2016-8-9 09:41:27 | 显示全部楼层
shuangbang 发表于 2016-8-9 07:44
仔细查一查,没有上代码,说不清楚;这个东西很成熟 了,都是细节,我刚刚还帮坛友写过一个; ...

程序已上, 在楼主位...

出0入0汤圆

发表于 2016-8-9 09:51:06 | 显示全部楼层
SkyGz 发表于 2016-8-9 09:11
这个, 我上拉电阻是直接 接到3.3V的...........不是用IO脚控制的

那就是我第一个回帖的意思了。。  你断不开io重联当然不行   果断飞线

出100入101汤圆

发表于 2016-8-9 11:00:40 | 显示全部楼层
bootloader、app都支持usb,看来是如17楼所说的重新枚举问题

出0入70汤圆

 楼主| 发表于 2016-8-9 12:24:37 | 显示全部楼层
huangqi412 发表于 2016-8-9 09:51
那就是我第一个回帖的意思了。。  你断不开io重联当然不行   果断飞线

现 飞线 上拉电阻至PC15,

程序里 也改为PC15
#define USB_DISCONNECT                      GPIOC
#define USB_DISCONNECT_PIN                  GPIO_Pin_15
#define RCC_APB2Periph_GPIO_DISCONNECT      RCC_APB2Periph_GPIOC

实始化

    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x7000);
    Set_System();
    USB_Interrupts_Config();
    Set_USBClock();
    USB_Init();
    USB_Cable_Config(DISABLE);
    USB_Cable_Config(ENABLE);

问题依旧, 无法识别USB

出0入0汤圆

发表于 2016-8-9 12:51:15 | 显示全部楼层

看图把中断地址改一下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入70汤圆

 楼主| 发表于 2016-8-9 13:11:22 | 显示全部楼层
bad_fpga 发表于 2016-8-9 12:51
看图把中断地址改一下

程序开始 就用这改了中断表了
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x7000);

你这是直接改system_stm32f10x.c里面的,   实际上 和我上面的是一样的

出0入0汤圆

发表于 2016-8-9 13:15:35 来自手机 | 显示全部楼层
SkyGz 发表于 2016-8-9 12:24
现 飞线 上拉电阻至PC15,

程序里 也改为PC15

我晕啊 大哥你断开电阻个一秒试试  这都断开立马又挂上

出0入0汤圆

发表于 2016-8-9 13:17:02 来自手机 | 显示全部楼层
把断开语句放到最前面 并且延时一段让电脑断开

出0入0汤圆

发表于 2016-8-9 13:34:26 | 显示全部楼层
SkyGz 发表于 2016-8-9 13:11
程序开始 就用这改了中断表了
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x7000);

如果你的USB插上或拔出,可能会进入这个函数。。。你看下是不是会进入这个函数?

/*******************************************************************************
* Function Name  : Leave_LowPowerMode
* Description    : Restores system clocks and power while exiting suspend mode
* Input          : None.
* Return         : None.
*******************************************************************************/
void Leave_LowPowerMode(void)
{
  DEVICE_INFO *pInfo = &Device_Info;

  /* Set the device state to the correct state */
  if (pInfo->Current_Configuration != 0)
  {
    /* Device configured */
    bDeviceState = CONFIGURED;
  }
  else
  {
    bDeviceState = ATTACHED;
  }
    /*Enable SystemCoreClock*/
  SystemInit();//这里会重新初始化系统时钟,可以把这句屏蔽就好了。
}


然后地址又默认原来的地址了。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入70汤圆

 楼主| 发表于 2016-8-9 13:35:11 | 显示全部楼层
huangqi412 发表于 2016-8-9 13:15
我晕啊 大哥你断开电阻个一秒试试  这都断开立马又挂上

加延时 也是 一样 不行...

出0入70汤圆

 楼主| 发表于 2016-8-9 13:37:43 | 显示全部楼层
bad_fpga 发表于 2016-8-9 13:34
如果你的USB插上或拔出,可能会进入这个函数。。。你看下是不是会进入这个函数?

/******************** ...

已经注释掉 SystemInit了,  依旧

出0入0汤圆

发表于 2016-8-9 13:39:44 | 显示全部楼层
boot跳到APP之前要关闭所有中断,楼主关了吗,除了HID无法识别之外APP中其他的功能正常吗

出0入70汤圆

 楼主| 发表于 2016-8-9 14:05:38 | 显示全部楼层
yanghuanchun 发表于 2016-8-9 13:39
boot跳到APP之前要关闭所有中断,楼主关了吗,除了HID无法识别之外APP中其他的功能正常吗 ...

是用 __asm("CPSID   I");不...
对,  除了HID无法识别, 其它都正常


        __asm("CPSID   I");
        GPIO_DeInit(GPIOA);
        GPIO_DeInit(GPIOB);
        GPIO_DeInit(GPIOC);
        GPIO_DeInit(GPIOD);
        GPIO_DeInit(GPIOE);

        if (((*(vu32 *)IN_FLASH_STAR) & 0x2FFE0000 ) == 0x20000000)
        {

            JumpAddress = *(vu32 *) (IN_FLASH_STAR + 4);
            Jump_To_Application = (USER_APP) JumpAddress;
                                          //NVIC_SystemReset();

            __set_MSP(*(vu32 *) IN_FLASH_STAR );
            Jump_To_Application();
        }
        *((u32 *)0xE000ED0C) = 0x05fa0004;
    }
    while(1);

出0入0汤圆

发表于 2016-8-9 14:22:41 | 显示全部楼层
Leave_LowPowerMode
函数里面会更改系统配置,我之前移植使用内部时钟时,就被坑过,还好仿真时跳到这里面死等外部晶振起振

出0入0汤圆

发表于 2016-8-9 15:33:38 | 显示全部楼层
SkyGz 发表于 2016-8-9 14:05
是用 __asm("CPSID   I");不...
对,  除了HID无法识别, 其它都正常

我在楼主位下载的工程修改几个部分,测试通过





/*******************************************************************************
* Function Name  : Leave_LowPowerMode.
* Description    : Restores system clocks and power while exiting suspend mode.
* Input          : None.
* Output         : None.
* Return         : None.
*******************************************************************************/
void Leave_LowPowerMode(void)
{
  DEVICE_INFO *pInfo = &Device_Info;
  
  /* Set the device state to the correct state */
  if (pInfo->Current_Configuration != 0)
  {
    /* Device configured */
    bDeviceState = CONFIGURED;
  }
  else
  {
    bDeviceState = ATTACHED;
  }
  
  /*Enable SystemCoreClock*/
  SystemInit(); //之前这里我建议屏蔽,但屏蔽了不行,不知什么原因,我之前的一个产品也是由于这里导致一些问题,我的屏蔽就没问题,你可以研究一下
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-8-9 15:34:14 | 显示全部楼层
duxingkei 发表于 2016-8-9 14:22
Leave_LowPowerMode
函数里面会更改系统配置,我之前移植使用内部时钟时,就被坑过,还好仿真时跳到这里面 ...

在这里我也被坑了好久。。。

出0入70汤圆

 楼主| 发表于 2016-8-9 15:37:55 | 显示全部楼层
bad_fpga 发表于 2016-8-9 15:33
我在楼主位下载的工程修改几个部分,测试通过

好, 非常感谢....我先试试...

出0入70汤圆

 楼主| 发表于 2016-8-9 15:54:44 | 显示全部楼层
本帖最后由 SkyGz 于 2016-8-9 16:12 编辑
bad_fpga 发表于 2016-8-9 15:33
我在楼主位下载的工程修改几个部分,测试通过


可以了.............再次感谢...   还有 感谢 以上所有 解答的坛友...


总结

BOOT我没有动, 还是原来的...

原因如下
1. 没有开中断 __enable_irq(),   之前一直在想着是否漏了哪里 还没有关掉 导致的...  却忽略了中断是否打开.
2. 向量表  在system_stm32f10x.c里改 #define VECT_TAB_OFFSET  0x7000. 才成功.

    在程序开始处使用NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x7000);  以及 Leave_LowPowerMode注释SystemInit 都无效.....

3. D+上位电阻可直接3.3V, 无需IO控制.

出100入101汤圆

发表于 2016-8-9 16:02:47 | 显示全部楼层
SkyGz 发表于 2016-8-9 15:54
可以了.............再次感谢...   还有 感谢 以上所有 解答的坛友...

不需要如“huangqi412”所说的“重新枚举”么?

出0入70汤圆

 楼主| 发表于 2016-8-9 16:06:25 | 显示全部楼层
本帖最后由 SkyGz 于 2016-8-9 16:12 编辑
fengyunyu 发表于 2016-8-9 16:02
不需要如“huangqi412”所说的“重新枚举”么?


不需要, 代码里 MAIN里已去掉 USB_Cable_Config, 正常.

不过硬件上 我还是接在IO上,         等下我再飞回3.3V上试试..
------------------------------
补充: 验证 硬件上 D+直接电阻上拉 3.3V, 正常.

出100入85汤圆

发表于 2016-8-9 17:04:44 | 显示全部楼层
楼主位的代码下载下来解压缩不了,能否再传个完整的学习下。

出0入8汤圆

发表于 2016-8-9 21:55:31 | 显示全部楼层
学习了,37楼

出0入70汤圆

 楼主| 发表于 2016-8-9 22:13:59 | 显示全部楼层
whatcanitbe 发表于 2016-8-9 17:04
楼主位的代码下载下来解压缩不了,能否再传个完整的学习下。

我试下载了, 没问题.

1.你下载的文件损坏
2. 你的解压软件不支持,  我用的是WINRAR压的..

文件内程序是有BUG的, 要按37楼方法修改.

出100入85汤圆

发表于 2016-8-10 09:54:13 | 显示全部楼层
SkyGz 发表于 2016-8-9 22:13
我试下载了, 没问题.

1.你下载的文件损坏

嗯,我用手机下载下来打开是正常的。谢谢。

出0入0汤圆

发表于 2016-8-18 17:50:49 | 显示全部楼层
把楼主的BOOT 移植到 IAR6.5 版本上出现无法模拟出U盘,提示无法识别的设备。但MDK 版本就OK。IAR移只时还需要关注哪些地方? 附件是打包文件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入70汤圆

 楼主| 发表于 2016-8-18 18:15:22 | 显示全部楼层
pygh 发表于 2016-8-18 17:50
把楼主的BOOT 移植到 IAR6.5 版本上出现无法模拟出U盘,提示无法识别的设备。但MDK 版本就OK。IAR移只时还 ...

你IAR的编译优化设置吧..

出20入118汤圆

发表于 2016-8-18 18:35:54 | 显示全部楼层
能上传完整版本吗? 是stm32f103 在吗

出0入70汤圆

 楼主| 发表于 2016-8-18 18:37:07 | 显示全部楼层
ztg328 发表于 2016-8-18 18:35
能上传完整版本吗? 是stm32f103 在吗

是完整的, stm32f103c8t6的

出20入118汤圆

发表于 2016-8-18 18:40:33 | 显示全部楼层
楼主位已经修复bug了? 中断打开在main函数中打开?

出0入70汤圆

 楼主| 发表于 2016-8-18 18:42:16 | 显示全部楼层
ztg328 发表于 2016-8-18 18:40
楼主位已经修复bug了? 中断打开在main函数中打开?

好了,   在APP的程序main开头处,  开中断

出0入0汤圆

发表于 2016-8-18 21:24:22 | 显示全部楼层
应该不是优化问题。设置成无优化也出现相同的情况。无法识别设备

出0入0汤圆

发表于 2017-9-4 19:08:04 | 显示全部楼层
SkyGz 发表于 2016-8-18 18:42
好了,   在APP的程序main开头处,  开中断

楼主,我遇到的问题跟你有点类似,有空的时候能帮忙看下吗?谢谢了
USB HID的程序,加了个Boot后,win7下跳到APP后HID不识别,win10下OK
https://www.amobbs.com/thread-5680114-1-1.html
(出处: amoBBS 阿莫电子论坛)

出0入0汤圆

发表于 2017-9-4 19:22:21 | 显示全部楼层
SkyGz 发表于 2016-8-9 15:54
可以了.............再次感谢...   还有 感谢 以上所有 解答的坛友...

这里的有点疑问,为什么要宏定义中断向量才有效?

出0入70汤圆

 楼主| 发表于 2017-9-4 19:57:15 | 显示全部楼层
gaowh 发表于 2017-9-4 19:22
这里的有点疑问,为什么要宏定义中断向量才有效?

不细究这问题, 反正就是 在system_stm32f10x.c里改 向量才行,  别处改都无效.

出0入0汤圆

发表于 2017-9-4 20:50:10 | 显示全部楼层
楼主这程序怎么用的?感觉还不错,通过u口升级软件?

出0入0汤圆

发表于 2017-9-6 09:22:34 | 显示全部楼层
bad_fpga 发表于 2016-8-9 15:33
我在楼主位下载的工程修改几个部分,测试通过

你好,我遇到的问题跟楼主的有点类似,有空能帮忙看下吗?谢谢了!

USB HID的程序,加了个Boot后,win7下跳到APP后HID不识别,win10下OK
https://www.amobbs.com/thread-5680114-1-1.html
(出处: amoBBS 阿莫电子论坛)

出0入0汤圆

发表于 2019-10-5 13:06:00 | 显示全部楼层
你上位机用的是哪个?自己做的上位机?

出0入70汤圆

 楼主| 发表于 2019-10-5 15:00:41 | 显示全部楼层
lovely-teddy 发表于 2019-10-5 13:06
你上位机用的是哪个?自己做的上位机?

没有上位机,  是创建个虚拟U盘,  把固件 复制进去,  重上电即实现程序更新.

出0入0汤圆

发表于 2019-10-5 15:07:27 | 显示全部楼层
SkyGz 发表于 2019-10-5 15:00
没有上位机,  是创建个虚拟U盘,  把固件 复制进去,  重上电即实现程序更新. ...

你目前的程序是HID,怎么创建MSD?

出0入70汤圆

 楼主| 发表于 2019-10-5 17:12:58 | 显示全部楼层
lovely-teddy 发表于 2019-10-5 15:07
你目前的程序是HID,怎么创建MSD?

是,  详细 楼主位源码, Ok
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 23:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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