Ch32x033 Arduino 环境USB 键盘开发
目前已经有 Ch32x035 的 Arduino 开发环境,在 https://github.com/openwch/arduino_core_ch32可以看到。美中不足的是这套环境中没有提供 USB 的支持。经过研究可以在代码中加入官方示例代码来实现 USB 功能。这次演示的是在 Ch32X033 板子上实现USB键盘每隔一段时间输入字符的功能。第一步,按照上面提到的方法安装ch32x035的Arduino支持;第二步,编写代码。这里参考了Ch55xduino的方法,创建了 src 目录,然后在这个目录中再创建userUsbKB目录,对于 USB 支持的代码都在其中。基本上相当于将 WCH 官方例子文件都放置在此。最后,编写Arduino代码。基本想法是:将按键数据放置在 Buffer 中,然后使用USBFS_Endp_DataUp()函数即可发送出去。#include "src\\userUsbKB\\usbdKBMS.h"uint8_tBuffer[ 8 ];
long int Elsp;
boolean Flag=true;
void setup() {
Serial2.begin(115200);
delay(500);
/* Usb Init */
USBFS_RCC_Init();
USBFS_Device_Init( ENABLE , PWR_VDD_SupplyVoltage( ));
USB_Sleep_Wakeup_CFG( );
Elsp=millis();
}
void loop() {
/* Determine if enumeration is complete, perform data transfer if completed */
//Serial.println(millis());
if ( USBFS_DevEnumStatus )
{
//Serial.println(millis());
/* Handle keyboard scan data */
KB_Scan_Handle();
/* Handle keyboard lighting */
KB_LED_Handle( );
/* Handle mouse scan data */
MS_Scan_Handle( );
/* Handle USART2 receiving data */
USART2_Receive_Handle( );
if ((millis()-Elsp>5000)&&(Flag)) {
Buffer=0x0F; //"L"
Buffer=0x04; //"A"
Buffer=0x05; //"B"
Buffer=0x2D; //"-"
Buffer=0x1D; //"Z"
USBFS_Endp_DataUp( DEF_UEP1, Buffer, sizeof( Buffer ), DEF_UEP_CPY_LOAD );
memset(Buffer,0,sizeof(Buffer));
Serial2.println("Send press");
Flag=false;
}
if (millis()-Elsp>5010) {
USBFS_Endp_DataUp( DEF_UEP1, Buffer, sizeof( Buffer ), DEF_UEP_CPY_LOAD );
Serial2.println("Send Release");
Elsp=millis();
Flag=true;
}
}
}
这个只是一个简单的Demo还并不完善,最好的状态是类似 Arduino Leonardo ,用面向对象的方法将所需要的完整封装起来这样才更便于使用。
工作的测试视频在
【CH32X035/33 Arduino USB 支持测试】
https://www.bilibili.com/video/BV15F4m1M7CV/?share_source=copy_web&vd_source=5ca375392c3dd819bfc37d4672cb6d54
页:
[1]