STM32 USBx Device HID standalone 移植示例 LAT1466

關鍵字:USBx, Device, HID,standalone

1.設計目的

目前 USBx Device standalone 的官方示例較少,不過使用 STM32CubeMX 可以快速地生成 USBx Device 相關類的示例工程,會很方便大家的開發。這里以 NUCLEO-H563 為例,實現 USBx Device HID Standalone 類,大家可以以此為參考移植到其他的 USBx Device 類。

2.示例移植

參考官方示例代碼:……\STM32Cube_FW_H5_V1.3.0\Projects\NUCLEO-H563ZI\Applications\USBX\Ux_Device_HID_Standalone

2.1.生成 STM32CubeMX 工程

新建 STM32CubeMX 工程 :STM32H563ZIT6U,選擇“without TrustZone activated”.

另外,STM32CubeMX 中未作說明的配置保持默認.

2.1.1 System Core 相關配置

在 System Core 框架下,Cortex_M33 標簽頁面下默認使用的是 HCLK. 如下圖:

RCC 的標簽頁下面:采用“BYPASS Clock Source ” MCO 引腳輸出作為 MCU 的系統時鐘源,如下圖:

在 ICACHE 的標簽頁面下的配置如下圖:

另外,SYS 標簽頁面下的“Timebase Source”設為 “Systick ”

2.1.2 Connectivity 的相關配置

根據 NUCLEO-H563 的硬件原理圖定義,這里選擇 USART3 打印輸出相關的 USB 操作信息。

不用開中斷或者 DMA,波特率默認 115200.

注意 USART3 使用的端口引腳是 PD8 與 PD9,與默認 STM32CubeMX 配置引腳不一樣。

在 USB 下面的配置如下:中斷優先等級設置為 6(在 NVIC 界面下修改);

2.1.3 Middleware 的相關配置

在 USBx 下面, 由于是 standalone 的示例,所以這里不用選擇操作系統的中間件。

? USBX 的具體配置如下圖,可以看出主要檢查或修改了默認的如下框出來的幾處地方。
? UXDevice memory pool size 由默認的 1024 設置為 4K(4*1024Bytes) 。
? UX_SLAVE_REQUEST_DATA_MAX_LENGTH 由默認的 2048 設置為 64 。
? 由于當前例程并非復合設備,所以 USBD_COMPOSITE_USE_IAD 設置為 false。
? USBX Device System Stack Size 由默認的 512 設置為 4K(4*1024Bytes) 。
? USBX Device Register Connection Callback 設置為 false 。
? 其余的配置保持默認即可。

2.1.4 System Clock 相關配置

由于選擇了 Bypass 模式的 8Mhz,注意要修改為一致(默認的是 25Mhz)。USB Device IP 的時鐘需要 48Mhz,這里選擇 HSI48=48Mhz ;

2.1.5 配置 HID 需要的按鍵

PC13 是對應原理圖中的 USER BUTTON,配置如下,中斷優先級為 7,比 USB(USB中斷優先級設為 6) 低:

并使能其中斷,生成相關中斷入口函數的代碼,

2.1.6 生成項目工程

為項目工程命名,生成項目工程,適當配置堆棧的大小:

這時候可能會提示警告,如下圖所示 :

回過頭去配置一下即可,如下圖:

然后生成項目工程代碼。

2.2.添加應用代碼

注意:這個 LAT 是基于 STM32Cube_FW_H5_V1.X.X 中的“\STM32Cube_FW_H5_V1.x.x\Projects\NUCLEO-H563ZI\Applications\USBX\Ux_Device_HID_Standalone \”例程,所以本 LAT 中提到的函數或者變量都可以直接使用或者參考例程中的函數或者變量。

2.2.1 完善串口打印

可以參考《STM32 USBx HOST HID standalone 示例移植》中的說明完善串口打印信息。由于是 USB Device,也可以通過 USB 協議分析儀去查看 log 調試(可選)。

2.2.2 添加 USBx 的初始化函數

在 main.c 中添加初始化函數如下圖,如果 main.c 中已經包含它,請忽略。

該函數在 CubeMX 中已經生成,添加調用即可;然后在 MX_USBX_Device_Init 函數的末尾去添加 USBX_APP_Device_Init ();的初始化的調用;

