使用开发板为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. Hadoop 新增删除节点

    1 新增Data节点 1.1 修改/etc/hosts,增加datanode的ip 1.2 在新增加的节点启动服务 hadoop-daemon.sh start datanode yarn-daemo ...

  2. 推荐两个小工具MediaInfo 和 netpersec

    [转载请注明出处]:http://blog.csdn.net/longlong530 流媒体服开发的时候常用的两个工具, 1. MediaInfo     下载路径:(http://w.x.baidu ...

  3. Python实现简单的网页抓取

    现在开源的网页抓取程序有很多,各种语言应有尽有. 这里分享一下Python从零开始的网页抓取过程 第一步:安装Python 点击下载适合的版本https://www.python.org/ 我这里选择 ...

  4. pyqt5.8.2没有qt Designer和assistant exe

    使用python3.6 pyqt5.8 eric6 创建完新的窗体后,弹出如下的错误: 解决方法: 1.安装pyqt5-tools 下载地址: https://pypi.python.org/pypi ...

  5. 指定分隔符连接数组元素join()

    join()方法用于把数组中的所有元素放入一个字符串.元素是通过指定的分隔符进行分隔的. 语法: arrayObject.join(分隔符) 参数说明: 注意:返回一个字符串,该字符串把数组中的各个元 ...

  6. 数组连接a.concat(b),b作为一个整体

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  7. GO中DEFER的理解--DEFER执行的原理

    在golang当中,defer代码块会在函数调用链表中增加一个函数调用.这个函数调用不是普通的函数调用,而是会在函数正常返回,也就是return之后添加一个函数调用.因此,defer通常用来释放函数内 ...

  8. Spring Boot 学习视频

    1. Spring Boot  项目实战 ----- 技术栈博客企业前后端 链接:https://pan.baidu.com/s/1hueViq4 密码:4ma8 2.Spring Boot  项目实 ...

  9. T-SQL 事务2

    启用事务完成转账存储过程 use StudentManager go if exists(select * from sysobjects where name='usp_TransferAccoun ...

  10. UE4 Socket多线程非阻塞通信

    转自:https://blog.csdn.net/lunweiwangxi3/article/details/50468593 ue4自带的Fsocket用起来依旧不是那么的顺手,感觉超出了我的理解范 ...