frontpage hit counter Skip to content
Wararka Mobiles iyo Falanqeynta, Talooyinka Ciyaaraha, Qalabka!

Xiriirka USB HID ee STM32 ilaa STM32IDE

USB HID interface for STM32 to STM32IDE

Tiro ka mid ah qalabka korantada ee loo yaqaan ‘STM32 microcontrollers’ ayaa leh miiska USB-ka dusha sare si ay ula xiriiraan kumbuyuutarrada Caadi ahaan, waxaa ugu habboon in la adeegsado darawalka CDC (Wada Hadalka Qalabka) wadaha ay bixiso ST Microelectronics. Waxay kuu oggolaaneysaa inaad u isticmaasho UART dhinaca kumbuyuutarka dhinaca USB oo uma baahna rakibaadda darawalada. Dhinaca STM32, waxaad u baahan tahay oo keliya inaad wax ka beddesho hawlgallada wax soo saarka xogta, inta soo hartay ayaa loo sameeyaa si madaxbanaan. Intaas waxaa sii dheer, xawaaraha isku xirka noocan oo kale ah wuxuu noqon karaa ku dhawaad ​​wixii kumbuyuutar taageera.

Si kastaba ha noqotee, tiro ka mid ah horumarinnada, gaar ahaan markaad u timid shirkad kale oo adeegsata HID Class (Qalabka Is-dhexgalka Aadanaha), marka la eego sameynta nooca cusub ee aaladda, waa inaad taageertaa muuqaalka hore ee la soo xulay. Taas oo, dhab ahaantii dhacday. Tusaalooyin ka mid ah mashruucyada ST lafteeda, oo ay bixiyaan markii ay ku xirayaan STM32 Cube MX iyo IDE, sida caadiga ah, waxay bixiyeen faham yar, laakiin ma aysan sheegin waxa iyo sida loo sameeyo. Mar waan fahmay USB-ga, xitaa waxaan qorey darawalkeyga, laakiin waa sidaas waqti dheer kahor … Kaliya xasuus guud ayaa haray. Sidaa darteed, waa inaan raadsado macluumaad dheeri ah si aan u helo halka laga bilaabayo.

Midkii ugu horreeyay waxaa laga helay fiidiyow YouTube ah oo ku yaal HID qaabka 5 daqiiqo gudahood 🙂 Qoraaga wuxuu siinayaa marin koodhkiisa GitHub. Wax walba, sida qabow, qurux badan, kaliya ku dheji naftaada wax walbana waxay noqon doonaan wax cajiib ah. Ku xallinta faallooyinka ka hooseeya fiidiyowga, qaar ka mid ah tani waxay ahayd ku filan. Markii aan bartay isha, waxaan gartay inaysan jirin aragti hoose, iyo heerka macluumaadka la helay uu yar yahay si loo xalliyo hawsha. Laakiin sharciga leh qalabkan ayaa si cad waxtar u lahaa. Xalka arinta iyada oo la adeegsanayo cube (STM32Cube MX) ayaa aniga igu qaabilay shaqsi ahaan in kabadan qaabab kale, maadaama ay ii ogolaato inaan ka baxsado dhowr howlo oo hooseeya isla markaana mashruuca marwalba lagu sameeyo qaab isku mid ah. Sidaas awgeed, daraasadda tusaalahan waxay muujisay faylalka ay tahay in fiiro gaar ah la siiyo, meesha iyo waxa la beddeli karo ama lagu dari karo, howlahee loo adeegsan doonaa helitaanka iyo soo dirista xogta gaar ahaan jawiga barnaamijkeenna loo xushay.

