你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

想用STM32F103C8的单片机做一个操作台(joystick)

[复制链接]
wangmin0920 提问时间:2019-6-22 09:25 /
我们参加FRC里面是要遥控控制机器人的,但是购买的遥控器功能上拥有很大的局限性。因此从功能分析开始,自制一个遥控操作台才能够更好的驱动机器人。
之前看网上有说STM32的单片机可以做joystick。也找到了一些资料,但是无法连贯起来。
现有的资料:
1.STM32的官方例程,里面有joystickmouse的程序和DFU文件。
2.按照网上一些帖子说的下载了STM32cubeMX软件
问题是:
1.例程如何使用,没搞清楚。
2.STM32cubeMx和例程之间如何用也不清楚。
总之,就是云里雾里。
求高人指教。
收藏 1 评论1 发布时间:2019-6-22 09:25

举报

1个回答
Dylan疾风闪电 回答时间:2019-6-24 09:50:57
本帖最后由 Dylan疾风闪电 于 2019-6-24 10:13 编辑
  1. void Joystick_Send(u8 Keys)
  2. {
  3.   //第一个字节表示按键,\
  4.   第二个字节表示x轴(即鼠标左右移动,0表示不动,正值表示往右移,负值表示往左移),\
  5.   第三个字节表示y轴(即鼠标上下移动,0表示不动,正值表示往下移动,负值表示往上移动),\
  6.   第四个字节表示鼠标滚轮(正值为往上滚动,负值为往下滚动).
  7.   u8 Mouse_Buffer[4] = {0, 0, 0, 0};
  8.   s8 X = 0, Y = 0;
  9.   u8 Mouse_bit = 0;

  10.   switch (Keys)
  11.   {
  12.   case JOY_LEFT:
  13.     X -= 12;
  14.     break;
  15.   case JOY_RIGHT:
  16.     X += 12;
  17.     break;
  18.   case JOY_UP:
  19.     Y -= 12;
  20.     break;
  21.   case JOY_DOWN:
  22.     Y += 12;
  23.     break;
  24.   case JOY_LeftUp:
  25.     X -= 12;
  26.     Y -= 12;
  27.     break;
  28.   case JOY_LeftDown:
  29.     X -= 12;
  30.     Y += 12;
  31.     break;
  32.   case JOY_RightUp:
  33.     X += 12;
  34.     Y -= 12;
  35.     break;
  36.   case JOY_RightDown:
  37.     X += 12;
  38.     Y += 12;
  39.     break;
  40.   case Mouse_LEFT_Down:
  41.     Mouse_bit |= 0x1;
  42.     break;
  43.   case Mouse_RIGHT_Down:
  44.     Mouse_bit |= 0x2;
  45.     break;
  46.   case Mouse_KEY_Up:
  47.     Mouse_bit &= 0xC;
  48.     break;
  49.   default:
  50.     return;
  51.   }

  52.   /* prepare buffer to send */
  53.   Mouse_Buffer[1] = X;
  54.   Mouse_Buffer[2] = Y;
  55.   
  56.   //0号字节代表左右中键3Bytes:Left,Right,Mid
  57.   Mouse_Buffer[0] = Mouse_bit;
  58.   
  59.   //IN端点使能
  60.   USB_SIL_Write(EP1_IN, Mouse_Buffer, EP1_PacketSize);
  61.   SetEPTxValid(ENDP1);//端点发送有效
  62. }
复制代码
其实就是很简单的USB HID模拟鼠标,发送鼠标的物理动作。
注:如果你要自定义USB协议,那工作量会几何增长,涉及的知识主要是USB 2.0协议(包括但不限于设备描述符、报告描述符等)
STM32CUBE的话,你直接生成一个USB-HID模板就可以了。
调用USBD_HID_SendReport(&hUsbDeviceFS, msg, 4);

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版