? 添加相關函數的聲明;
? 添加 PCD_HandleTypeDef hpcd_USB_DRD_FS;
? 添加USBX_APP_Device_Init函數中MX_USB_PCD_Init 函數的定義,該函數由STM32CubeMX 自動生成在 main.c 文件中,運行代碼,你會發現此時枚舉不成功。

2.2.3?添加 USBx 的處理函數

在 main 函數的 while 循環中添加函數 USBX_Device_Process(NULL);添加該函數USBX_Device_Process 的定義和申明在 app_usbx_device.c 文件中實現。

編譯無問題后,運行,實現枚舉。

2.2.4?HID 按鍵功能的實現

打開函數 USBX_DEVICE_HID_MOUSE_Task 并實現它,還有按鍵的 callback 回調函數的實現,復制粘貼例程程序的代碼即可。

添加相關變量的申明,解決相應的編譯錯誤之后,即可通過按鍵 User Button 模擬鼠標的功能。當每按一下 User Button(MCU 的 PC13 引腳),在 PC 端即可看到鼠標移動一下,符合預期。
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921401.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921401.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921401.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python創建并寫入excel文件

大家好,這里是七七,今天來跟大家分享一個python創建并寫入一個excel文件的小例子,話不多說,開始介紹。首先我們來看一下這一小段代碼。import openpyxl# 創建一個新的 Excel 工作簿workbook openpyxl.Workbook()# 獲取當前活動的…

react native 出現 FATAL EXCEPTION: OkHttp Dispatcher

