456浏览
查看: 456|回复: 1

[入门] Ch32x033 Arduino 环境USB 键盘开发

[复制链接]
目前已经有 Ch32x035 Arduino 开发环境,在 https://github.com/openwch/arduino_core_ch32可以看到。美中不足的是这套环境中没有提供 USB 的支持。经过研究可以在代码中加入官方示例代码来实现 USB 功能。这次演示的是在 Ch32X033 板子上实现USB键盘每隔一段时间输入字符的功能。
第一步,按照上面提到的方法安装ch32x035Arduino支持;
第二步,编写代码。这里参考了Ch55xduino的方法,创建了 src 目录,然后在这个目录中再创建userUsbKB目录,对于 USB 支持的代码都在其中。基本上相当于将 WCH 官方例子文件都放置在此。
最后,编写Arduino代码。基本想法是:将按键数据放置在 Buffer 中,然后使用USBFS_Endp_DataUp()函数即可发送出去。
  1. #include "src\\userUsbKB\\usbdKBMS.h"
  2. uint8_t  Buffer[ 8 ];
  3. long int Elsp;
  4. boolean Flag=true;
  5. void setup() {
  6.   Serial2.begin(115200);
  7.   delay(500);
  8.   /* Usb Init */
  9.   USBFS_RCC_Init();
  10.   USBFS_Device_Init( ENABLE , PWR_VDD_SupplyVoltage( ));
  11.   USB_Sleep_Wakeup_CFG( );
  12.   Elsp=millis();
  13. }
  14. void loop() {
  15.   /* Determine if enumeration is complete, perform data transfer if completed */
  16. //Serial.println(millis());
  17.   if ( USBFS_DevEnumStatus )
  18.   {
  19.     //Serial.println(millis());
  20.     /* Handle keyboard scan data */
  21.     KB_Scan_Handle(  );
  22.     /* Handle keyboard lighting */
  23.     KB_LED_Handle( );
  24.     /* Handle mouse scan data */
  25.     MS_Scan_Handle( );
  26.     /* Handle USART2 receiving data */
  27.     USART2_Receive_Handle( );
  28.     if ((millis()-Elsp>5000)&&(Flag)) {
  29.         Buffer[2]=0x0F; //"L"
  30.         Buffer[3]=0x04; //"A"
  31.         Buffer[4]=0x05; //"B"
  32.         Buffer[5]=0x2D; //"-"
  33.         Buffer[6]=0x1D; //"Z"
  34.         
  35.         USBFS_Endp_DataUp( DEF_UEP1, Buffer, sizeof( Buffer ), DEF_UEP_CPY_LOAD );
  36.         memset(Buffer,0,sizeof(Buffer));
  37.         Serial2.println("Send press");
  38.         Flag=false;
  39.       }
  40.     if (millis()-Elsp>5010) {
  41.         USBFS_Endp_DataUp( DEF_UEP1, Buffer, sizeof( Buffer ), DEF_UEP_CPY_LOAD );
  42.         Serial2.println("Send Release");
  43.         Elsp=millis();
  44.         Flag=true;
  45.       }
  46.   }
  47. }
复制代码
这个只是一个简单的Demo还并不完善,最好的状态是类似 Arduino Leonardo ,用面向对象的方法将所需要的完整封装起来这样才更便于使用。



zoologist  高级技匠
 楼主|

发表于 2024-2-15 17:22:47

工作的测试视频在

【CH32X035/33 Arduino USB 支持测试】
https://www.bilibili.com/video/B ... 819bfc37d4672cb6d54
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail