女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于STM32CubeMX的USB鼠標例程

單片機愛好者 ? 來源:MCU起航 ? 作者:單片機愛好者 ? 2020-05-06 14:21 ? 次閱讀

大家好,我是MCU起航。

最近在玩STM32CUBE的USB功能,用起來還是挺方便的。只要配置一下,設備描述符、配置描述符、接口描述符什么的,都能給你自動生成,其中還包括比較復雜的報告描述符。

這次給大家演示一下如何用STM32CUBE的配置,自動生成一個USB鼠標的過程。這里多說一句,USB是一套比較復雜的協議,單靠一兩個例程是不可能完全理解的。至少要找本書,再配著USB官網的各種協議啃幾天,才算入門。

所以這個例子起到的是一個拋磚引玉的過程,如果你真的感興趣,就去找相關資料學習。STM32CubeMX的便利,在很多方面都給了我們很大的幫助!當然,如果有感興趣的想繼續學的,可以留言,我會試著寫一些這方面的文章。

首先,軟件版本我用的是STM32CubeMX的5.3.0,并不是最新版。為什么沒用最新的?最新版有個很惡心的bug,好像是打不開工程,記不清了。

打開STM32CUBE,選擇一個芯片。這里我選的是STM32F103C8T6。

其次,RCC這里外部高速時鐘,外部默認都接8MHZ。

第三,SYS這里,調試接口選擇Serial Wire。我個人習慣用SW接口,你們隨意。

第四,GPIO這里,我把PA15設置為推挽輸出,默認高電平。這是和我的硬件電路相關的。首先要明確的一點是,STM32F103C8的這個片子,只支持USB的FS模式,也就是全速(FULL SPEED)模式。

USB主機(也就是電腦)如何知道USB設備支持全速模式?只要在USB設備的D+數據線上接一個1.5K的上拉電阻即可。而我這里這個上拉電阻的電源端是接到了STM32的PA15上面。如圖:

所以,如果你的板子上,上拉電阻默認接到VCC,這一步就不用管了。沒有的話,自己想辦法~~~

第五,Connectivity選項里,選擇USB,然后右側Device(FS)前面打勾,下面不用管。

第六,中間件(Middleware)這里,選擇USB。右側上面選擇Human Interface Device Class,也就是俗稱的HID。

下面要注意幾個地方!

VID和PID分別代表廠商(Vender)編號和產品(PID)編號,VID不能隨便用,要花錢向USB協會申請,所以這里僅供學習使用。PID還好,由廠商自己定義。

manufacturer_string是廠商字符串,product_string是產品字符串,configuration_string是配置字符串,interface_string是接口字符串,這四個是可以手動修改的。放心改,不要錢。我隨便改了兩個。

還有一個LANGID_STRING,它表示USB設備支持什么語言。我這里沒有動,默認選擇英語。

7、修改時鐘。USB那里需要48M的時鐘,別的無所謂。照著改吧!

8、生成工程。工程名稱和路徑,不用說了,那個是基本的。主要是框住的這兩個位置,根據你的代碼習慣和編譯器(KEIL還是IAR)來進行選擇。

9、修改代碼。打開工程,找到main.c,添加一些代碼。

/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */

#include "usbd_hid.h"

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/

/* USER CODE BEGIN PTD */

uint8_t MouseData01[4] = {0,0,0,0};

extern USBD_HandleTypeDef hUsbDeviceFS;

/* USER CODE END PTD */

主函數里:

while (1)

{

/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

MouseData01[0] = 0x01;

USBD_HID_SendReport(&hUsbDeviceFS,(uint8_t*)&MouseData01,sizeof(MouseData01));

HAL_Delay(1000);

MouseData01[0] = 0x00;

USBD_HID_SendReport(&hUsbDeviceFS,(uint8_t*)&MouseData01,sizeof(MouseData01));

HAL_Delay(1000);

}

好了,保存、編譯、下載、上電。你會發現,板子上電的時候電腦右下角彈出一個“發現新設備”的提示框。

然后你的屏幕上的光標位置,每隔1秒,自動點一下鼠標左鍵。

很多人到這里,其實是蒙的!!!

為什么?

自始至終,STM32CubeMX里,和主函數里沒出現鼠標相關的函數(除了我們自定義的一個帶鼠標字符的數組),怎么就出來一個鼠標?

