[应用相关]

解决USB CDC “该设备无法启动”问题(转载)

[复制链接]
1372|14
手机看帖
扫描二维码
随时随地手机跟帖
labasi|  楼主 | 2019-6-18 13:13 | 显示全部楼层 |阅读模式
调试STM32的USB CDC设备已经有好多次了,可以看一下前面写的日志,针对不同的STM32 MCU都进行了调试。原本以为STM32F4会很简单,可处处是坑,已经调到半夜才解决问题,把问题重新梳理。

    我现在使用的芯片时STM32F401,在STM32CubeMX中,按照以下步骤设置。


使用特权

评论回复
labasi|  楼主 | 2019-6-18 13:13 | 显示全部楼层

1、设置为全速从设备,不做USB电源检测。


使用特权

评论回复
labasi|  楼主 | 2019-6-18 13:14 | 显示全部楼层

2、使能CDC,其它采用默认设置。

70.jpg


使用特权

评论回复
labasi|  楼主 | 2019-6-18 13:14 | 显示全部楼层

按照上述设置生成的程序,下载到芯片后,接入计算机,默认是这样的

70.jpg


使用特权

评论回复
labasi|  楼主 | 2019-6-18 13:14 | 显示全部楼层

仔细查看细节问题是这样的

70.jpg


使用特权

评论回复
labasi|  楼主 | 2019-6-18 13:15 | 显示全部楼层

找了好久不能解决问题,网上有一种说法是,是更改usbd_conf.h文件,如下图所示,将USBD_MAX_NUM_CONFIGURATION设置为2,采用这种方法后,计算机可以正常认出该设备,但不能完成通讯操作。

70.jpg


使用特权

评论回复
labasi|  楼主 | 2019-6-18 13:15 | 显示全部楼层

实在没有方法了,试着调整堆栈数值,偶然解决,我现在调整的数值如下,该数值在startup_stm32f401xc.s文件中。

70.jpg


使用特权

评论回复
labasi|  楼主 | 2019-6-18 13:15 | 显示全部楼层

现在已经可以正常通信了,如下图。

70.jpg


使用特权

评论回复
labasi|  楼主 | 2019-6-18 13:16 | 显示全部楼层
主逻辑代码如下:

int main(void)
{
        uint8_t data[10] = {0,1,2,3,4,5,6,7,8,9};

  MX_ADC1_Init();
  MX_SPI1_Init();
  MX_USB_DEVICE_Init();

  while (1)
  {
                if (Target.IsbMilliSecond_1000() == TRUE)
                {
                        //¹¤×÷ָʾµÆ
                        Target.HAL.LED.Turn();       
                        CDC_Transmit_FS(data, 10);                       
                }       
  }
}
    这种调整方法,难度过大了,STM32CubeMX需改进一下。


使用特权

评论回复
香水城| | 2019-6-18 19:59 | 显示全部楼层
是的,关于USB,TCP,GUI等应用时,多注意堆栈这个地方的配置。

其 SIZE我们可以参考STM32相关工程例程。

使用特权

评论回复
labasi|  楼主 | 2019-7-4 15:59 | 显示全部楼层
得到城主的肯定 不容易啊

使用特权

评论回复
renzheshengui| | 2019-7-8 11:45 | 显示全部楼层

非常感谢楼主分享

使用特权

评论回复
wakayi| | 2019-7-8 11:50 | 显示全部楼层

非常感谢楼主分享

使用特权

评论回复
wowu| | 2019-7-8 11:54 | 显示全部楼层

非常感谢楼主分享

使用特权

评论回复
木木guainv| | 2019-7-8 11:56 | 显示全部楼层

非常感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

3398

帖子

2

粉丝