第一步,按照上面提到的方法安装ch32x035的Arduino支持; 第二步,编写代码。这里参考了Ch55xduino的方法,创建了 src 目录,然后在这个目录中再创建userUsbKB目录,对于 USB 支持的代码都在其中。基本上相当于将 WCH 官方例子文件都放置在此。 最后,编写Arduino代码。基本想法是:将按键数据放置在 Buffer 中,然后使用USBFS_Endp_DataUp()函数即可发送出去。
- #include "src\\userUsbKB\\usbdKBMS.h"
-
- uint8_t Buffer[ 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[2]=0x0F; //"L"
- Buffer[3]=0x04; //"A"
- Buffer[4]=0x05; //"B"
- Buffer[5]=0x2D; //"-"
- Buffer[6]=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 ,用面向对象的方法将所需要的完整封装起来这样才更便于使用。
|