使用开发板为STM32F105开发板

原本想将具体步骤给写出来。时间有限。直接将STM32F105_USBH_HID.IOC上传files.cnblogs.com/files/libra13179/STM32F105_USBH_HID.zip

[需要注意开发板使用的外部晶振为25mhz]

下面给出主要修改地方

usbh_conf.c中修改

/**
* @brief USBH_LL_DriverVBUS
* Drive VBUS.
* @param phost: Host handle
* @param state : VBUS state
* This parameter can be one of the these values:
* 0 : VBUS Active
* 1 : VBUS Inactive
* @retval Status
*/
USBH_StatusTypeDef USBH_LL_DriverVBUS (USBH_HandleTypeDef *phost, uint8_t state)
{ /* USER CODE BEGIN 0 */
/* USER CODE END 0*/
if (phost->id == HOST_FS)
{
if (state == )
{
/* Drive high Charge pump */
/* ToDo: Add IOE driver control */
/* USER CODE BEGIN DRIVE_HIGH_CHARGE_FOR_FS */
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET);
/* USER CODE END DRIVE_HIGH_CHARGE_FOR_FS */
}
else
{
/* Drive low Charge pump */
/* ToDo: Add IOE driver control */
/* USER CODE BEGIN DRIVE_LOW_CHARGE_FOR_FS */
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_RESET);
/* USER CODE END DRIVE_LOW_CHARGE_FOR_FS */
}
}
HAL_Delay();
return USBH_OK;
}

在 usbh_conf.H修改使用rtt来打印信息

 /* DEBUG macros */  

#ifdef RTT_LOG_ENABLED

#include "rtt_log.h"

    #if (USBH_DEBUG_LEVEL > 0)
#define USBH_UsrLog logi
#else
#define USBH_UsrLog(...)
#endif #if (USBH_DEBUG_LEVEL > 1) #define USBH_ErrLog logw
#else
#define USBH_ErrLog(...)
#endif #if (USBH_DEBUG_LEVEL > 2)
#define USBH_DbgLog loge
#else
#define USBH_DbgLog(...)
#endif #else #if (USBH_DEBUG_LEVEL > 0)
#define USBH_UsrLog(...) printf(__VA_ARGS__);\
printf("\n");
#else
#define USBH_UsrLog(...)
#endif #if (USBH_DEBUG_LEVEL > 1) #define USBH_ErrLog(...) printf("ERROR: ") ;\
printf(__VA_ARGS__);\
printf("\n");
#else
#define USBH_ErrLog(...)
#endif #if (USBH_DEBUG_LEVEL > 2)
#define USBH_DbgLog(...) printf("DEBUG : ") ;\
printf(__VA_ARGS__);\
printf("\n");
#else
#define USBH_DbgLog(...)
#endif #endif //RTT_LOG_ENABLED

好了现在下载测试

使用otg线将键盘和开发板连接

好了现在开始我们添加一下怎么识别键盘的按键信息。

在usb_host.c中添加下面代码

/* USER CODE BEGIN 1 */
void USBH_HID_EventCallback(USBH_HandleTypeDef *phost)
{
HID_TypeTypeDef type = HID_UNKNOWN; USBH_ErrLog("USBH_HID_EventCallback"); type = USBH_HID_GetDeviceType(phost); switch(type)
{
case HID_KEYBOARD:
{
HID_KEYBD_Info_TypeDef *keyboard_info; char ascii;
keyboard_info = USBH_HID_GetKeybdInfo(phost); if( keyboard_info != NULL )
{
ascii = USBH_HID_GetASCIICode(keyboard_info);
if( ascii != )
{
USBH_UsrLog("%c",ascii);
}
}
} break; case HID_MOUSE:
{
//HID_MOUSE_Info_TypeDef *USBH_HID_GetMouseInfo(USBH_HandleTypeDef *phost)
}
break; default:
break;
}
}
/* USER CODE END 1 */

测试一下

现在测试鼠标

先在usb_host.c中添加下面代码

/* USER CODE BEGIN 1 */
void USBH_HID_EventCallback(USBH_HandleTypeDef *phost)
{
HID_TypeTypeDef type = HID_UNKNOWN; USBH_ErrLog("USBH_HID_EventCallback"); type = USBH_HID_GetDeviceType(phost); switch(type)
{
case HID_KEYBOARD:
{
HID_KEYBD_Info_TypeDef *keyboard_info; char ascii;
keyboard_info = USBH_HID_GetKeybdInfo(phost); if( keyboard_info != NULL )
{
ascii = USBH_HID_GetASCIICode(keyboard_info);
if( ascii != )
{
USBH_UsrLog("%c",ascii);
}
}
} break; case HID_MOUSE:
{ HID_MOUSE_Info_TypeDef *mouse_info;
mouse_info = USBH_HID_GetMouseInfo(phost);
USBH_UsrLog("mouse_info X%d, Y%d ,button %d %d %d",mouse_info->x,mouse_info->y,mouse_info->buttons[2],mouse_info->buttons[1],mouse_info->buttons[0]); }
break;
default:
break;
}
}
/* USER CODE END 1 */

