#申请开发板# 本帖最后由 qjp1988113 于 2020-9-22 10:56 编辑
板子上手,先做一下USB通讯的实验,直接用的官方给的USBD这个例程。
但是即没提供测试工具,也没具体的示例说明文档,只好自己摸索了。
原本这个例程是将输入的字节全部取反再输出。
这个在软件包里面的CH32F103_List.txt文档里面提到:
USBD:模拟自定义USB设备(CH372设备)例程,提供8个非0通道(上传+下传),
实现数据先下传,然后数据内容取反上传。
编译程序下载到开发板,打开老早之前的一个CH372调试的小软件:
实验现象正常。那能不能改成一些动作输出和自定义的语句输出呢。
直接在usb_endp.c里面修改:- void EP2_OUT_Callback(void)
- {
- uint8_t i;
- //将EP2端点输入的缓存数据读取到USB_Rx_Buffer数组里面
- //当然这个可以自己定义一个数组变量,并返回接收数据的长度
- //USB_Rx_Cnt = USB_SIL_Read(EP2_OUT, USB_Rx_Buffer);
- //我们这里不需要
- USB_SIL_Read(EP2_OUT, USB_Rx_Buffer);
- //接收到的数据取反
- //这里屏蔽
- // for(i=0;i<USB_Rx_Cnt;i++)
- // {
- // //USB_Rx_Buffer[i] = ~USB_Rx_Buffer[i];
- // }
- //添加动作控制
- //随意写的,数组前2为为11 开灯
- //12 关灯
- if((USB_Rx_Buffer[0]==1)&&(USB_Rx_Buffer[1]==1))
- {
- PAout(0) = 1;
- //更改回复
- SetEPTxValid(ENDP2);
- USB_SIL_Write(EP2_IN, "LEDOFF
- ", sizeof( "LEDOFF
- "));
- //Delay_Us(10);
- }
- if((USB_Rx_Buffer[0]==1)&&(USB_Rx_Buffer[1]==2))
- {
- PAout(0) = 0;
- //更改回复
- SetEPTxValid(ENDP2);
- USB_SIL_Write(EP2_IN, "LEDON
- ", sizeof( "LEDON
- "));
- //Delay_Us(10);
- }
- //随便回复一个OKMMM
- //使能发送
- // SetEPTxValid(ENDP2);
- // USB_SIL_Write(EP2_IN, "OKMMM", sizeof( "OKMMM"));
- //不用之前的输出程序
- //EP2_IN_Callback();
- //使能接收
- SetEPRxValid(ENDP2);
- }
重新编译下载,看结果:
同时对应LED受控。
可能真正使用并不是这样用的,但也没办法只能瞎摸索看看了。
附上工具附件,可能要安装CH372/CH375的驱动。
Debug.rar
(46.84 KB, 下载次数: 24)
|