#申请开发板# 本帖最后由 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)
|