[AT32F405] 【AT-START-F405测评】usb虚拟串口收发测试

[复制链接]
 楼主| 新曲难觅旧知音 发表于 2024-5-11 14:26 | 显示全部楼层 |阅读模式
上一篇我们成功配置好开发环境,并点亮了led。
点灯不能停,那就做个usb模拟串口控制led。
USB虚拟串口,简称VCP,是Virtual COM Port的简写,它是利用 USB的 CDC类来实现的一种通信接口。我们可以利用USB功能,来实现一个USB虚拟串口,从而通过USB,实现电脑与单片机的数据互传。
只需要通过一个下载虚拟串口驱动程序+串口调试助手即可调试,非常实用。
打开官方的例程,关键只有几个文件cdc_desc.c/h是设备描述
序列号 、厂商产品ID、制造商、产品名、配置描述、接口描述都在这里配置
  1. <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>

4ce0efee7b1cb3b95668ae837dae55a9
我们用到的虚拟串口功能在3.12有介绍
0c520f680f53ab66a7f80863e0dbdd05
把while部分删掉,查看class.h文件看到咱们需要的发送接收函数就在这。
6f4bfaea0693135a7a783ae52881f071
然后重建while循环,简单发送一个字符串
  1. <p>unsigned char buf[] = "hello 21ic";</p><p>usb_vcp_send_data(&otg_core_struct.dev, buf, sizeof(buf));</p>

15f1a6b4862e9366f2a24b02a8bc6319
烧录程序后连接usbHS_Device接口,打开串口助手
5024a8457a35399ec8b442ee31cc1e3b
可以看到串口正常打印。
再加一行代码实现上位机控制点灯的功能
  1. flag == '1' ?gpio_bits_reset(GPIOF, GPIO_PINS_4):gpio_bits_set(GPIOF, GPIO_PINS_4);

8b614266f8db8ac5c3bd203d31e75916

时间仓促还有很多其他功能未测试,相关的修改地址在下面
  1. <p class="MsoNormal">根据功能需求修改设备描述信息(<span lang="EN-US">cdc_desc.c, cdc_desc.h</span>)
  2. <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:
  3. 等线;mso-ascii-theme-font:minor-latin;mso-hansi-font-family:等线;mso-hansi-theme-font:
  4. 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>



















  5. </p><p class="MsoNormal">根据需求修改端点<span lang="EN-US">FIFO</span>大小分配(<span lang="EN-US">usb_conf.h</span>)</p>


您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

144

帖子

1

粉丝
快速回复 返回顶部 返回列表