STM32F103 CubeMX 使用USB生成鼠标设备

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 */
}

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

相关推荐

  1. <span style='color:red;'>STM</span><span style='color:red;'>32</span><span style='color:red;'>F</span><span style='color:red;'>103</span>

    STM32F103

    2024-03-15 16:26:01      50 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-15 16:26:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-15 16:26:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-15 16:26:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-15 16:26:01       20 阅读

热门阅读

  1. Docker命令大全

    2024-03-15 16:26:01       28 阅读
  2. matlab+yalmip调试问题指南

    2024-03-15 16:26:01       20 阅读
  3. vue的axios教程

    2024-03-15 16:26:01       19 阅读
  4. 户用光伏投资回报经济效益分析

    2024-03-15 16:26:01       23 阅读
  5. 设计模式 — — 前端

    2024-03-15 16:26:01       24 阅读
  6. c上机题第二波

    2024-03-15 16:26:01       20 阅读
  7. MongoDB 入门简介

    2024-03-15 16:26:01       19 阅读
  8. SGD的重尾行为

    2024-03-15 16:26:01       17 阅读
  9. python基础小练习大全

    2024-03-15 16:26:01       23 阅读
  10. 【Spring Boot 3】【Camel 4】动态路由

    2024-03-15 16:26:01       22 阅读
  11. Numpy矩阵到OpenCV图像的转换

    2024-03-15 16:26:01       18 阅读
  12. 软考笔记--云原生架构内涵

    2024-03-15 16:26:01       21 阅读