STM32 STM32CubeF4 USB CDC操作

时间:2015-05-13 23:37:38

标签: c embedded usb stm32 cdc

我为STM32CubeF4构建了用于USB CDC示例的代码。我在usbd_cdc_if.c中添加了缺少的CDC_Receive_FS()接收代码。 我将它加载到我的STM32F4 Discovery中,它可以工作。在Tera Term上输入的字符将返回并显示在Tera Term上。

我希望有人在这里,可以给我一些关于这个USB CDC固件是如何工作的知识,具体来说,这是由USB -D和+上电压电平转换时产生的中断驱动的。 D引脚,还是在某处启动了无限循环,它只是轮询等待一些数据出现? 提示我的问题的是,我看到可以通过在main.c中的无限循环内切换GPIO引脚的状态来使该板上的LED闪烁。但是,在main.c中,这个while循环中没有任何东西用于USB。那么这个USB CDC固件如何从/向Tera Term获取并发送角色。

3 个答案:

答案 0 :(得分:6)

我会花2分钟回答你而不是教你。接收是通过中断完成的。非常非常简单,硬件看到D + / D-上的电压变化,并根据初始化函数标记中断。中断调用HAL_PCD_IRQHandler,它调用usbd_conf.c文件中的USBD_LL_DataInStage。最终调用usbd_cdc.c文件中的函数USBD_CDC_DataIn。有你的出发点,但并不简单。要做你想做的事,你可能必须停止输出到UART并在主循环中处理它。

答案 1 :(得分:3)

这个问题对于这个论坛来说是广泛的,而不是针对特定问题的实际问题。但是,正如一些提示,你可能

  • 阅读USB规范,至少是一些基本概述(刚从维基百科开始)。通过在软件中搜索GPIO无法使用USB(参见下一点)
  • 阅读STM32F4xx参考手册。这非常全面。
  • 阅读演示的源代码。这应该回答所有问题。
  • 要跟踪执行路径,您应该记住C始终以main()函数开头,因此这是一个很好的开始,看看发生了什么。 (免责声明:我很清楚,它从启动开始,但这可能会让初学者更加困惑)。

如果你想使用USB,你无论如何都必须这样做,所以你现在也可以开始使用它。是的,这需要一些时间;毫不奇怪,工程师们在开始大型项目之前已经了解了这么多年。

所有信息均可在网上免费获取。

而且,是的,USB很可能是中断驱动的,也可能使用DMA来传输数据。

答案 2 :(得分:-1)

我只是想让某人把手指放在启动它的特定代码上。在main.c中我看到,MX_USB_DEVICE_Init,我跟着它,我看到,USBD_Start,我跟着它,我看到,USBD_LL_Start,我跟着它,我看到,HAL_PCD_Start,我跟着它,我看,USB_DevConnect。最后一个,评论是它启动USB OTG设备。

所以,沿着这条路径,我没有看到实际读取我在终端上键入的字符的内容。我可能太厚了,或者我需要有人握住我的手。我一直在阅读很多STM手册,其中一些是好的,其中一些是阅读的困难,其他人有时令人困惑。

我真的不想写一个USB驱动程序,我想在main.c中输入一些字符并根据它们的内容做一些事情并将一些字符返回到原始硬件。

类似的想法是,我想要建立一个胸部,我不想学习如何混合各种化学品和学习制作胶水的配方,我不太热衷于学习如何开采和制造钢铁然后建造一个钢铁厂和一个轧机,然后最终制作木螺钉,我不想制作锯,桌子或其他等......我只想购买一些我需要建造的东西胸部,我想砍木头,粘木头,拧木头,完成木头。

所以,如果有人愿意伸手去抓住它上面的一段代码,我就会很感激。

当我在终端上输入一个字符时,说出一个' a'该字符是如何被STM32 USB CDC代码摄取的?是什么让它开始?是否存在轮询输入的内容,或者电压电平变化是否会导致中断?