react native 出現 FATAL EXCEPTION: OkHttp Dispatcher 報錯信息FATAL EXCEPTION: OkHttp DispatcherProcess: , PID: 8868java.lang.NoSuchMethodError: No virtual method toString(Z)Ljava/lang/String; in class Lokhttp3/Cookie; or its super classes (declaration of o…

sentinel實現控制臺與nacos數據雙向綁定

有兩種方式可以實現&#xff1a;Springboot客戶端做相應配置&#xff08;推薦&#xff09;修改sentinel-dashboard的源碼一、Springboot客戶端做相應配置&#xff08;推薦&#xff09;1、添加依賴<dependency><groupId>com.alibaba.csp</groupId><artifac…

Kubernetes (k8s)

Kubernetes (k8s) 以下是一份 ?Kubernetes (k8s) 基礎使用教程&#xff0c;涵蓋從環境搭建到核心操作的完整流程&#xff0c;附詳細命令和示例&#xff1a; &#x1f680; ?一、環境準備&#xff08;3種方式&#xff09;?? ?1. 本地開發環境&#xff08;推薦&#xff09;?…

三打ANSYS HFSS

2. 激勵方式&#xff08;端口&#xff09;詳細對比分析在HFSS中&#xff0c;“激勵方式”和“端口”這兩個詞經常混用&#xff0c;但嚴格來說&#xff0c;“端口”是實現“激勵”的一種最主要的方式。端口類型工作原理適用情況優點缺點波端口 (Wave Port)默認首選。計算端口的固…

3.python——數據類型轉換

python的數據類型轉換分為兩種&#xff1a; 隱式轉換&#xff1a;自動完成 顯式轉換&#xff1a;用類型函數轉換 隱式轉換 # 自動轉為浮點數 num_int 123 num_flo 1.23num_new num_int num_flo顯式轉換 整型 x int(1) # x 輸出結果為 1 y int(2.8) # y 輸出結果為 2 z …

迅為RK3568開發板OpenHarmonyv3.2-Beta4版本測試-命令終端

將串口連接到開發板的調試串口&#xff0c;進入 OpenHarmony 系統后&#xff0c;會自動進入 OpenHarmony終端&#xff0c;如下圖所示&#xff1a;

【面試題】介紹一下BERT和GPT的訓練方式區別?

BERT(雙向編碼器): 預訓練任務: 掩碼語言模型(MLM):隨機掩蓋15%的token,其中: 80%替換為[MASK] 10%替換為隨機token 10%保持原樣 下一句預測(NSP):判斷兩個句子是否連續(后續版本已移除) 訓練特點: 使用雙向Transformer編碼器 同時利用左右上下文信息 適合理解類任…

邪修實戰系列(1)

1、第一階段邪修實戰總覽&#xff08;9.1-9.30&#xff09; 把第一階段&#xff08;基礎夯實期&#xff09;的學習計劃拆解成極具操作性的每日行動方案。這個計劃充分利用我“在職學習”的特殊優勢&#xff0c;強調“用輸出倒逼輸入”&#xff0c;確保每一分鐘的學習都直接服務…

XR數字融合工作站打造智能制造專業學習新范式

智能制造是工業4.0的核心發展方向&#xff0c;涵蓋數字化設計、智能生產、工業機器人、數字孿生、物聯網等關鍵技術。然而&#xff0c;傳統教學模式在設備成本高、實訓風險大、抽象概念難理解等方面存在諸多挑戰。XR數字融合工作站,利用VR/AR/MR等技術&#xff0c;通過虛擬仿真…

基于FPGA實現數字QAM調制系統

基于FPGA實現數字QAM調制系統題目要求一、代碼設計1.頂層2.分頻3.m序列4.串轉并5.映射6.正弦波余弦波生成ROM和7.ask二、仿真波形總結題目要求 FPGA實現數字QAM調制系統要求根據正交振幅調制原理&#xff0c;利用正弦載波信號發生器&#xff0c;實現調制信號。調制原理會利用到…

DAY 22 復習日

浙大疏錦行復習日 仔細回顧一下之前21天的內容&#xff0c;沒跟上進度的同學補一下進度。 作業&#xff1a; 自行學習參考如何使用kaggle平臺&#xff0c;寫下使用注意點&#xff0c;并對下述比賽提交代碼 導入需要的庫 import pandas as pd # 用于數據處理和分析&#xff0c;…

biocmanager安裝 庫 老是提示網絡連接錯誤 才嘗試各種辦法

您好&#xff0c;遇到 BioManager &#xff08;通常是 BiocManager&#xff09;安裝R包時提示網絡連接錯誤確實非常令人頭疼。這通常與R/RStudio的配置、網絡環境&#xff08;尤其是國內用戶&#xff09;或SSL證書問題有關。 請不要著急&#xff0c;我們可以按照從易到難的順序…

【開題答辯全過程】以 智能商品數據分析系統為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

解構復雜財務逆向業務:如何優雅地生成與管理負數單?

文章目錄一 核心復雜性二 關鍵設計模式&#xff1a;三 棘手場景與解決方案&#xff1a;1.分批合并處理&#xff1a;負數單需能智能拆分&#xff0c;精準沖銷多批次的正向單據。2.優先級問題&#xff1a;3.超額處理&#xff1a;系統應堅決攔截而非處理&#xff0c;防止資金損失和…

Android集成OpenCV4實例

Android集成OpenCV4分以下幾步驟&#xff1a; 使用Android Studio Giraffe | 2022.3.1創建一個Empty Views Activity空項目&#xff0c;包名為&#xff1a;com.example.andopencvdemo00 &#xff0c; 創建成功后&#xff0c;進行以下相關設置&#xff1a; 第一步&#xff1a;在…

npy可視化方法

npviewer 是一個應用程序&#xff0c;它允許您以熱圖的形式可視化 numpy 的 npy 文件中的數據。該應用程序根據不同的模式自動選擇適當的維度進行顯示。 根據不同的模式自動選擇適當的維度進行顯示支持不同格式的 numpy 數據的可視化&#xff0c;如 RGB 和灰度用戶友好的界面使…

【Cesium】介紹及基礎使用

文章目錄一、Cesium 介紹二、 使用1、引入 cesium2、Viewer 配置選項1. 基礎控件配置2. 場景與渲染配置3. 地形配置4. 天空與大氣效果3、坐標系系統3.1 地理坐標系3.2 笛卡爾空間直角坐標系3.3 屏幕坐標系4、Entity 實體4.1 簡介4.2 Entity 常見圖形類型Point 點Polyline 線Pol…

基于SpringBoot的運動服裝銷售系統【2026最新】

作者&#xff1a;計算機學姐 開發技術&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源碼”。 專欄推薦&#xff1a;前后端分離項目源碼、SpringBoot項目源碼、Vue項目源碼、SSM項目源碼、微信小程序源碼 精品專欄&#xff1a;…

【嵌入式DIY實例-ESP32篇】-傾斜彈跳球游戲

傾斜彈跳球游戲 文章目錄 傾斜彈跳球游戲 1、MPU6050介紹 2、硬件準備與接線 3、代碼實現 在這個交互式 ESP32 Arduino 項目中,我們模擬了一個綠色球體在全彩 ST7789 170320 LCD 屏幕上彈跳,完全由 MPU6050 陀螺儀的運動控制。當你傾斜傳感器時,球體會呈現出逼真的物理運動,…