当前位置: 首页 > news >正文

STM32F103 CubeMX 使用USB生成鼠标设备

STM32F103 CubeMX 使用USB生成鼠标设备

  • 1 配置cubeMX
    • 1.1配置外部晶振,配置debug口
    • 1.2 配置USB
    • 1.3 配置芯片的时钟
    • 1.4 生成工程
  • 2. 编写代码
    • 2.1 添加申明
    • 2.2 main函数代码

1 配置cubeMX

1.1配置外部晶振,配置debug口

在这里插入图片描述

1.2 配置USB

在这里插入图片描述
在这里插入图片描述

1.3 配置芯片的时钟

需要注意,在使用USB设备的时候,一定要使用外部的高速时钟,

在这里插入图片描述

1.4 生成工程

在这里插入图片描述

2. 编写代码

2.1 添加申明

添加两个申明,这样可以将代码中使用到的函数,引入到main这个文件中来,

/* USER CODE BEGIN Includes */
# include "usbd_hid.h"extern USBD_HandleTypeDef hUsbDeviceFS;/* USER CODE END Includes */

2.2 main函数代码

添加了完整的main函数的代码,

申明的函数 HID_Buffer 这是来表示鼠标发送的数据。
这里需要说明一下,鼠标发的数据是4个 8位的数据

第一个字节表示按键,bit0对应左键、bit1对应右键、bit3对应中键;0表示未按,1表示按下;
第二个字节表示x轴(即鼠标左右移动,0表示不动,正值表示往右移,负值表示往左移,范围-127~127,绝对值对应了移动量大小);
第三个字节表示y轴(即鼠标上下移动,0表示不动,正值表示往下移,负值表示往上移,范围-127~127,绝对值对应了移动量大小);
第四个字节表示鼠标滚轮(正值为往上滚动,负值为往下滚动,-127~127,绝对值对应了移动量大小)。

代码中的:HID_Buffer 也就对应了4个字节。

下面的计算公式就是对应的鼠标的移动,如果你需要调整移动的方向,则将 ( (ADC0_Value - 2048)) 这个调换位置就可以了,256的参数就是一个经验值,这个值越大,鼠标移动速度越快。反之亦然。

  HID_Buffer[1] = (ADC0_Value - 2048)/256;HID_Buffer[2] = (2048 - ADC1_Value)/256;;
/*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_ADC1_Init();MX_ADC2_Init();MX_USB_DEVICE_Init();/* USER CODE BEGIN 2 */uint8_t HID_Buffer[4] = {0};uint16_t ADC0_Value = 0;uint16_t ADC1_Value = 0;/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){HAL_ADC_Start(&hadc1);HAL_ADC_PollForConversion(&hadc1,HAL_MAX_DELAY);ADC0_Value = (uint16_t)HAL_ADC_GetValue(&hadc1);HAL_ADC_Start(&hadc2);HAL_ADC_PollForConversion(&hadc2,HAL_MAX_DELAY);ADC1_Value = (uint16_t)HAL_ADC_GetValue(&hadc2);HAL_Delay(50);HID_Buffer[1] = (ADC0_Value - 2048)/256;HID_Buffer[2] = (2048 - ADC1_Value)/256;;USBD_HID_SendReport(&hUsbDeviceFS,HID_Buffer,4);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

这个鼠标是默认生成就是鼠标的设备,调试起来还是比较方便。

http://www.lryc.cn/news/319063.html

相关文章:

  • HJXH-E1/U静态信号继电器 面板安装 辅助电源220VDC 启动电压220VDC JOSEF约瑟
  • SpringBoot3下Kafka分组均衡消费实现
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:GridItem)
  • Qt 使用RAW INPUT获取HID触摸屏,笔设备,鼠标的原始数据,最低受支持的客户端:Windows XP [仅限桌面应用]
  • easyexcel导出excel文件到s3服务器
  • xss.haozi.me靶场“0x0B-0x12”通关教程
  • linux--redhat系统Yum源配置
  • el-Switch 开关二次确认
  • (二)丶RabbitMQ的六大核心
  • 微信小程序实现上下手势滑动切换
  • 详解命令docker run -d --name container_name -e TZ=Asia/Shanghai your_image
  • javaEE7
  • int与integer的区别
  • Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)
  • 音乐播放器-C#实现
  • 如何本地搭建hMailServer邮件服务
  • 裸机编程的几种模式、架构与缺陷。
  • TSINGSEE青犀视频AI方案:数据+算力+算法,人工智能的三大基石
  • Linux认识与学习BASH
  • Python JSON 序列化以及反序列化 文件读写
  • Spring MVC 返回JSON数据
  • 前端基础——HTML傻瓜式入门(1)
  • 【AI】如何创建自己的自定义ChatGPT
  • 电子科技大学链时代工作室招新题C语言部分---题号E
  • K8S CNI
  • Python数据分析实验一:Python数据采集与存储
  • 丘一丘正则表达式
  • 工业物联网平台在水务环保、暖通制冷、电力能源等行业的应用
  • 【研发日记】Matlab/Simulink技能解锁(二)——在Matlab Function编辑窗口Debug
  • 从键盘输入两个数,求它们的和并输出 从键盘输入三个数到a,b,c中,按公式值输出