6263|0

9798

帖子

24

TA的资源

版主

楼主
 

GD32VF103V_EVAL使用USB转串口功能 [复制链接]

 

单片机在调试的多少都会有向电脑发送数据的需要

GD32VF103V_EVAL自带了2个DB9的接口,因为手里没有对应的数据线无法连接电脑实现数据传输

另外GD32VF103V_EVAL开发板虽然带了CMSIS-DAP仿真器,但不知道为什么和之前的板子一样,这个负责提供仿真的芯片并没有和提供虚拟串口功能

现在可以说几乎所有集成仿真器的开发板上都会有虚拟串口功能,一根USB线又能调试又能实现USB转串口还是非常方便的

因为带DB9这样接口的电脑应该是越来越少了,USB转DB9的数据线我以前有一条后来一直没用现在也找不到了

以上方面行不通其实还可以通过开发板上的2.54排针通过其它开发板或者USB转TTL的转接板传输数据

不过那样还是麻烦,反正都是要多插一条数据线,还不如直接用板子里的USB转串口功能

找到下边这个固件包的例程

GD32VF103_Firmware_Library_V1.0.1\Examples\USBFS\USB_Device\CDC_ACM

使用NucleiStudio导入后在工程上点右键->Debug As->Debug Configurations

 

在Debug Configuration窗口找到GDB OpenOCD Debugging,在上边点右键->New Configuration

 

因为上次配置过openocd_gdlink.cfg的路径,这次新建好以后就可以直接使用

 

点Debug按钮进入调试模式,让程序跑起来后可以在设备管理器里看到虚拟串口

 

例程里是一个数据回显,电脑向开发板发数据,开发板把数据原回返回,打开串口助手发送数据可以看到回显

 

从代码可以看出主循环里,先是判断USB的状态,然后再判断发送和接收标志是否为1

老实说,if (1 == packet_receive && 1 == packet_sent) 这句话我到现在也没弄明白是什么意思,看了所有设置packet_receive和packet_sent的代码也没理解它的作用

反正是当他俩不全是1时再判断接收到的数据是不是不为0,如果不为0则把数据发送回PC

 

packet_receive和packet_sent代码是在cdc_acm_core.c里设置的,同时收到和要发送的数据也是在这个文件里处理里

对应的缓冲为usb_data_buffer

 

如果想发送算定义的数据操作起来是有一点麻烦的,因为不确定修改cdc_acm_core.c文件添加一个发送数据的函数是否符合逻辑

那就把代码都写在main.c里,像下边这样,先把要发送的数据填充到usb_data_buffer,然后再执行cdc_acm_data_send函数

 

运行程序,打开串口助手再发送数据发现接收到的已经是自定义数据,而不是发送去的数据

从代码可以看出cdc_acm_data_send函数里执行了usbd_ep_send函数,如果想直接发送,而不是使用sprintf填充完usb_data_buffer再发送是不是可以把这个usbd_ep_send函数也放到main.c里呢?

 

 

把代码改成下边这样,数据也可以正常发送,少了一个sprintf环节,但是跳过cdc_acm_core.c文件直接执行usb_core.c里的函数不知道是否合理

反正能用,先将就着用吧

点赞 关注(1)
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表