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

查看: 1721|回复: 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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版