[开发工具] 【AT-START-F425测评】+USB CDC 代码做的很不错

[复制链接]
2208|15
 楼主| qjp1988113 发表于 2022-7-6 17:23 | 显示全部楼层 |阅读模式
本帖最后由 qjp1988113 于 2022-7-6 17:23 编辑

今天有空,测试了下F425的USB CDC,这个功能还是很有用的。我就喜欢用,能节省一个串口电路,而且速度几乎能达到低速USB的12M。
USB各种相关协议对于初学者或者不深入了解的人来说,还是挺复杂的。但是各大厂家几乎推出的例子都涵盖USB的各种应用例子。
雅特力的也不例外。我们只要在例子上,找到收发函数,再上面修改一下,即可应用。第一,设备描述符。我们可以更改成自己想要的名字,而不必每次都是官方的名称。
A1.png
第二,USB发送接收函数:
A2.png
官方的例子,是在主函数循环里面,一直接收,但接收到数据后,直接把之前接收的发送回去。
我测试了下,这个例子确实很流畅。稍微修改就能作为一个应答机构,可以用在项目上。
最早我用沁恒的CH375,就是采用读取中断标志,然后接收数据,然后判断标志,然后执行动作。
这里也一样:
  1.   while(1)
  2.   {
  3.     /* get usb vcp receive data */
  4.     data_len = usb_vcp_get_rxdata(&otg_core_struct.dev, usb_buffer);

  5.     if(data_len > 0 || send_zero_packet == 1)
  6.     {

  7.       /* bulk transfer is complete when the endpoint does one of the following
  8.          1 has transferred exactly the amount of data expected
  9.          2 transfers a packet with a payload size less than wMaxPacketSize or transfers a zero-length packet
  10.       */
  11.       if(data_len > 0)
  12.         send_zero_packet = 1;

  13.       if(data_len == 0)
  14.         send_zero_packet = 0;

  15. //      timeout = 5000000;
  16. //      do
  17. //      {
  18. //        /* send data to host */
  19. //        if(usb_vcp_send_data(&otg_core_struct.dev, usb_buffer, data_len) == SUCCESS)
  20. //        {
  21. //          break;
  22. //        }
  23. //      }while(timeout --);
  24.                         switch(usb_buffer[0])
  25.                         {
  26.                                 case '1':
  27.                                 {
  28.                                         at32_led_on(LED2);
  29.                                         usb_vcp_send_data(&otg_core_struct.dev,(uint8_t*) "LED2 is on!\r\n", strlen("LED2 is on!\r\n"));
  30.                                 }
  31.                                 break;
  32.                                 case '2':
  33.                                 {
  34.                                         at32_led_off(LED2);
  35.                                         usb_vcp_send_data(&otg_core_struct.dev,(uint8_t*) "LED2 is off!\r\n", strlen("LED2 is off!\r\n"));
  36.                                 }break;
  37.                                 default:break;
  38.                         }
  39.     }
  40.   }
编译后,下载,在串口助手里面发送‘1’或者‘2’,来开启关闭LED2。
A3.png
串口输出正常,板子LED2也熄灭正常。
这片文章,只是简单的测试一下AF32F425的USB CDC 功能,并未去详细的查看USB内部协议的具体实现。
总体,感觉还是很不错!

jackcat 发表于 2022-7-8 09:49 | 显示全部楼层
程序占用的内存大吗  
 楼主| qjp1988113 发表于 2022-7-8 15:44 | 显示全部楼层
jackcat 发表于 2022-7-8 09:49
程序占用的内存大吗

不大
tabmone 发表于 2022-7-8 15:57 | 显示全部楼层
有驱动程序吗
saservice 发表于 2022-7-8 16:30 | 显示全部楼层
支持多大的波特率呢?
jtracy3 发表于 2022-7-9 12:15 | 显示全部楼层
usb设备可以。
lzmm 发表于 2022-7-9 13:08 | 显示全部楼层
这个节省了一个串口。   
phoenixwhite 发表于 2022-7-9 13:54 | 显示全部楼层
虚拟串口了吗   
elsaflower 发表于 2022-7-9 14:50 | 显示全部楼层
上电以后识别不到数据呢  
sdlls 发表于 2022-7-9 15:40 | 显示全部楼层
这个比用串口强多了。  
earlmax 发表于 2022-7-9 16:29 | 显示全部楼层
做一个设备怎么样
jkl21 发表于 2022-7-9 17:19 | 显示全部楼层
usb开发简单了。  
quickman 发表于 2022-7-9 18:10 | 显示全部楼层
如何判断是否收到数据呢  
modesty3jonah 发表于 2022-7-9 21:18 | 显示全部楼层
可以下载程序吗
tanleitanlei 发表于 2022-7-11 15:44 | 显示全部楼层

虚拟串口的demo BSP内也有
向往自由的码农 发表于 2022-7-31 16:55 | 显示全部楼层
有没有HID和CDC复合设备
您需要登录后才可以回帖 登录 | 注册

本版积分规则

111

主题

627

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部