Raadinta soo socota aad bay u guulaysatay. Habr waa goob caan ah oo aad ka heli karto macluumaad fara badan oo faa’iido leh oo ku saabsan mowduucyada elektiroonigga ah ee kala duwan. Waxaa laga helay halkaas iyo maqaalka STM32 iyo USB-HID – way fududahay. Anigu ma ihi macaamiil caadi ah Habr mana aqaano qoraaga maqaalkaan RaJa, laakiin fekerkeyga tani waa maqaal aad u wanaagsan oo sharxaya mabaadiida aasaasiga ah ee interface HID. Akhrin la’aanteed, micno ma lihi in la sii akhriyo halkaan, maxaa yeelay wixii intaa ka dambeeya waxaa jira faallooyin la xiriira la-qabsiga koodhka jawiga horumarka STM32IDE / STM32CubeMX + Atollic TrueStudio. (Dheeraad STM32IDE). Haa, oo aad caan u ah 2014 iyo mashruuc runtii aad u wanaagsan EmBlocks, alas, wuu dhintay.

Waxa ugu horeeya ee go’aan laga gaadhaa waa sida loo tijaabiyo qalabka cusub ee la abuuray. Waxyaabaha ku saabsan… labaatan sano ka hor waxaan u isticmaalay falanqeeyaha taraafikada USB-ga iyo isku-dirka tani – waa mid aad u faa’iido badan, laakiin caruusado qaali ah 🙂 Hada ma haysto fursad sidan oo kale ah, oo waxaa jiri kara hab ka sahlan. Gaar ahaan istiraatiijiyada caadiga ah ee fudud adigoon qorin darawalkaaga. Qorayaasha labada mashruuc ee aan kor ku soo sheegnay waxay u arkeen habka ugu fudud iyaga – qorista barnaamij fudud oo ku qoran luqadaha ay yaqaaniin. Laakiin qoraaga maqaalka ee Habré wuxuu qaaday talaabo aad u sax ah – wuxuu qoray mashruuc u gaar ah, oo la jaan qaada barnaamijka Dembiilayaasha ee ST HID (isku xirka ayaa kujira qodobka), kaas oo noo ogolaanaya inaan xakameyno aaladdayaga si garaaf ahaan ah oo aan u dirno xogteeda iyo eeg waxa ka yimid qalabkeena. Xaqiiqdii, barnaamijka ayaa loo adeegsan karaa mustaqbalka si uu uga jaro barnaamij mustaqbalka ah oo ku saabsan microcontroller-ka la xushay.

Waxaan ku bartay mashruuca HID mashruuca daahfurka STM32L476. Guddigu, guud ahaan markay hadlayaan, waxay noqon karaan mid kasta oo ah meesha uu ku yaal maaddada USB-ga ee microcontroller-ka jir ahaan ku xiran yahay isku xiraha USB gaar ah. Waxaan sidoo kale haystaa Nucleo 32 oo leh STM32L4, laakiin waxaa jira hal deked USB ah oo loo adeegsado barnaamijyada / dejinta, iyo is-gaadhsiinta marti-geliyaha, kaas oo ku daraya is-dhexgalka is-dhexgalka isla markaana u adeegi kara asal ahaan is-faham dheeraad ah. Ma u baahanahay?

Marka, faallooyinka iyo isugeynta qodobka ku saabsan iskuxirka HID iyo STM32IDE qiyaastii waa tilaabooyin la mid ah tii maqaalka Habrovsk.

Qaab dhismeedka mashruuca

Gudaha STM32IDE, qaab dhismeedka dhamaan mashaariicda waxaa lagu cayimay marka mashruuc laga soo saarey deegaanka ujeedka loogu talagalay shaqeynta pin isla markaana adeegsadaha uusan ubaahneyn inuu ka walwalo taas. Gaar ahaan, kuub (oo ah STM32Cube MX gaar ah, oo ku dhexyaal gudaha STM32IDE), dhaqaajiso USB ahaan aalad ahaan kuna dar Middleware USB Custom HID.

Tag Qaabeynta Clock. Waxay u badan tahay inay jiraan dhibaatooyin la xiriira soo noqnoqda nidaamka oo lagu calaamadeeyay midab casaan leh.

