教你STM32做USB鼠标、键盘

这篇具有很好参考价值的文章主要介绍了教你STM32做USB鼠标、键盘。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用CubeMX软件傻瓜式的配置,一键生成USB的HID驱动。

一、USB鼠标

1、CubeMX配置

①、选择相对应的芯片

stm32模拟键盘,# STM32,stm32,单片机,arm

 ②、配置时钟和Debug和debug

stm32模拟键盘,# STM32,stm32,单片机,arm

 stm32模拟键盘,# STM32,stm32,单片机,arm

 stm32模拟键盘,# STM32,stm32,单片机,arm

 ③、配置USB

stm32模拟键盘,# STM32,stm32,单片机,arm

 stm32模拟键盘,# STM32,stm32,单片机,arm

 ④、生成代码

stm32模拟键盘,# STM32,stm32,单片机,arm

         最好把这个也勾上,勾上以后每个外设配置不再都给你塞到main.c里,而是建一个.c.h,这样感觉舒服多了

stm32模拟键盘,# STM32,stm32,单片机,arm

2、编写应用层代码

        USB协议还是挺复杂的,原理和底层我也搞不清楚,这东西也不是看几篇文章学个一两天就能搞明白的,我写这个也主要是为了好玩,没有深层去理解。

我们用的鼠标主要就四个属性:键位(左键、右键、中键),左右移动、上下移动、滑轮

这四个属性用一个长度为4的数组一并包含进来:

  /*
    *MouseData[0]:低0位:左键 低1位:右键 低2位:中键
    *MouseData[1]:1~127:右  --127~-1:左
    *MouseData[2]:1~127:下  --127~-1:上
    *MouseData[3]:1~127:上  --127~-1:下  (滑轮)
  */
  char MouseData[4] = {0, 0, 0, 0};

发送这些信息用这个函数:

USBD_HID_SendReport(&hUsbDeviceFS,(uint8_t*)&MouseData,sizeof(MouseData));

主要代码:

    memcpy(MouseDataT, MouseData, sizeof(MouseData));
    key = KEY_Scan(1);   //支持连续按下
    switch(key)
    {
      case KEY0_PRES:
        MouseData[0] |= 0x01;
        break;
      case KEY1_PRES:
        MouseData[1] = 21;
        break;
      case WKUP_PRES:
        MouseData[3] = -12;
        break;
      default:
        MouseData[0] = 0;
        MouseData[1] = 0;
        MouseData[2] = 0;
        MouseData[3] = 0;
    }
    //如果有变化,发送
if(MouseData[0]!=MouseDataT[0]||MouseData[1]!=MouseDataT[1]||MouseData[2]!=MouseDataT[2]||MouseData[3]!=MouseDataT[3])
    {
      USBD_HID_SendReport(&hUsbDeviceFS,(uint8_t*)&MouseData,sizeof(MouseData));
    }

二、USB键盘

1、CubeMX配置同鼠标,这里不啰嗦了

2、在mouse的基础上修改为keyboard的

参考:基于STM32CUBE的USB键盘例程 | MCU起航 (mcublog.cn)

主要就是以下几点:

①、鼠标描述符换成键盘描述符,描述符大小也要改变

②、接口协议

③、端点发送的数据包长度

