色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于STM32CubeMX的USB鼠標(biāo)例程

單片機(jī)愛好者 ? 來源:MCU起航 ? 作者:?jiǎn)纹瑱C(jī)愛好者 ? 2020-05-06 14:21 ? 次閱讀

大家好,我是MCU起航。

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

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

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

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

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

其次,RCC這里外部高速時(shí)鐘,外部默認(rèn)都接8MHZ。

第三,SYS這里,調(diào)試接口選擇Serial Wire。我個(gè)人習(xí)慣用SW接口,你們隨意。

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

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

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

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

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

下面要注意幾個(gè)地方!

VID和PID分別代表廠商(Vender)編號(hào)和產(chǎn)品(PID)編號(hào),VID不能隨便用,要花錢向USB協(xié)會(huì)申請(qǐng),所以這里僅供學(xué)習(xí)使用。PID還好,由廠商自己定義。

manufacturer_string是廠商字符串,product_string是產(chǎn)品字符串,configuration_string是配置字符串,interface_string是接口字符串,這四個(gè)是可以手動(dòng)修改的。放心改,不要錢。我隨便改了兩個(gè)。

還有一個(gè)LANGID_STRING,它表示USB設(shè)備支持什么語言。我這里沒有動(dòng),默認(rèn)選擇英語。

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

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

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 */

主函數(shù)里:

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);

}

好了,保存、編譯、下載、上電。你會(huì)發(fā)現(xiàn),板子上電的時(shí)候電腦右下角彈出一個(gè)“發(fā)現(xiàn)新設(shè)備”的提示框。

然后你的屏幕上的光標(biāo)位置,每隔1秒,自動(dòng)點(diǎn)一下鼠標(biāo)左鍵。

很多人到這里,其實(shí)是蒙的!!!

為什么?

自始至終,STM32CubeMX里,和主函數(shù)里沒出現(xiàn)鼠標(biāo)相關(guān)的函數(shù)(除了我們自定義的一個(gè)帶鼠標(biāo)字符的數(shù)組),怎么就出來一個(gè)鼠標(biāo)?

為什么不是鍵盤?

為什么不是優(yōu)盤? 這個(gè)我可以回答,因?yàn)槟氵x的是HID,而不是存儲(chǔ)類設(shè)備。

為什么不是游戲手柄?

其實(shí),你可以理解為,這是官方提供給我們的一個(gè)鼠標(biāo)例程。這里簡(jiǎn)單說下USB設(shè)備上電的過程:

1、設(shè)備插入后,USB主機(jī)自動(dòng)對(duì)設(shè)備進(jìn)行復(fù)位,使設(shè)備地址為零。

2、USB主機(jī)對(duì)地址為零的設(shè)備提問:你是個(gè)什么東西?

3、USB設(shè)備說:我的PID是XX,VID是XX,USB協(xié)議是2.0等等。

4、USB主機(jī)再次對(duì)設(shè)備進(jìn)行復(fù)位,然后給復(fù)位后的設(shè)備分配一個(gè)地址。

5、USB主機(jī)向新地址提問:你是個(gè)什么東西? USB設(shè)備回答:…

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

7、USB設(shè)備,在向主機(jī)回復(fù)配置集合的時(shí)候,表明自己的身份:你好,我是個(gè)鼠標(biāo)!

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

單是這個(gè)還不夠,還要結(jié)合報(bào)告描述符。也在這個(gè)文件內(nèi),名字是HID_MOUSE_ReportDesc。內(nèi)容如下:

__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

};

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

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

無論是配置集合,還是報(bào)告描述符,這里都不做解釋,因?yàn)橐粌善恼赂菊f不完。這里只說一點(diǎn),由于報(bào)告描述符的規(guī)定,鼠標(biāo)設(shè)備向電腦發(fā)送數(shù)據(jù)的時(shí)候,一般是發(fā)送4個(gè)字節(jié)的數(shù)據(jù)。

字節(jié)1:無符號(hào)字符型,低三位分別表示鼠標(biāo)的左、右、中鍵是否被按下,1按下,0抬起。

字節(jié)2:有符號(hào)字符型,表示鼠標(biāo)在x方向的移動(dòng)。

字節(jié)3:有符號(hào)字符型,表示鼠標(biāo)在y方向的移動(dòng)。

字節(jié)4:有符號(hào)字符型,表示鼠標(biāo)滾輪的移動(dòng)。

所以,我在上面的代碼中循環(huán)將第一個(gè)字節(jié)的值設(shè)為0和1,就能看到屏幕上的光標(biāo)每隔一秒,觸發(fā)一下鼠標(biāo)左鍵。

好了,不知不覺說的有點(diǎn)多。還好大部分都是圖片,看起來不難理解。總結(jié)起來,就是個(gè)發(fā)送數(shù)據(jù)的過程。

還是那句話,USB協(xié)議比較復(fù)雜,只靠一兩篇文章是學(xué)不會(huì)的。完整例程我放到了公眾號(hào)后臺(tái)(單片機(jī)愛好者),回復(fù)關(guān)鍵詞:USB鼠標(biāo)例程,即可獲取下載鏈接。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    8055

    瀏覽量

    269289
  • STM32
    +關(guān)注

    關(guān)注

    2282

    文章

    10983

    瀏覽量

    361007
收藏 14人收藏
  • 凌鸥创芯1
  • 勿忘8初心1
  • 星空好1
  • efans_41066b1
  • 云中漫步_4841
  • 一发入魂1

評(píng)論

相關(guān)推薦

