完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请教一下
我们需要用f4xx做usb vcp host端,用cubeide生成了usb host端的 virtual com port代码工程,能够正常识别插入的vcp设备,但是发现usb vcp device端发的数据,host不会主动收, 需要host端定时调用receive的函数才能收到,请问有没有办法让host端不轮询读呢?像串口中断接收那样,不是很懂usb cdc,请各位大佬帮帮忙 |
|
相关推荐
2个回答
|
|
USB通信基于主从结构,所有的通信传输都是由HOST发起的。即使从设备要向主发数据,也得等主发读取命令才可以,否则HOST就没法正常接收来自从设备的数据的。所以你的代码也得按这个机制来安排。
|
|
|
|
在使用F4xx作为USB VCP Host端时,可以通过使用USB中断传输来实现中断接收数据的功能,而不需要轮询读取数据。
首先,确保你的USB Host代码中已经正确设置了USB中断传输的配置参数,包括USB中断传输的端点的设置、中断传输的大小等。 然后,在应用程序中,你需要实现USB中断传输的中断处理函数。在这个中断处理函数中,你可以使用USB层提供的API函数来接收数据。 具体步骤如下: 1. 定义一个全局的缓冲区变量,用来存储接收到的数据。例如: ```c #define RX_BUFFER_SIZE 64 uint8_t rxBuffer[RX_BUFFER_SIZE]; ``` 2. 在USB中断传输的中断处理函数中,调用USB层提供的API函数来接收数据。例如: ```c void USB_HP_IRQHandler(void) { uint32_t status = USBx_HP->INTR; // 检查是否收到了USB中断传输的数据包 if (status & USB_OTG_GINTSTS_RXFLVL) { // 获取接收数据包的数量 uint32_t numPackets = (USBx_HP->RxFIFOQ[0].STS & USB_OTG_GRXSTS_PKTSTS) >> 17; // 循环接收每个数据包 for (uint32_t i = 0; i < numPackets; i++) { // 获取数据包长度 uint32_t length = (USBx_HP->RxFIFOQ[0].STS & USB_OTG_GRXSTS_BCNT) >> 4; // 将数据包从USB FIFO中读取到缓冲区中 for (uint32_t j = 0; j < length; j++) { rxBuffer[j] = USBx_HP->RxFIFOQ[0].DATA; } // 处理接收到的数据,例如打印到终端 // ... // 准备接收下一个数据包 USBx_HP->GRXSTSP; } } } ``` 在这个例子中,我们定义了一个全局的rxBuffer数组来存储接收到的数据。在中断处理函数中,我们通过轮询检查接收数据包的状态,并读取数据包的长度和内容。然后,我们可以根据需要进行处理,例如打印到终端。 请注意,在使用上述方法之前,你需要确保你的USB主机硬件支持使用中断传输。另外,具体的USB中断处理函数名称和操作可能会根据你所使用的硬件和驱动库而有所不同。请参考相关的文档和代码示例来了解更详细的信息。 希望以上信息能对你有所帮助,如果你有任何进一步的问题,请随时提问。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1627 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1550 浏览 1 评论
984 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1601 浏览 2 评论
1867浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
650浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
518浏览 3评论
536浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
506浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 14:56 , Processed in 0.756800 second(s), Total 83, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号