使用STM32CubeMX生成USB_HOST_HID工程的更多相关文章

  1. 使用STM32CubeMX生成USB_HOST_HID工程[添加对CAPS_LOCK指示灯的控制][SetReport]

    在之前(使用STM32CubeMX生成USB_HOST_HID工程)的基础上进行修改 在结合之前在pc上的测试 USB之HID类Set_Report Request[调试手记1] 测试代码如下: /* ...

  2. 使用STM32CubeMX生成RTC工程[闹钟中断2]

    在上次使用STM32CubeMX生成RTC工程[闹钟中断]基础上实现周期间隔的闹钟 一些场合需要周期性的闹钟 现在为了方便设置每十秒来一次. 备注: 当然可以直接修改HAL库static HAL_St ...

  3. 使用STM32CubeMX生成RTC工程[秒中断]

    现在我们在之前的工程(http://www.cnblogs.com/libra13179/p/7170791.html)中修改 /** ******************************** ...

  4. 使用STM32CubeMX生成RTC工程[闹钟中断]

    使用的硬件为正点原子的MINISTM32. 需要主要注意: STM32F1系列 <UM1850 User manual Description of STM32F1xx HAL drivers ...

  5. 利用STM32CubeMX来生成USB_HID_Mouse工程【添加ADC】(1)

    现在原来的基础上添加ADC的功能. 现在(利用STM32CubeMX来生成USB_HID_Mouse工程)基础上新增硬件 JoyStick Shield 游戏摇杆扩展板 与STM32F103C8的连接 ...

  6. stm32+lwip(一):使用STM32CubeMX生成项目

    我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...

  7. 《STM32CubeMX配置STM32H743XI工程》第一讲《初始化UART,重定义printf函数,点亮一个LED灯》

    1.打开STM32CubeMX软件->新建一个工程(软件自行到ST官网下载安装) 2.输入对应的芯片型号(本次基于野火STM32H743XI Pro 开发板)点击Start Project生成项 ...

  8. spring boot 快速生成demo工程 官网生成

    最近一直在弄springboot的项目,居然最近才知道快速生成springBoot工程,原来可以这么简单, 而且官网还提供了生成java或是web项目,需要jpa,模板等服务,直接一键集成.话不多说, ...

  9. [ExtJS5学习笔记]第三十一节 sencha extjs 5使用cmd生成的工程部署到tomcat服务器

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/42940883 本文作者:sushengmiyan ------------------ ...

随机推荐

  1. Android开发之adb,$Sqlite篇

    一. 操作系统: 1. linux操作系统: linux操作系统其实就是Linux内核,Linux内核[kernel]是整个操作系统的最底层,它负责整个硬件的驱动,以及提供各种系统所需的核心功能,包括 ...

  2. bzoj5043: 密码破译

    Description 小Q发明了一个新的加密算法,对于一个长度为n的非负整数序列a_1,a_2,...,a_n,他会随机选择一个非负整数k, 将每个数都异或上k得到b_1,b_2,...,b_n,即 ...

  3. ObjectId与DateTime的互相转换

    s会用mongdb中经常会需要用到通过“_id”去检查数据,筛选数据,但是想根据具体时间的id每次都需要做一下转换,这样搜索起来就很简单了. ObjectId转DateTime /// <sum ...

  4. spring4.3新注解之:@RequestMapping变种(@GetMapping,@PostMapping,@PutMapping,@DeleteMapping,@PatchMapping)

    Spring 4.3 中引进了下面的注解 @RequestMapping 在方法层级的变种,来帮助简化常用 HTTP 方法的映射,并更好地表达被注解的方法的语义.比如,@GetMapping可以读作 ...

  5. Django的视图层简介

    Django的视图层 视图函数 所谓视图函数,其实就是我们Django项目中各个应用中的views.py文件中定义的每个用来处理URL路由映射到这里的逻辑函数.一个视图函数简称视图,它是个简单的Pyt ...

  6. [UE4]Math Expression计算数学公式,可以接受参数

  7. PyCharm的模板设置

    在File—settings—Editor—File and Code Templates—Python script 脚本里添加 编辑内容 (a)shebang行 #!/usr/bin/python ...

  8. vs code编辑器格式化react jsx插件

    vs code格式化jsx比较适合的插件是react-beautify: 格式化中遇到的问题是indent几格,这个问题的解决是你在space里设置几格这个插件就会自动格式化出几格.

  9. Android:真机调试遇到的问题(You need to use a Theme.AppCompat theme (or descendant) with this activity)

    Android:真机调试遇到的问题(You need to use a Theme.AppCompat theme (or descendant) with this activity). 在调试&l ...

  10. RabbitMQ manage

    1. RabbitMQ service sudo systemctl enable rabbitmq-server sudo systemctl start rabbitmq-server sudo ...