為什么不是鍵盤?

為什么不是優盤? 這個我可以回答,因為你選的是HID,而不是存儲類設備。

為什么不是游戲手柄?

其實,你可以理解為,這是官方提供給我們的一個鼠標例程。這里簡單說下USB設備上電的過程:

1、設備插入后,USB主機自動對設備進行復位,使設備地址為零。

2、USB主機對地址為零的設備提問:你是個什么東西?

3、USB設備說:我的PID是XX,VID是XX,USB協議是2.0等等。

4、USB主機再次對設備進行復位,然后給復位后的設備分配一個地址。

5、USB主機向新地址提問:你是個什么東西? USB設備回答:…

6、兩次回答一樣,說明USB設備的地址分配成功。USB主機繼續提問,獲取其它描述符。

7、USB設備,在向主機回復配置集合的時候,表明自己的身份:你好,我是個鼠標!

也就是說,在配置集合中,有信息說明這個設備是鼠標,我們看下。在usb_hid.c文件中,有一個數組:USBD_HID_CfgFSDesc,其中一行:

單是這個還不夠,還要結合報告描述符。也在這個文件內,名字是HID_MOUSE_ReportDesc。內容如下:

__ALIGN_BEGINstaticuint8_tHID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE]__ALIGN_END=

{

0x05,0x01,

0x09,0x02,

0xA1,0x01,

0x09,0x01,

0xA1,0x00,

0x05,0x09,

0x19,0x01,

0x29,0x03,

0x15,0x00,

0x25,0x01,

0x95,0x03,

0x75,0x01,

0x81,0x02,

0x95,0x01,

0x75,0x05,

0x81,0x01,

0x05,0x01,

0x09,0x30,

0x09,0x31,

0x09,0x38,

0x15,0x81,

0x25,0x7F,

0x75,0x08,

0x95,0x03,

0x81,0x06,

0xC0,0x09,

0x3c,0x05,

0xff,0x09,

0x01,0x15,

0x00,0x25,

0x01,0x75,

0x01,0x95,

0x02,0xb1,

0x22,0x75,

0x06,0x95,

0x01,0xb1,

0x01,0xc0

};

是不是很懵逼?這都是啥?怎么沒有注釋?

別問我,我也不知道。可能是研發人員懶,也可能是他們忘了。

無論是配置集合,還是報告描述符,這里都不做解釋,因為一兩篇文章根本說不完。這里只說一點,由于報告描述符的規定,鼠標設備向電腦發送數據的時候,一般是發送4個字節的數據。

字節1:無符號字符型,低三位分別表示鼠標的左、右、中鍵是否被按下,1按下,0抬起。

字節2:有符號字符型,表示鼠標在x方向的移動。

字節3:有符號字符型,表示鼠標在y方向的移動。

字節4:有符號字符型,表示鼠標滾輪的移動。

所以,我在上面的代碼中循環將第一個字節的值設為0和1,就能看到屏幕上的光標每隔一秒,觸發一下鼠標左鍵。

好了,不知不覺說的有點多。還好大部分都是圖片,看起來不難理解。總結起來,就是個發送數據的過程。