Hadday sidaas tahay, dhagsii qodobka ‘Resolve Clock Issue’ iyo, inta badan, wax walba waxaa lagu toosin doonaa inta jeer ee ugu badan. Waxa ugu weyn – USB Clock waxaa loo dejin doonaa 48 MHz. Waa in la ogaadaa in qoyska STM32L4, 48 MHz oscillator si otomaatig ah loo habeeyay iyadoo la raacayo SOF (Start Of Frame), kaas oo kuu oggolaanaya inaad abuurto aaladda USB-ka oo aan lahayn krist / oscillator dibadda ah. Marka laga reebo, dabcan, naqshadda inteeda kale waxay u oggolaaneysaa isticmaalka matoorrada aan-ahayn-rubuc. Qoysaska kale, ma aanan hubin, sababtoo ah mashruuceyda hada waxa uu ahaa L4 la doortay. Waa in la ogaadaa oo keliya in marka la adeegsanayo USB-ga ay jiraan waxoogaa soo noqnoqda oo ah mikrokeroonka. Waxaan qiyaasay mashruuc kale oo aan u baahanahay inaan kula xiriiro martida oo isla waqtigaasna aan ku qaato ugu yaraan waqtiga hadda la joogo. Hawluhu waa sahlan yihiin, uma baahna xawaare aad u sarreeya waxaanan doonayay inaan ku soo saaro MK at 8 MHz. Waxaa soo baxday inaanan rakibi karin wax ka yar 14 MHz markii aan ku xirmayo USB, RCC ma oggola. Waa inaan joojiyaa wareega wareega xiga ee 16 MHz.

Xaqiiqdii, qaabeynta qalabka USB iyo xulashada feylasha mas’uul ka ah waxqabadka aasaasiga ah ee shaashadda ayaa hadda dhammaatay. Dhamaan meelaha kale ee ku yaal gudiga la xushay si otomaatig ah ayaa loo habeeya markii loo xusho bilowga mashruuca. Waan badbaadinaa, waxaan abuurnaa mashruuca oo waxaan u gudubnaa “barnaamijka” marka la barbardhigo mashruuca lagu sharaxay Habré.

Waa erey cabsi abuuraya

Xogta caadiga ah ayaa diyaarinaysa u gudbinta macluumaadka marti-geliyaha, waxa ay ka qaban doonto. Dulsaar ahaan, waxaad arki kartaa tilmaamayaasha qalabka iyo qaabeynta. Hadda waad iska dhaafi kartaa markii ay noqdeen, laakiin mustaqbalka waxay u baahan doonaan in wax laga beddelo. Si kastaba ha noqotee, waxaa suurtagal ah in ay ka dhalan doonaan qiyaasaha lagu ridayo qafiska. Waxa aan laakiin farxadda lahayn mooyee. Laakiin Warbixinta Tusiyaha waa in si fiican loo barto – tani dhab ahaantii waa waxa ugu weyn ee loo baahan yahay in lagu qoro qalimaan mustaqbalka. Ma aqaan halka RaJa laga helay sharraxayaashiisa, kiiskeenna waxaa ka dhashey kubbad waxayna ku yaalliin faylalka mashruuca soo socda:

Tifatiraha Raja Tilmaamaha ka socda ST Faylka mashruuca
RHID_DeviceDescriptor USBD_FS_DeviceDesc usbd_desc.c
RHID_ConfigDescriptor USBD_CUSTOM_HID_CfgFSDesc usbd_customhid.c
RHID_ReportDescriptor CUSTOM_HID_ReportDesc_FS usbd_custom_hid_if.c

Ilaa iyo hada waxaan la shaqeyn doonaa oo kaliya Dembiilaha ST HID, anagoon sameynin wax dheeri ah, Waxaan kaliya ku guuriyay waxyaabaha ku jira RHID_ReportDescriptor goobta ku habboon mashruuceyda. Kaliya waxaan ku beddelay muruqyadayda bedelka bedelka. Waa in la ogaadaa inaad ubaahantahay inaad si sax ah u xisaabiso tirada baandooyinka ku jira soosaarahan (mashruucan 79) oo aad hubiso in qiimahani uu kujiro Heerarka Darajooyinka. Wax intaa ka badan oo aan ka yarayn. Haddii kale, martigaliyaha ma aqoonsana aaladda ku xiran. La hubiyey 🙂