使用STM32CubeMX進(jìn)行配置USB的時(shí)候,有哪些小的需要注意的細(xì)節(jié)?

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

STM32開發(fā)入門進(jìn)階必備!《STM32嵌入式系統(tǒng)開發(fā)—基于STM32CubeMX和HAL庫》新書發(fā)布!

近日,由華清遠(yuǎn)見教育科技集團(tuán)精心編撰的教育部高等學(xué)校電子信息類專業(yè)教學(xué)指導(dǎo)委員會(huì)規(guī)劃教材、普通高等教育電子信息類專業(yè)系列教材——《STM32嵌入式系統(tǒng)開發(fā)—基于STM32CubeMX和HAL庫》重磅
的頭像 發(fā)表于 04-03 14:54 ?349次閱讀
<b class='flag-5'>STM32</b>開發(fā)入門進(jìn)階必備!《<b class='flag-5'>STM32</b>嵌入式系統(tǒng)開發(fā)—基于<b class='flag-5'>STM32CubeMX</b>和HAL庫》新書發(fā)布!

請(qǐng)問STM32cubeMX中文版怎么設(shè)置?

STM32cubeMX中文版怎么設(shè)置?
發(fā)表于 03-13 06:12

STM32CubeMX生成的FreeRTOS源碼格式如何優(yōu)化?

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

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

電子發(fā)燒友網(wǎng)站提供《STM32CubeMX用于STM32配置和初始化C代碼生成.pdf》資料免費(fèi)下載
發(fā)表于 02-26 17:32 ?656次下載

工程師開發(fā)利器:STM32CubeMX 與 eDesignSuite 的協(xié)同開發(fā)

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

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

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

STM32CubeMX的菜單介紹

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

如何使用STM32CubeMX修改STM32Cube_FW_MP2?

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

STM32CUBEMX界面重影嚴(yán)重的原因?怎么解決?

STM32CUBEMX 界面重影嚴(yán)重,有相同問題的嗎
發(fā)表于 06-03 07:46

stm32cubemx配置單片機(jī)的USB外設(shè)為CDC模式,燒寫程序時(shí)出錯(cuò)怎么解決?

我用的單片機(jī)型號(hào)是STM32L496VGT3,按照網(wǎng)上的教程用STM32CUBEMX將單片機(jī)的USB外設(shè)配置為CDC模式,生成代碼之后在燒寫程序是總是提示下面的錯(cuò)誤,請(qǐng)問有哪位遇到過類似的問題嗎,望指教,謝謝!在網(wǎng)上下載了
發(fā)表于 04-29 08:09

STm32cubeMX生成STM32F412RGT6-USB_CDC工程初始化失敗的原因?

請(qǐng)教用STm32cubeMX生成STM32F412RGT6-USB_CDC工程初始化失敗
發(fā)表于 04-28 06:56

STM32CubeMX USB Mass Storage怎樣把U-盤改設(shè)為CDROM?

我使用STM32CubeMX,基于STM32_FW_F7_V1.12.0生成了個(gè)USB Mass Storage例子。F746參考板插上window10PC上后,可以馬上被認(rèn)出是u盤。 但
發(fā)表于 04-26 06:15

STM32CubeMX怎么設(shè)置stm32F103 usb -&gt; vcp?

STM32CubeMX 怎么設(shè)置 stm32F103 usb -> vcp ?最好有實(shí)例,謝
發(fā)表于 04-25 06:57

請(qǐng)問對(duì)實(shí)時(shí)性要求較高要用STM32CubeMX嗎?

對(duì)實(shí)時(shí)性要求較高要用STM32CubeMX么?
發(fā)表于 04-24 06:18

電子發(fā)燒友

中國(guó)電子工程師最喜歡的網(wǎng)站

  • 2931785位工程師會(huì)員交流學(xué)習(xí)
  • 獲取您個(gè)性化的科技前沿技術(shù)信息
  • 參加活動(dòng)獲取豐厚的禮品
主站蜘蛛池模板: 九九夜夜妹子 | 久久亚洲人成国产精品 | 99久久久免费精品国产 | 98色精品视频在线 | 亚洲AV国产福利精品在现观看 | 男人插曲视频大全免费网站 | 国产不卡视频在线观看 | 精品无码久久久久久久久 | 日本午夜看x费免 | 超碰在线公开视频 | 丁香美女社区 | 国产一卡 二卡三卡四卡无卡乱码视频 | 国产人妻人伦精品1国产 | 成人高清护士在线播放 | 久久中文字幕亚洲精品最新 | 亚洲日本欧美产综合在线 | 午夜AV亚洲一码二中文字幕青青 | yellow在线中文 | 天堂视频在线观看免费完整版 | 老师掀开短裙让我挺进动态 | 国产成人亚洲综合无 | 九九热精品视频在线观看 | 东热rq大乱交 | 娇小亚裔被两个黑人 | 韩日午夜在线资源一区二区 | 国产午夜理论片YY8840Y | 亚洲免费视频在线 | 四虎精品久久 | 国产乱码二卡3卡四卡 | 国产午夜高潮熟女精品AV | 伦理片在线线手机版韩国免费6 | 99视频免费观看 | 青青草原伊人网 | 亚洲中文字幕永久在线全国 | 耻辱诊察室1一4集动漫在线观看 | 午夜AV国产欧美亚洲高清在线 | 超碰98人人插 | 99re8热视频这在线视频 | 日日碰狠狠躁久久躁综合网 | 久久精品美女久久 | 最近免费中文字幕MV在线视频3 |