還是那句話,USB協議比較復雜,只靠一兩篇文章是學不會的。完整例程我放到了公眾號后臺(單片機愛好者),回復關鍵詞:USB鼠標例程,即可獲取下載鏈接。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • usb
    usb
    +關注

    關注

    60

    文章

    8146

    瀏覽量

    270889
  • STM32
    +關注

    關注

    2290

    文章

    11017

    瀏覽量

    362420
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    使用STM32CubeMX進行配置USB的時候,有哪些小的需要注意的細節?

    在使用STM32CubeMX進行配置USB的時候,是參照例程進行的配置,自己配置的就是沒有成功,例程就滅有問題,總感覺哪里沒有打開?有人遇到過需要注意的小細節嗎?
    發表于 04-23 06:54

    STM32開發入門進階必備!《STM32嵌入式系統開發—基于STM32CubeMX和HAL庫》新書發布!

    近日,由華清遠見教育科技集團精心編撰的教育部高等學校電子信息類專業教學指導委員會規劃教材、普通高等教育電子信息類專業系列教材——《STM32嵌入式系統開發—基于STM32CubeMX和HAL庫》重磅
    的頭像 發表于 04-03 14:54 ?599次閱讀
    <b class='flag-5'>STM32</b>開發入門進階必備!《<b class='flag-5'>STM32</b>嵌入式系統開發—基于<b class='flag-5'>STM32CubeMX</b>和HAL庫》新書發布!

    請問如何使用STM32CubeMX修改STM32Cube_FW_MP2_V1.0.0固件中的項目例程引腳?

    在該固件包中我找不到任何通過STM32CubeMX生成的.ioc文件
    發表于 03-13 06:13

    請問STM32cubeMX中文版怎么設置?

    STM32cubeMX中文版怎么設置?
    發表于 03-13 06:12

    STM32CubeMX生成代碼就會覆蓋CMakeLists.txt文件,怎么解決?

    請教一下用STM32CubeMX生成代碼后,我自己加了一個頭文件和源文件,這些自己加的文件不是要配置到CMakeLists.txt編譯么,但下載在用STM32CubeMX生成成代碼,就會覆蓋CMakeLists.txt文件,這種一般怎么解決
    發表于 03-12 08:03

    STM32CubeMX無法打開.ioc文件怎么解決?

    我的STM32CubeMX不能打開別人的工程文件,雙擊打開.ioc文件后會全白,只剩左上角有個home,什么也點不了,但是我自己可以創建工程,也可以打開我自己創建的工程。請問我該如何解決
    發表于 03-12 07:39

    STM32CubeMX生成的FreeRTOS源碼格式如何優化?

    如圖,STM32CubeMX生成的FreeRTOS源碼格式有待優化,空格都是以箭頭的方式呈現,觀感很差。FreeRTOS官方下載的源碼則不存在這個問題,說明是STM32CubeMX生成源碼的過程出現的格式問題,希望ST官方能對此做下優化!
    發表于 03-10 08:04

    使用STM32CubeMX生成CMake工程中的FLASH.ld被更改怎么解決?

    使用STM32CubeMX生成CMake工程之后,對STM32xxxx_FLASH.ld進行了修改。然后再次使用STM32CubeMX對工程進行修改的時候,STM32xxxx_FLAS
    發表于 03-10 06:52

    STM32CubeMX用于STM32配置和初始化C代碼生成

    電子發燒友網站提供《STM32CubeMX用于STM32配置和初始化C代碼生成.pdf》資料免費下載
    發表于 02-26 17:32 ?658次下載

    工程師開發利器:STM32CubeMX 與 eDesignSuite 的協同開發

    工程師開發利器推介:STM32CubeMX 與 eDesignSuite 的協同開發STM32CubeMX 和 eDesignSuite 的綜合說明及其協同開發場景的分析:一、STM32CubeMX
    的頭像 發表于 02-26 14:07 ?630次閱讀
    工程師開發利器:<b class='flag-5'>STM32CubeMX</b> 與 eDesignSuite 的協同開發

    使用stm32cubeMX無法生成mdk工程文件?

    幾年前使用過cubemx,可以生成keil的工程文件。最近有個工程使用cubemx創建,結果只能生成stm32cubemx類型的文件,無法生成mdk的工程文件。 請教如何解決。 (我之前使用過多次
    發表于 01-04 20:03

    STM32CubeMX的菜單介紹

    相信初學者打開STM32CubeMX一定是一臉懵逼,里面都是全英文的,不知道從何入手。這里先給大家簡單講解一下。在新建工程這一欄里,我們最常用的是第一個,它會彈出一個芯片列表供你選擇,然后就會創建一
    的頭像 發表于 12-25 21:03 ?407次閱讀
    <b class='flag-5'>STM32CubeMX</b>的菜單介紹

    STM32CubeMX為什么無法添加rt-thread-nano?

    STM32CubeMX 無法添加 rt-thread-nano
    發表于 09-27 06:17

    stm32用串口燒錄怎么設置

    準備工作 確保您擁有STM32開發板和相應的硬件設備,如USB轉串口模塊。 安裝STM32CubeMXSTM32CubeProgrammer軟件,這些是ST官方提供的工具,用于配置和
    的頭像 發表于 08-22 09:33 ?2933次閱讀

    如何使用STM32CubeMX修改STM32Cube_FW_MP2?

    在該固件包中我找不到任何通過STM32CubeMX生成的.ioc文件
    發表于 07-24 06:17