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

查看: 1736|回复: 6

用STM32Cube简单实现自定义USB HID通信(实现步骤,无理论。)

[复制链接]

1

主题

9

回帖

0

蝴蝶豆

新手上路

最后登录
2020-5-27
发表于 2018-12-30 13:15:07 | 显示全部楼层 |阅读模式
本帖最后由 icevel 于 2015-8-20 12:50 编辑


简单的用HID通信,本人不懂USB协议,只是想在一个项目中用HID代替串口,在网上找了一些例子,都需要搞懂USB协议,于是尝试用STM32Cube实现,适合拿过来就用。

0、开发环境:
        自己做的STM32F072RB的板子
        STM32CubeMX4.9.0+STM32CubeF0 Firmware Package V1.3.0
        IAR 7.2
1、建立、配置工程:
        打开STM32Cube,选择好器件
        打开USB Device(FS)
        选择要使用的其它功能,我打开了USART1用于输出数据
        在Middlewares里面选择Custom HID
        
        

        配置好时钟,我选择的时钟源是HSI48

        配置USB:        设备描述页默认即可,需要修改"Parameter Settings",将USBD_CUSTOM_HID_REPORT_DESC_SIZE 设置为33(此处33和程序中设备描述符对应)
                        USBD_CUSTOMHID_OUTREPORT_BUF_SIZE 修改为64 ,输出节点的buffer大小,也就是每次发送数据的最大字节数。
        
2、生成代码
        用STM32Cube生成代码。        
3、修改代码实现发送
        修改usbd_custom_hid_if.c:
        在__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =    下面输入报告描述符:
        设置中的“USBD_CUSTOM_HID_REPORT_DESC_SIZE”  与此处对应。

  • __ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
  • {
  •   /* USER CODE BEGIN 0 */
  • //#ifdef 0
  • 0x05, 0x8c, /* USAGE_PAGE (ST Page) */
  • 0x09, 0x01, /* USAGE (Demo Kit) */
  • 0xa1, 0x01, /* COLLECTION (Application) */
  • /* 6 */
  • // The Input report
  • 0x09,0x03, // USAGE ID - Vendor defined
  • 0x15,0x00, // LOGICAL_MINIMUM (0)
  • 0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255)
  • 0x75,0x08, // REPORT_SIZE (8)
  • 0x95,0x40, // REPORT_COUNT (40)
  • 0x81,0x02, // INPUT (Data,Var,Abs)
  • //19
  • // The Output report
  • 0x09,0x04, // USAGE ID - Vendor defined
  • 0x15,0x00, // LOGICAL_MINIMUM (0)
  • 0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255)
  • 0x75,0x08, // REPORT_SIZE (8)
  • 0x95,0x40, // REPORT_COUNT (40)
  • 0x91,0x02, // OUTPUT (Data,Var,Abs)
  • //32
  •   /* USER CODE END 0 */
  • 0xC0    /*     END_COLLECTION                     */
  • };

[color=rgb(51, 102, 153) !important]复制代码



Stm32CUBE提供的API函数为“USBD_CUSTOM_HID_SendReport” ,直接调用即可:
  • int main(void)
  • {
  •   /* USER CODE BEGIN 1 */
  •   uint8_t HID_Buffer[]={"Hello,HID!~"};
  •   /* USER CODE END 1 */
  •   /* MCU Configuration----------------------------------------------------------*/
  •   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  •   HAL_Init();
  •   /* Configure the system clock */
  •   SystemClock_Config();
  •   /* Initialize all configured peripherals */
  •   MX_GPIO_Init();
  •   MX_USART1_UART_Init();
  •   MX_USB_DEVICE_Init();
  •   /* USER CODE BEGIN 2 */
  •   printf("init_OK!\r\n");
  •   /* USER CODE END 2 */
  •   /* Infinite loop */
  •   /* USER CODE BEGIN WHILE */
  •   while (1)
  •   {
  •   /* USER CODE END WHILE */
  •   /* USER CODE BEGIN 3 */
  •   USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, HID_Buffer,65);
  •   HAL_Delay(500);
  •   }
  •   /* USER CODE END 3 */
  • }

[color=rgb(51, 102, 153) !important]复制代码



下载、调试:

已经有输出了。

4、修改代码实现接收:
        修改文件“usbd_custom_hid_if.c”,在函数“CUSTOM_HID_OutEvent_FS” 内加入数据处理代码即可:
  • static int8_t CUSTOM_HID_OutEvent_FS  (uint8_t event_idx, uint8_t state)
  • {
  •   /* USER CODE BEGIN 6 */
  •   USBD_CUSTOM_HID_HandleTypeDef     *hhid;
  •   hhid = (USBD_CUSTOM_HID_HandleTypeDef*) hUsbDeviceFS.pClassData;
  •   uint8_t rx_buf[65];
  •   printf("%s",hhid->Report_buf);
  •   switch(event_idx)
  •   {
  •   case 1: /* LED1 */
  •     (state == 1) ? LED(1) : LED_off(1);
  •     break;
  •   case 2: /* LED2 */
  •     (state == 1) ? LED(2) : LED_off(2);
  •     break;
  •   case 3: /* LED3 */
  •     (state == 1) ? LED(3) : LED_off(3);
  •     break;
  •   case 4: /* LED4 */
  •     (state == 1) ? LED(4) : LED_off(4);
  •     break;
  •   default:
  •     LED_all(0x00);
  •     break;
  •   }

[color=rgb(51, 102, 153) !important]复制代码



        下载、调试:
        
        可以用BusHound查看数据:
        


不是专职开发软件的,有时候玩玩,STM32Cube还是很方便的,只是有时候资料和文档不全,需要自己慢慢摸索。

<
回复

使用道具 举报

29

主题

2129

回帖

127

蝴蝶豆

论坛元老

最后登录
2020-12-7
发表于 2018-12-30 20:08:48 | 显示全部楼层
你这配色简直丧心病狂
回复 支持 1 反对 0

使用道具 举报

1

主题

9

回帖

0

蝴蝶豆

新手上路

最后登录
2020-5-27
 楼主| 发表于 2018-12-30 13:15:58 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

364

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-12-6
发表于 2018-12-30 21:05:57 | 显示全部楼层
颜色配的不友好,灰色看不清
回复 支持 反对

使用道具 举报

0

主题

293

回帖

1

蝴蝶豆

高级会员

最后登录
2020-9-30
发表于 2019-8-26 10:50:13 | 显示全部楼层
签到,签到
回复 支持 反对

使用道具 举报

0

主题

2

回帖

0

蝴蝶豆

新手上路

最后登录
2020-3-17
发表于 2020-3-18 00:00:33 | 显示全部楼层
配色感人
回复 支持 反对

使用道具 举报

14

主题

141

回帖

31

蝴蝶豆

金牌会员

最后登录
2020-12-1
发表于 2020-3-18 23:34:46 | 显示全部楼层
是不是患有异常三色视觉?
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版