调试STM32的USB CDC设备已经有好多次了,可以看一下前面写的日志,针对不同的STM32 MCU都进行了调试。原本以为STM32F4会很简单,可处处是坑,已经调到半夜才解决问题,把问题重新梳理。
我现在使用的芯片时STM32F401,在STM32CubeMX中,按照以下步骤设置。
1、设置为全速从设备,不做USB电源检测。
2、使能CDC,其它采用默认设置。
按照上述设置生成的程序,下载到芯片后,接入计算机,默认是这样的
仔细查看细节问题是这样的
找了好久不能解决问题,网上有一种说法是,是更改usbd_conf.h文件,如下图所示,将USBD_MAX_NUM_CONFIGURATION设置为2,采用这种方法后,计算机可以正常认出该设备,但不能完成通讯操作。
实在没有方法了,试着调整堆栈数值,偶然解决,我现在调整的数值如下,该数值在startup_stm32f401xc.s文件中。
现在已经可以正常通信了,如下图。
主逻辑代码如下:
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需改进一下。
原创性文章,转载请注明出处CSDN:http://blog.csdn.net/qingwufeiyang12346。