wangmin0920 发表于 2019-6-22 09:25:58

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

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

Dylan疾风闪电 发表于 2019-6-24 09:50:57

本帖最后由 Dylan疾风闪电 于 2019-6-24 10:13 编辑

void Joystick_Send(u8 Keys)
{
//第一个字节表示按键,\
第二个字节表示x轴(即鼠标左右移动,0表示不动,正值表示往右移,负值表示往左移),\
第三个字节表示y轴(即鼠标上下移动,0表示不动,正值表示往下移动,负值表示往上移动),\
第四个字节表示鼠标滚轮(正值为往上滚动,负值为往下滚动).
u8 Mouse_Buffer = {0, 0, 0, 0};
s8 X = 0, Y = 0;
u8 Mouse_bit = 0;

switch (Keys)
{
case JOY_LEFT:
    X -= 12;
    break;
case JOY_RIGHT:
    X += 12;
    break;
case JOY_UP:
    Y -= 12;
    break;
case JOY_DOWN:
    Y += 12;
    break;
case JOY_LeftUp:
    X -= 12;
    Y -= 12;
    break;
case JOY_LeftDown:
    X -= 12;
    Y += 12;
    break;
case JOY_RightUp:
    X += 12;
    Y -= 12;
    break;
case JOY_RightDown:
    X += 12;
    Y += 12;
    break;
case Mouse_LEFT_Down:
    Mouse_bit |= 0x1;
    break;
case Mouse_RIGHT_Down:
    Mouse_bit |= 0x2;
    break;
case Mouse_KEY_Up:
    Mouse_bit &= 0xC;
    break;
default:
    return;
}

/* prepare buffer to send */
Mouse_Buffer = X;
Mouse_Buffer = Y;

//0号字节代表左右中键3Bytes:Left,Right,Mid
Mouse_Buffer = Mouse_bit;

//IN端点使能
USB_SIL_Write(EP1_IN, Mouse_Buffer, EP1_PacketSize);
SetEPTxValid(ENDP1);//端点发送有效
}其实就是很简单的USB HID模拟鼠标,发送鼠标的物理动作。
注:如果你要自定义USB协议,那工作量会几何增长,涉及的知识主要是USB 2.0协议(包括但不限于设备描述符、报告描述符等)
STM32CUBE的话,你直接生成一个USB-HID模板就可以了。
调用USBD_HID_SendReport(&hUsbDeviceFS, msg, 4);
页: [1]
查看完整版本: 想用STM32F103C8的单片机做一个操作台(joystick)