调试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需改进一下。
关键字:STM32F4 USB CDC 无法启动
引用地址:
STM32F4 开发笔记8:解决USB CDC “该设备无法启动”问题
推荐阅读最新更新时间:2024-03-16 16:13
C8051F340的USBXpress开发包USB通信设计
传统的USB设备驱动程序编写异常复杂,程序员往往很难入手。Silicon Laboratories公司提供的USBXpress开发包大大简化了USB通信的应用和相关驱动程序的开发,只要做好开发前的准备工作,USBXpress开发包完全可以实现USB通信的所有功能。本文介绍USB通信开发的全过程,以及在开发过程中需要注意的事项。(主要针对设备端USB通信进行讲解) 1 USBXpress简介 由Silicon Laboratories公司推出的USBXpress开发包涵盖了主机端和设备端的所有函数功能,支持C8051F32X、C8051F34X和CP210X设备的USB通信。USBXpress开发包中包含主机端的设备驱动、主机端
[单片机]
精确测量嵌入式USB信号质量
一 前言 为了满足USB2.0一致性应用的需求,所有的USB2.0设计都必须满足USB IF发布的USB2.0物理层一致性测试要求。相对于比较成熟的PC平台USB2.0 主机测试技术而言,基于通信类终端的嵌入式USB2.0 主机的测试面临更多的挑战。特别是进行二次开发的应用厂商而言,如何满足USB2.0物理层一致性测试要求很大程度上需要原厂在测试模式以及测试封包方面提供更多的支持。但应用需求的多样化导致了许多设计架构脱离了原厂的测试状态机控制范畴,问题接踵而来。 二 嵌入式USB2.0主机测试 1 产品USB部分原理及测试环境 产品USB控制原理 USB控制主机采用某大型通讯类方案提供商的IAD
[测试测量]
扩展USB连接
USB(通用串行总线)是现在支持许多通用现成的外围设备,如键盘,鼠标,打印机和存储设备等的公认作为首选的连接方案。对于致力于工业和消费市场的设备制造商来说,USB也成为满足其连接至PC需求的一个优先的选择。事实上,对于任何一个使用标准的PC作为控制器设备的应用,USB接口的好处是显而易见的。虽然大批量短生命周期的通用外设可以不使用USB接口,一些有更长的生命周期的定制型应用则需要添加USB连接来解决现代PC缺乏传统的连接接口的问题。 在这些现代PC所不支持的接口中,RS-232串行接口是一个典型的例子,从软件的角度看,RS-232相比USB更容易实现且同样仍然满足多种应用需求。但是大多数现代PC已经去掉了RS-232接口。 简单
[嵌入式]
USB接口技术在外置式采样系统中的应用
一、前言: ---- 中高速、高精度连续采样系统由于采集的数据量大,通常将控制和数据通道部分做成板卡的形式,占用PC的一个ISA或PCI总线扩展槽,通过ISA或PCI总线的高速数据传输率(往往通过上述总线的DMA模式)实现PC与采样系统的大容量数据交换。但是,这种内置式形式很容易受到PC机箱内高频干扰的影响,降低系统的采样精度和稳定性。如果能够将整个系统做成外置式形式,不仅能够提高系统的采样精度和稳定性,还能增强系统的灵活性,同时还有利于系统的维护。 ---- 普通的外置式采样系统一般通过RS-232C与PC连接,由于PC机的限制,RS-232C最高数据传输率不超过115KBPS(基于串口芯片16550,如基于8250
[模拟电子]
STM32 keyboard USB键盘功能的实现
下面编写下USB键盘的程序,依然在CustomHID工程上修改。 依旧最先修改的是usb_desc.c文件。我们从设备描述符开始讲述。 设备描述符需要修改下bMaxPacketSize(最大包长度)域为0x08,因为被本次的工程最大通讯长度就是8字节,正好符合USB规范,所以这里改成0x08,还要注意在usb_prop.c的DEVICE_PROP Device_Property结构体里注册的最大长度也要是0x08,与设备描述符的要相同(我们在下文说到)。这里最好还要修改下PID和VID的域的值,以防该PID和VID对应的设备已经在电脑里有了驱动而导致功能不正常。 /* USB标准设备描述符*/ const uint8_t Keyb
[单片机]
12-S3C2440驱动学习(九)嵌入式linux-USB驱动程序(未完待续)
1、学习思路 一个USB设备插入到系统中时,会被系统识别出USB设备,并通过系统上的USB总线驱动程序通过约定好的规范询问USB设备的信息(描述符),如设备名称。USB总线驱动程序负责:识别USB设备,给USB设备找到对应的驱动程序(自己开发)。USB设备通过约定好的规范,把描述符发送给USB总线驱动程序。 问1. 既然还没有 驱动程序 ,为何能知道是 android phone 答1. windows里已经有了USB的总线驱动程序,接入USB设备后,是 总线驱动程序 知道你是 android phone ,提示你安装的是 设备驱动程序 。 问2. USB设备种类非常多,为什么一接入电脑,就能识别出来? 答2.
[单片机]
基于USB的CAN总线适配器设计
摘要:提出一种使用USB接口实现CAN总线网络与计算机连接的方案。讨论了CAN总线与计算机之间的硬件接口电路,同时分析了固件编程方法及USB驱动程序设计思路。
关键词:USB CAN总线 固件编程 适配器
现场总线作为二十世纪80年代发展起来的新兴技术,在工业现场已有了广泛的应用。在比较有影响力的几种现场总线中,CAN总线以其突出的优点不仅大量应用于工业现场,而且在楼宇自动化、智能终端设备等民用领域也有了长足的发展。
现场总线网络技术的实现需要与计算机相结合。以往CAN总线网络与计算机的连接采用RS232、ISA或PCI接口。但是随着计算机接口技术的发展,ISA接口已经逐渐被淘汰;RS232接口数据传输率太低;PCI虽然仍是
[应用]
STM32学习笔记之USB数据接收和发送流程分析
既然学习了USB,那就必须的搞懂USB设备与USB主机数据是怎么通讯的。这里主要讲设备端,因为我们的代码是做USB设备用的。 我们需要必须要定义了USB中断。起始在STM32的中断向量表中给USB两个中断,我们可以在stm32f10x.h中找到这两个中断: USB_HP_CAN1_TX_IRQn = 19, /*! USB Device High Priority or CAN1 TX Interrupts */ USB_LP_CAN1_RX0_IRQn = 20, /*! USB Device Low Priority or CAN1 RX0 Interrupts */ 这两个中断是USB与CAN复用的中断,在做USB用时,
[单片机]