上一篇我们成功配置好开发环境,并点亮了led。
点灯不能停,那就做个usb模拟串口控制led。
USB虚拟串口,简称VCP,是Virtual COM Port的简写,它是利用 USB的 CDC类来实现的一种通信接口。我们可以利用USB功能,来实现一个USB虚拟串口,从而通过USB,实现电脑与单片机的数据互传。
只需要通过一个下载虚拟串口驱动程序+串口调试助手即可调试,非常实用。
打开官方的例程,关键只有几个文件cdc_desc.c/h是设备描述
序列号 、厂商产品ID、制造商、产品名、配置描述、接口描述都在这里配置
<p>#define USBD_CDC_DESC_MANUFACTURER_STRING "Artery" </p><p>#define USBD_CDC_DESC_PRODUCT_STRING "AT32 Virtual Com Port "</p><p>#define USBD_CDC_DESC_CONFIGURATION_STRING "Virtual ComPort Config" </p><p>#define USBD_CDC_DESC_INTERFACE_STRING "Virtual ComPort Interface"</p>
我们用到的虚拟串口功能在3.12有介绍
把while部分删掉,查看class.h文件看到咱们需要的发送接收函数就在这。
然后重建while循环,简单发送一个字符串
<p>unsigned char buf[] = "hello 21ic";</p><p>usb_vcp_send_data(&otg_core_struct.dev, buf, sizeof(buf));</p>
烧录程序后连接usbHS_Device接口,打开串口助手
可以看到串口正常打印。
再加一行代码实现上位机控制点灯的功能
flag == '1' ?gpio_bits_reset(GPIOF, GPIO_PINS_4):gpio_bits_set(GPIOF, GPIO_PINS_4);
时间仓促还有很多其他功能未测试,相关的修改地址在下面
<p class="MsoNormal">根据功能需求修改设备描述信息(<span lang="EN-US">cdc_desc.c, cdc_desc.h</span>)
<span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal">设备描述信息(<span lang="EN-US">g_usbd_descriptor</span>) <span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal">设备配置描述信息(<span lang="EN-US">g_usbd_configuration</span>) <span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal">其它描述 <span lang="EN-US" style="font-family:Symbol;mso-ascii-font-family:
等线;mso-ascii-theme-font:minor-latin;mso-hansi-font-family:等线;mso-hansi-theme-font:
minor-latin;mso-char-type:symbol;mso-symbol-font-family:Symbol">l</span><span lang="EN-US"> </span>根据功能修改要使用端点<span lang="EN-US">(cdc_class.c, cdc_class.h) <o:p></o:p></span></p><p class="MsoNormal">端点定义(<span lang="EN-US">cdc_class.h</span>) <span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal">端点初始化(<span lang="EN-US">class_init_handler</span>,<span lang="EN-US">class_clear_handler</span>) </p><p class="MsoNormal">修改使用的<span lang="EN-US">cdc</span>控制请求 控制请求修改(<span lang="EN-US">class_setup_handler</span>) <span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal">控制请求设置处理(<span lang="EN-US">class_ept0_rx_handler</span>) </p><p class="MsoNormal"><span lang="EN-US">cdc</span>发送接收数据处理修改<span lang="EN-US"> IN </span>数据处理(<span lang="EN-US">class_in_handler</span>) <span lang="EN-US"><o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US">OUT</span>数据处理(<span lang="EN-US">class_out_handler</span>) </p><p>
</p><p class="MsoNormal">根据需求修改端点<span lang="EN-US">FIFO</span>大小分配(<span lang="EN-US">usb_conf.h</span>)</p>
|