打印
[应用相关]

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

[复制链接]
1220|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,其它采用默认设置。


使用特权

评论回复
地板
labasi|  楼主 | 2019-6-18 13:14 | 只看该作者

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


使用特权

评论回复
5
labasi|  楼主 | 2019-6-18 13:14 | 只看该作者

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


使用特权

评论回复
6
labasi|  楼主 | 2019-6-18 13:15 | 只看该作者

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


使用特权

评论回复
7
labasi|  楼主 | 2019-6-18 13:15 | 只看该作者

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


使用特权

评论回复
8
labasi|  楼主 | 2019-6-18 13:15 | 只看该作者

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


使用特权

评论回复
9
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需改进一下。


使用特权

评论回复
10
香水城| | 2019-6-18 19:59 | 只看该作者
是的,关于USB,TCP,GUI等应用时,多注意堆栈这个地方的配置。

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

使用特权

评论回复
11
labasi|  楼主 | 2019-7-4 15:59 | 只看该作者
得到城主的肯定 不容易啊

使用特权

评论回复
12
renzheshengui| | 2019-7-8 11:45 | 只看该作者

非常感谢楼主分享

使用特权

评论回复
13
wakayi| | 2019-7-8 11:50 | 只看该作者

非常感谢楼主分享

使用特权

评论回复
14
wowu| | 2019-7-8 11:54 | 只看该作者

非常感谢楼主分享

使用特权

评论回复
15
木木guainv| | 2019-7-8 11:56 | 只看该作者

非常感谢楼主分享

使用特权

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

本版积分规则

44

主题

3308

帖子

2

粉丝