Marka xigta, u gudub faylka usbd_customhid.h oo baddelo qiimaha CUSTOM_HID_EPIN_SIZE iyo CUSTOM_HID_EPOUT_SIZE illaa 0x40U. Daacad ahaan, wax yar oo xanaaq ah ayaa ah in ST uusan bixinin wax beddel ah oo loogu beddelo qiimaha caadiga ah ee 2 loo beddelo qiime kale, ka dibna koodh-ka isticmaalaya astaamahaas waxaa jira faallo aan ka badnayn 2 balooga. Laakiin, dhinaca kale, waxaa lagu taliyay in tilmaanta ugu horreysa la helo iyo, guud ahaan marka la hadlayo, dejinta qiimahan ayaa u muuqda mid macquul ah. Haddii kale, waa maxay farqiga u dhexeeya CustomHID iyo caadi? Dhibaatadu waxay tahay markii mashruucu ka soo cusboonaado qashin, kaas oo inta badan ku dhaca marxaladda koodhka aasaasiga ah, qiimahan lama keydiyo oo waa in lagu soo celiyaa qalimaan. Si tan loo sameeyo, waxaan daabacay xariijin digniin ah qormadayda ugu weyn, si aanan u iloobin in aan hubiyo buundooyinkaan. Waxaa laga yaabaa inaan qaldamay, mustaqbalkastana wax walbaa way fududaan doonaan. Laakiin qaabeyntaan waxay ku shaqeysaa 🙂

Wareegga isdhaafsiga (qor / akhri)

Si xogta loogu soo gudbiyo martigeliyaha, wax walbana waxay la mid yihiin sharraxaadda Habre. Kaliya magaca shaqadu wuu ka duwan yahay: USBD_CUSTOM_HID_SendReporte (). Dhammaan talooyinka kale ee ka soo baxa qodobkaas waxay ku habboon yihiin barnaamijka oo dhammaystiran.

Laakiin akhrinta ayaa ka xiiso badan halkaan tan Habre. Oo runtii wax yar ka fudud. Ka baaraandegida habka loo helo ayaa ku dhaca usbd_custom_hid_if.c / static int8_t CUSTOM_HID_OutEvent_FS (uint8_t dhacdo_idx, uint8_t state).

Mashruucan tijaabada ah, kumaan dhibin ka baaraandegidda cabirrada soo-galinta iyo raacida dhaqankayga caadiga ah ee yareynta waqtiga hakin-ka-joojinta, waxaan si fudud u nuqul ka helay xogta la soo diyaariyey oo waxaan diyaariyey xogta USB-ka calanka.

Hagaag, run ahaantii “xog aruurin” (riix batoonada joystick) iyo falcelinta xogta laga helay martigeliyaha ee mashruucan mashruuca wuxuu ku qabanayaa gudaha loop aan dhamaad laheyn ee key.c way fududahay 🙂 Mashruucan barnaamijkan ma jiro kala go ‘ ficil celinta SET_FEATURE iyo SET_REPORT, iyadoo tan loo baahan yahay in la sii fahmo mashruuc dhab ah. Waxaan diyaarinaa, maamuleynaa, xiriirineynaa marti-geliyaha waana inay muuqataa CustomHID cusub oo ka socota STMicroelectronics.

Waxaan ku bilaabeynaa USB Marti-geliyaha USB HID martida loo yahay. Gudiga aan ka bilaabay mashruucan ma lahan hay’ad ku shaqeysa Variable Inputs / Outpututs, sidaa darteed, qeybta naqshadeynta Graphic, shaqooyinka u dhigma waa laga saaray, 5 badhamo ayaa ka haray iyo IDs lagu qeexay mashruucan: 1, 2 Warbixinta wax soo saarka (xogta la galiyo ee ST) iyo 4 ee loogu talagalay Warbixinta Wax Soo Saarka (wax soo saarka ST).

