使用STM32CubeMX生成USB_HOST_HID工程

来源:http://www.cnblogs.com/libra13179/archive/2017/08/16/7371842.html
-Advertisement-
Play Games

使用開發板為STM32F105開發板。 原本想將具體步驟給寫出來。時間有限。直接將STM32F105_USBH_HID.IOC上傳files.cnblogs.com/files/libra13179/STM32F105_USBH_HID.zip [需要註意開發板使用的外部晶振為25mhz] 下麵給出 ...


使用開發板為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 == 0)
    {   
      /* 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(200);
  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 != 0 )
                {
                    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 != 0 )
                {
                    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 */

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在伺服器上訓練並保存模型,複製到本地之後load_model()報錯: ValueError: Tensor conversion requested dtype int32 for Tensor with dtype float32: 'Tensor("embedding_1/random_uni ...
  • 任務列表 比對軟體 hisat2的用法 下載index文件 比對、排序、索引 質量控制 載入IGV,截圖幾個基因 hisat2的用法 本作業是比對到基因組,所以使用gapped or splices mapper,此流程已經更新。TopHat首次被髮表已經是7年前,STAR的比對速度是TopHat的 ...
  • 原文發表於cu:2016-05-11 參考文檔: 一.環境 Server:CentOS-7-x86_64-1511 Server IP: 192.168.11.252 Web環境:CentOS-7-x86_64-1511編譯nginx-1.9.12+ mysql-5.7.11+ php-7.0.4 ...
  • 在Linux中,vim *.sh 文件,輸入下麵代碼,然後保存退出; 把該文件放在一個文件夾中, ./*.sh ,能夠把該文件夾下的全部同類型文件的編碼由GBK轉變為UTF-8; 執行效果如下: ...
  • 老葵花哥哥課堂開課了本文檔秉承愛看不看的原則 一不要錢 二服務大眾的高尚情操咱們今天講一講rescue恢復磁碟分區 首先咱們搭建環境搞起來 (parted) mkpart #創建分區 Partition name? []? oldboy #名字 File system type? [ext2]? e ...
  • PPTP和L2TP只差一步配置,現在蘋果已經不支持PPTP,所以只能使用L2TP連接。廢話不多說,下麵開始搭建: 1、PPTP VPN 配置 新安裝好的OS,進入系統,首先添加角色 勾選添加網路策略和訪問服務 如圖勾選需要的角色服務 安裝完成後,依次點擊開始-管理工具-路由與遠程訪問工具 如圖在服務 ...
  • Windows的文件系統通常使用NTFS或者FAT32格式,而Linux的文件系統格式通常是EXT系列,請參考下麵方法: 1) 在Linux系統上使用以下命令安裝ntfsprogs軟體使得Linux能夠支持NTFS文件系統: 2) 將Windows下的數據盤掛載至Linux雲伺服器,若數據盤已掛載則 ...
  • 當用戶註銷(logout)或者網路斷開時,終端會收到 HUP(hangup)信號從而關閉其所有子進程。因此,我們的解決辦法就有兩種途徑:要麼讓進程忽略 HUP 信號,要麼讓進程運行在新的會話里從而成為不屬於此終端的子進程。 (hangup 名稱的來由:在 Unix 的早期版本中,每個終端都會通過 m ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...