④、增加一个输出端点描述符 (按我的理解是,可以返回键盘指示灯的状态的,尝试了很久,还是不知道怎么返回,

3、应用程序

/*
    *keyBoardData[0]:特殊键
    *keyBoardData[1]:预留
    普通按键可以一起按下  4:a
    *keyBoardData[2]:
    *keyBoardData[3]:
    *keyBoardData[4]:
    *keyBoardData[5]:
    *keyBoardData[6]:
    *keyBoardData[7]:
  */
u8 keyBoardData[8] = {0,0,0,0,0,0,0,0};
extern USBD_HandleTypeDef hUsbDeviceFS;
static void keyboard_key_test()
{
    u8 keyBoardDataEmpty[8] = {0,0,0,0,0,0,0,0};
    u8 key = KEY_Scan(1);   //支持连续按下
    switch(key)
    {
      case KEY0_PRES:
        keyBoardData[2] = 4;
        
        break;
      case KEY1_PRES:
        keyBoardData[2] = 5;
        break;
      case WKUP_PRES:
        keyBoardData[2] = 6;
        break;
      default:
        keyBoardData[2] = 0;
    }
    USBD_HID_SendReport(&hUsbDeviceFS,(uint8_t*)&keyBoardData,sizeof(keyBoardData));
    HAL_Delay(15);
    USBD_HID_SendReport(&hUsbDeviceFS,(uint8_t*)&keyBoardDataEmpty,sizeof(keyBoardDataEmpty));
    HAL_Delay(15);
}

三、程序代码

代码我已上传

期待有伙伴能解决我的疑惑

mouse DEMO:(60条消息) stm32USB鼠标demo-单片机文档类资源-CSDN文库

keyboard DEMO:(60条消息) stm32USB键盘demo-嵌入式文档类资源-CSDN文库文章来源地址https://www.toymoban.com/news/detail-819340.html

到了这里,关于教你STM32做USB鼠标、键盘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32单片机4*4矩阵键盘相关代码

           矩阵键盘是我们学习32单片机中十分常见的模块。对于我们掌握32单片机的基本要求有很大的帮助。其核心原理是利用键盘按键按下时产生的电位变化来判断是否按下以及利用行列电平变化来得到按键在矩阵键盘位置的思路。本文简述其使用的相关代码。         

    2024年02月07日
    浏览(27)
  • stm32 USB复合设备 cubeMX库一键生成 多路CDC串口 HID鼠标键盘 Composite Device

    最近有个需求,需要同时用usb键盘鼠标和虚拟串口等,因为平时没怎么研究过usb协议,所以自己写复合设备一直没有成功,然后正巧在github上看到了一个stm32的一个usb复合设备库,可以快速配置usb组合设备,并且支持超级多路串口 Gihub地址 https://github.com/alambe94/I-CUBE-USBD-Compo

    2024年02月09日
    浏览(49)
  • 【正点原子STM32连载】 第六十章 USB鼠标键盘(Host)实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-336836-1-1.html 4)对正点原子STM32感兴趣的同学可以加群讨论:879133275 本章我们介绍如何使用STM32H750的USB HOST来驱动USB鼠

    2024年02月09日
    浏览(36)
  • STM32单片机初学4-IIC通信(软件模拟)

    IIC ( Inter-Integrated Circuit )又称I2C(习惯读“I方C”),是 IIC Bus简称,中文名为 集成电路总线 ,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。适用于IC间的短距离数据传输。 最初的IIC通信速

    2024年02月05日
    浏览(47)
  • stm32单片机/51单片机蜂鸣器不响(proteus模拟)

    1提高蜂鸣器电阻,这样根据分压原理,可以提升蜂鸣器2段电压 2更改蜂鸣器的工作电压为更小的值,这个可以通过在proteus内设置探针查看电压值,更改为其值就可以了 我觉得如果不是仿真的话,蜂鸣器额定电压是不能改的,如果电压不够的话好像就只能够选用合适的三极管

    2024年02月11日
    浏览(29)
  • STM32F407ZGT6单片机连接ST_LINK和USB转TTL的接线方法+舵机接线方法

    目录 1.STM32F407ZG单片机连接ST_LINK 2.STM32F407ZG单片机连接USB转TTL(用于串口通信) 3  舵机 单片机             ST_LINK      9--------------------6      7--------------------2      20------------------3/4      1--------------------7/8  这里附上具体的接线图片: 单片机      USB转TTL TX————

    2024年02月02日
    浏览(41)
  • 手把手教你使用--常用模块--HC05蓝牙模块,无线蓝牙串口透传模块,(实例:手机蓝牙控制STM32单片机点亮LED灯)

    最近在学STM32,基本的学完了,想学几个模块来巩固一下知识,就想到了蓝牙模块。玩啥好难过有很多博客教怎么连的,但自己看起来还是有点糊涂。模块的原理和知识点我就不讲解了,这里我主要 手把手 记录一下我是如何对蓝牙模块进行学习和使用的。 所使用的资料和工

    2024年02月02日
    浏览(54)
  • 基于STM32的USB键盘

    1、选择相应芯片(本文使用STM32F070F6P6) 2、RCC时钟配置和Debug设置 注:这里的PA9/10要重映射为PA11/12供USB接口使用(大部分芯片是分开的不用设置) 3、配置USB 注:这里的PID和VID默认就可以了(多设备时可以更改) 4、时钟配置 ①、修改USBD_HID_CfgFSDesc参数 首先长度,跳转至定义修改为

    2024年02月03日
    浏览(31)
  • 基于STM32的USB键盘制作(保姆级)(一)

      文章目录 前言 一、USB协议 二、新建一个USB-HID工程 1.时钟及GPIO配置 2.USB库的配置及部分参数分析 总结   此系列主要讲利用cubemx配置USB-HID协议,实现USB键盘,以及稚晖君键盘映射代码分析。   具体讲解参考这位大佬:USB具体通讯过程(含枚举过程)_go_str的博客-CSDN博客

    2024年02月16日
    浏览(23)
  • 基于STM32的USB键盘制作(保姆级)(二)

      文章目录 系列文章目录 前言 一、配置函数定位的汇总 二、具体配置 1.设备配置报文的修改 2.键盘报文描述修改 3.键盘报文数据发送及实现 4.值得注意的几点 5.附录 总结   本文主要在上一节的基础上,对相关的设备以及报文描述符配置,实现USB键盘。   这里只是汇总各个

    2024年02月09日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包