Shaqadayda mashruucan waxay ahayd inaan maareeyo labo ka mid ah LED-yada dushiisa, kuwaas oo bilaabay inay shaqeeyaan isla marka barnaamijkan uu ogaado gudiga kuxiran, oo dami “nalalka” ee golahan markaan riixayo badhamada joystick-yada kala duwan ee guddiga, laakiin halkan kama shaqeynin. Nidaamyadan, dhammaan shanta nalalka isku mar ayaa shidan markii aad riixeyso bartamaha joystick-ka. Badhannada haray lama soo bandhigin. Isla mar ahaantaana, haddii aan u wareegno wareejinta Input / Otput, ka dib xogtu aad bay u fileysay. Kuwaas. interface laftiisu wuu shaqeeyaa, laakiin soo bandhigida barnaamijka ku yaal hoyga martida ayaan la kulmin codsiyadayda. Thanks to ST, koodhka isha waxaa lasiiyay, barnaamijiyaha kooxdeena wuxuu ku fadhiyaa qormada xigta, qoraa ay kujirto softiweer kombuyuutar. Guud ahaan, wuxuu duudsiiyay hal shaqo wuxuuna sameeyay barnaamij fulin leh. Wax walba waxay bilaabeen inay u shaqeeyaan sidii aan doonayay. Dabcan, way u suurtoobi lahayd badhan kasta inuu abuuro warbixin adiga kuu gaar ah oo leh tiro gaar ah, oo markii hore la bixiyay. Xaaladdan oo kale, way ku filnaan lahayd in hal balooti loo diro badhan kasta, laakiin mashruuceygu ​​wuxuu bixiyaa warbixin badan oo-bajaaj ah. Isha isha waxqabadka la saxay iyo faylka la sixi karo lagala soo bixi karo cinwaanka hoose.

Taasi waa malaha dhammaantood. Haddii aad leedahay isla guddiga 32L476GDISCOVERY, bilowgayaasha waxaad kaliya kala soo bixi kartaa mashruuceeyaha ‘Providence’, soo-bandhigi ku habboon oo loogu talagalay iyo isha waxqabadka la beddelay adoo adeegsanaya xiriirkan. Muuqaalka USB HID Demonstrator waxaa laga soo degsaday websaydhka ‘STM’, waa la rakibay, fulintiisuna waxaa lagu beddelay miino. Keenso mashruuceeda STM32IDE, soo uruur oo waa inaad heshaa saldhig shaqo oo mashaariicdaada ah. Haddii aad leedahay guddi ka duwan, ka dib la qabatinka “aruurinta macluumaadka” iyo ku darista LED-yada guddigaaga.

Wixii shaqo dheeri ah, hubi inaad aqriso maqaalka gaarka ah ee RaJa ee ka soo baxa Habr. Waxay ku siin doontaa fahanka waxa iyo sida loogu sameeyo mashaariicda kale ee leh muuqaal USB HID interface ah. Si ka sii wanaagsan, ku bilow ka bilow 🙂

Iyo markaad dooranayso dabaq qalab aasaaska mashruucaaga, waxyaabaha soo socda waa in la qaddariyo: muddada codbixinta ee ugu yar aaladda HID waa 1m. Oo haddii aan si sax ah u xasuusto, waa halkii aan jeclaan lahaa nidaamka ka imanaya aaladda dibedda. Qalabka HID-ga caadiga ah, kaliya laba baloog ayaa loo kala qaadaa qaab kasta (sida qiimaha sarrifka aan ka badnayn 2 kB / s.
Xawaaraha buuxa (12 Mbps) mugga xogta ee warbixinta (warbixinta) – wax aan ka badnayn 64 bates, sida qiyaasta sarrifkaaga HID-ga kama badna 64 kb / s. Xawaare sare (480 Mbps) – mugga xogta ugu badan waa 512 bytes (512 kb / s). Ha haysan xayiraado iswaafajin leh barnaamijkii hore ee ay adeegsan jirtay shirkada, waxaan adeegsaday ugu yaraan CDC.

Waxay igu qaadatay sedex maalmood inaan barto maqaallada oo aan la jaan qaado liistada Wish. Qeexitaanku muddo dheer ayuu qaatay 🙂 Waxaan rajeynayaa in kuwa isticmaala maqaalkan ay yeelan doonaan hanaan la mid ah wax aan ka badnayn hal maalin. Faallo, weydii. In aan kari karo – waan ka jawaabi doonaa. Ma awoodo inaan xal wada helo.