我从STM32CubeF4中为USB CDC示例构建了代码。我在usbd_cdc_if.c中添加了CDC_Receive_FS()的缺少接收代码。
我将此加载到了STM32F4 Discovery中,并且可以正常工作。在Tera Term上键入的字符将返回并显示在Tera Term上。
我希望这里的人可以给我一些有关USB CDC固件工作方式的知识,特别是,这是由USB -D和+ D引脚上的电压电平发生电平变化而产生的中断驱动的,还是在某个地方启动了一个无限的while循环,它只是在轮询以等待某些数据出现?
引起我问题的原因是,我看到可以通过在main.c中的无限while循环内切换GPIO引脚的状态来使该板上的LED闪烁。但是,USB的main.c内的while循环中根本没有任何内容。那么,该USB CDC固件如何从Tera Term获取和发送字符。
最佳答案
我将用2分钟的时间回答您,而不是给您讲课。接收是通过中断完成的。非常非常简单,硬件可以看到D +/D-上的电压变化,并根据初始化功能标记中断。中断调用HAL_PCD_IRQHandler,后者调用usbd_conf.c文件中的USBD_LL_DataInStage。最后调用usbd_cdc.c文件中的函数USBD_CDC_DataIn。这是您的出发点,但这并不简单。要执行您想要的操作,您可能必须停止到UART的输出并仅在主循环中处理它。
关于c - STM32 STM32CubeF4 USB CDC操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30226955/