
Microelectronics mangrupakeun hobi fashionable dina taun panganyarna berkat Arduino magis. Tapi di dieu masalahna: kalawan minat cukup, anjeun bisa gancang outgrow DigitalWrite (), tapi naon nu kudu salajengna teu sagemblengna jelas. Pamekar Arduino geus nempatkeun loba usaha pikeun nurunkeun halangan pikeun asupna kana ékosistem maranéhanana, tapi di luar eta masih aya leuweung poék circuitry kasar nu inaccessible ka amatir.
Contona, lembar data. Sigana mah aranjeunna gaduh sadayana, nyandak sareng nganggo. Tapi pangarang maranéhanana jelas teu nangtukeun sorangan tugas popularizing microcontrollers; Sakapeung sigana mahyén aranjeunna ngahaja nyiksa istilah sareng singketan anu teu kaharti nalika ngajéntrékeun hal-hal saderhana pikeun ngabingungkeun anu teu terang sabisa-bisa. Tapi henteu sadayana parah; upami hoyong, peti mati dibuka.
Dina tulisan ieu kuring bakal ngabagi pangalaman ahli kamanusaan anu komunikasi sareng lembar data pikeun tujuan hobi. Téks dimaksudkeun pikeun amatir anu parantos dewasa tina calana Arduino; éta nganggap sababaraha pamahaman prinsip operasi mikrokontroler.
Kuring gé mimitian ku tradisional
Kedip-kedip hiji LED dina Arduino
Sareng kodeu langsung:
void setup() {
DDRB |= (1<<5);
}
void loop() {
PINB = (1<<5);
for (volatile uint32_t k=0; k<100000; k++);
}"Naon ini? – A maca canggih bakal nanya. – Naha anjeun nulis hiji hal ka PINB input register? Ieu kanggo bacaan wungkul!” Nyaan, , kawas sabagéan ageung tulisan atikan dina Internét, nyatakeun yén register ieu ngan ukur dibaca. Kuring panginten kitu nyalira dugi ka kuring maca deui ka Atmega328p, nyiapkeun artikel ieu. Sareng aya:

Ieu mangrupikeun fungsionalitas anu kawilang énggal, éta henteu aya dina Atmega8, henteu sadayana terang ngeunaan éta atanapi henteu disebatkeun kusabab kasaluyuan mundur. Tapi cukup cocog pikeun nunjukkeun ide yén lembar data kedah dibaca pikeun ngagunakeun sagala kamampuan chip, kalebet anu teu dipikanyaho. Sareng ieu sanés hiji-hijina alesan.
Naha lain maca lembar data?
Biasana, insinyur Arduino, cukup maén kalawan LEDs na AnalogWrites, mimitian nyambungkeun sagala sorts modul jeung chip ka dewan, nu geus aya perpustakaan ditulis. Moal lami deui atanapi engké, perpustakaan némbongan anu teu jalan sakumaha sakuduna. Lajeng amatir mimiti nyokot eta pikeun ngalereskeun eta, lajeng ...
Sareng aya kajadian anu teu kaharti, janten anjeun kedah angkat ka Google, baca seueur tutorial, tarik bagian tina kode anu cocog sareng tungtungna ngahontal tujuan anjeun. Ieu masihan rasa prestasi anu kuat, tapi dina kanyataanana prosésna sapertos reinventing roda ku ngabalikeun rékayasa motor. Leuwih ti éta, pamahaman kumaha sapédah ieu jalan teu nambahan. Kuring terang, sabab kuring ngalakukeun ieu sorangan pikeun waktos anu lami.
Upami tinimbang kagiatan anu pikaresepeun ieu kuring nyéépkeun sababaraha dinten diajar dokuméntasi Atmega328, kuring bakal ngahémat waktos anu ageung. Barina ogé, ieu téh mikrokontroler cukup basajan.
Janten, anjeun kedah maca lembar data sahenteuna pikeun ngabayangkeun kumaha mikrokontroler umumna jalanna sareng naon anu tiasa dilakukeun. Sareng salajengna:
pikeun mariksa sareng ngaoptimalkeun perpustakaan batur. Aranjeunna mindeng ditulis ku amatir sarua anu reinvent kabayang; atawa, sabalikna, pangarang ngahaja nyieun eta kaleuleuwihan foolproof. Hayu deui jadi tilu kali leuwih badag sarta laun, tapi pasti bakal dianggo;
pikeun bisa ngagunakeun chip dina proyék nu teu saurang ogé geus ditulis perpustakaan;
pikeun ngagampangkeun diri pikeun migrasi ti hiji garis MK ka anu sanés;
pikeun tungtungna ngaoptimalkeun kode heubeul Anjeun, nu teu pas kana Arduino;
pikeun neuleuman kumaha carana ngadalikeun sagala chip langsung ngaliwatan registers na, tanpa ganggu ku diajar struktur perpustakaan na, lamun aya.
Naha nulis ka register langsung lamun aya HAL jeung LL?
Kamus
HAL, Lapisan Abstraksi Tinggi - perpustakaan pikeun ngadalikeun mikrokontroler kalayan tingkat abstraksi anu luhur. Lamun perlu make panganteur SPI1, Anjeun saukur ngonpigurasikeun tur ngaktipkeun SPI1 tanpa mikir ngeunaan nu registers jawab naon.
LL, Low Level API - perpustakaan anu ngandung makro atanapi struktur sareng alamat pendaptaran, anu ngamungkinkeun anjeun ngaksés aranjeunna ku nami. DDRx, PORTx, PINx dina Atmega nyaéta LL.
Sengketa dina topik "HAL, LL atanapi registers" rutin lumangsung dina komentar on Habré. Tanpa ngaku aksés kana pangaweruh astral, kuring ngan saukur bakal ngabagi pangalaman sareng pikiran amatir kuring.
Sanggeus leuwih atawa kirang ilahar kaluar Atmega sarta sanggeus maca artikel ngeunaan éndah STM32, Kuring meuli satengah belasan papan béda - Discovery, sarta Pél Blue, komo ngan chip pikeun produk homemade kuring. Éta kabéh dikumpulkeun lebu dina kotak salila dua taun. Sakapeung kuring nyarios ka diri sorangan: "éta, mimitian sabtu minggu ieu kuring ngawasa STM," ngaluncurkeun CubeMX, ngahasilkeun setélan pikeun SPI, ningal témbok téks anu hasilna, dirasakeun kalayan hak cipta STM, sareng mutuskeun yén ieu ogé kumaha waé. loba.

Tangtosna, anjeun tiasa terang naon anu ditulis ku CubeMX di dieu. Tapi dina waktos anu sami, écés yén nginget sadaya kecap teras nyerat ku leungeun henteu réalistis. Sareng pikeun debug ieu, upami kuring ngahaja hilap pariksa kotak dina kubus, éta leres pisan.
Dua taun geus kaliwat, kuring masih ngaletak biwir pikeun sagala sorts ngeunah, tapi saluareun pamahaman kuring, chip, sarta ngahaja datang di sakuliah , sanajan ngeunaan STM8. AND ngadadak Kuring sadar yén salila ieu kuring geus knocking on hiji panto muka: nu registers of STM disusun dina cara nu sarua sakumaha pamadegan MK sejen, sarta kubus teu perlu digawekeun ku aranjeunna. Naha éta mungkin? ..
HAL sareng khususna STM32CubeMX mangrupikeun alat pikeun insinyur profésional anu damel caket sareng chip STM32. Fitur utama nyaéta tingkat abstraksi anu luhur, kamampuan pikeun gancang migrasi ti hiji MCU ka anu sanés bahkan ti hiji inti ka anu sanés, bari tetep aya dina garis STM32. Hobbyists jarang sapatemon masalah sapertos - pilihan microcontrollers urang, sakumaha aturan, diwatesan kana campuran AliExpress, sarta kami mindeng migrasi antara chip béda radikal - urang ngalih ti Atmega ka STM, ti STM ka ESP, atawa naon baé hal anyar babaturan Cina urang. alungkeun ka urang. HAL moal ngabantosan di dieu, sareng diajar éta bakal nyéépkeun waktos.
LL tetep - tapi ti dinya ka register aya satengah hambalan. Pribadi, abdi manggihan nulis macros abdi kalayan alamat register mangpaat: Kuring diajar lembar data leuwih taliti, kuring mikir ngeunaan naon anu bakal kuring butuhkeun dina mangsa nu bakal datang jeung naon pasti moal, Kuring struktur program kuring hadé, sarta sacara umum, overcoming mantuan ngapalkeun. .
Salaku tambahan, aya nuansa sareng STM32F103 anu populér - aya dua versi LL anu teu cocog pikeun éta, hiji resmi ti STM, anu kadua ti Leaf Labs, anu dianggo dina proyék STM32duino. Upami anjeun nyerat perpustakaan open-source (sareng kuring ngagaduhan persis ), anjeun kedah ngadamel dua vérsi, atanapi ngaksés pendaptaran langsung.
Tungtungna, ngaleungitkeun LL, dina pamanggih kuring, nyederhanakeun migrasi, khususna upami anjeun ngarencanakeun éta ti mimiti proyek. Contona exaggerated: hayu urang nulis Arduino Blink di Atmel Studio tanpa LL:
#include <stdint.h>
#define _REG(addr) (*(volatile uint8_t*)(addr))
#define DDR_B 0x24
#define OUT_B 0x25
int main(void)
{
volatile uint32_t k;
_REG(DDR_B) |= (1<<5);
while(1)
{
_REG(OUT_B) |= (1<<5);
for (k=0; k<50000; k++);
_REG(OUT_B) &= ~(1<<5);
for (k=0; k<50000; k++);
}
}Pikeun kode ieu ngacieupan LED dina papan Cina kalawan STM8 (tina ST Visual Desktop), cukup pikeun ngarobah dua alamat di dinya:
#define DDR_B 0x5007
#define OUT_B 0x5005Leres, kuring nganggo fitur anu nyambungkeun LED dina papan khusus, éta bakal kedip-kedip lalaunan, tapi éta bakal kajadian!
Naon jinis lembar data anu aya?
Dina artikel sareng forum, boh Rusia sareng Inggris, "datasheets" hartosna dokuméntasi téknis pikeun chip, sareng kuring ngalakukeun anu sami dina téks ieu. Sacara resmi, aranjeunna ngan ukur salah sahiji jinis dokuméntasi sapertos kieu:
Lembar data - Ciri kinerja, ciri taktis sareng téknis. Wajib pikeun sagala komponén éléktronik. Inpormasi latar anu kapaké pikeun tetep aya, tapi henteu seueur anu dibaca sacara saé. Sanajan kitu, chip basajan mindeng dugi ka datasheet a ku kituna teu ngahasilkeun dokumén perlu; dina hal ieu Manual Rujukan kaasup di dieu.
Manual Rujukan - parentah sorangan, buku sehat 1000+ kaca. Karya sagalana nu crammed kana chip digambarkeun di jéntré. Dokumén utama pikeun ngawasaan mikrokontroler. Beda jeung lembar data, parentah ditulis pikeun rupa-rupa MKs; aranjeunna ngandung loba informasi ngeunaan périferal nu teu sadia dina model husus Anjeun.
Manual Programming atawa Instruksi Set Manual – parentah pikeun paréntah mikrokontroler unik. Dirancang pikeun jalma anu program dina basa Assembly. Pangarang kompiler aktip ngagunakeun éta pikeun ngaoptimalkeun kode, janten dina kasus umum urang henteu peryogi éta. Tapi pilari didieu mangpaat pikeun pamahaman umum, pikeun sababaraha paréntah husus kayaning exiting hiji ngaganggu, kitu ogé pikeun aktip ngagunakeun debugger nu.
Catetan Aplikasi - tips mangpaat pikeun ngarengsekeun masalah husus, sering kalawan conto kode.
Lembar Kasalahan - pedaran kasus kabiasaan chip non-standar kalawan pilihan workaround, lamun aya.
Naon anu aya dina lembar data
Langsung ka Lembar data urang tiasa peryogi bagian-bagian ieu:
Ringkesan Alat – kaca mimiti lembar data sakeudeung ngajelaskeun alat. Mangpaat pisan dina kaayaan mun anjeun kapanggih chip hiji wae (ningali eta di toko a, soldered eta, datang di sakuliah nyebut a) jeung hayang ngarti naon éta.
Deskripsi umum - pedaran leuwih lengkep ngeunaan kamampuhan tina chip ti garis.
Pinouts - diagram pinout pikeun sakabéh bungkusan chip mungkin (pin nu aya dina leg nu).
Pin Pedaran - pedaran ngeunaan tujuan jeung kamampuhan unggal pin.
Peta Mémori - urang saperti teu mirip perlu peta alamat dina mémori, tapi kadang ogé ngawengku tabel alamat block register.
Ngadaptar Peta – tabél alamat blok register, sakumaha aturan, aya dina lembar data, sarta di Ref Manual - ngan shift (alamat offsets).
Ciri listrik - dina bagian ieu kami utamana museurkeun ratings maksimum mutlak, Listing beban maksimum per chip. Teu kawas Atmega328p indestructible, paling MKs teu ngidinan Anjeun pikeun nyambungkeun beban serius kana pin, nu janten kejutan pikaresepeun pikeun Arduinists.
Pakét Inpormasi - gambar kasus anu sayogi, mangpaat nalika ngarancang papan anjeun.
Manual Rujukan Sacara stuktur diwangun ku bagian devoted kana périferal husus dituduhkeun dina judul maranéhanana. Unggal bab bisa dibagi jadi tilu bagian:
gambaran, perkenalan, Fitur - Tinjauan kamampuan periferal;
Katerangan Fungsional, Pituduh Dianggo atanapi ngan saukur blok utama bagian - pedaran téks lengkep ngeunaan prinsip alat periferal sareng cara ngagunakeunana;
Ngadaptarkeun - pedaran registers kontrol. Dina kasus saderhana sapertos GPIO atanapi SPI, ieu tiasa cekap pikeun ngamimitian nganggo périferal, tapi sering anjeun masih kedah maca bagian sateuacana.
Kumaha maca lembar data
Datasheets, kaluar tina kabiasaan, nyingsieunan anjeun ku volume maranéhanana sarta kaayaanana kecap teu kaharti. Kanyataanna, sagalana teu jadi pikasieuneun lamun nyaho sababaraha hacks hirup.
Masang maca PDF alus. Datasheets ditulis dina tradisi glorious instruksi kertas; aranjeunna hébat pikeun nyitak kaluar, nyelapkeun kalawan téténggér plastik sarta ngaput. Hypertext di antarana dititénan dina jumlah renik. Untungna, sahenteuna struktur dokumén dirarancang kalayan téténggér, janten pamaca anu cocog sareng navigasi anu gampang diperyogikeun.
Lembar data sanés buku ajar Stroustrup; éta ngandung teu kedah maca sadayana. Upami anjeun nganggo naséhat sateuacana, panggihan bagian anu dipikahoyong dina bar tetengger.
Datasheets, utamana Manual Rujukan, bisa ngajelaskeun kamampuhan teu chip husus, tapi sakabéh garis. Ieu ngandung harti yén satengah, atawa malah dua per tilu informasi nu teu relevan pikeun chip Anjeun. Sateuacan diajar ngadaptar TIM7, pariksa Deskripsi umum, anjeun gaduh eta?
Nyaho Inggris cukup keur tingkat dasar. Datasheets diwangun ku satengah tina istilah anu teu biasa ku panyatur asli rata-rata, sareng satengah tina struktur panyambung anu sederhana. Aya ogé lembar data Cina anu saé dina basa Inggris Cina, dimana satengahna ogé istilah, sareng satengah kadua mangrupikeun susunan kecap acak.
Lamun papanggih kecap nu teu biasa, ulah coba narjamahkeun ngagunakeun kamus Inggris-Rusia. Mun anjeun bingung histeris, mangka tarjamahan "histeresis" moal ngajadikeun anjeun warmer. Anggo Google, Stack Overflow, Wikipedia, forum, dimana konsép anu diperyogikeun bakal aya .
Cara anu pangsaéna pikeun ngartos naon anu anjeun baca nyaéta pariksa dina aksi. Ku alatan éta, tetep dina leungeun dewan debug nu anjeun familiarizing diri jeung, atawa leuwih hadé dua, bisi anjeun masih salah ngartikeun hal sarta nempo haseup magic.
Kabiasaan anu saé pikeun ngajaga lembar data anjeun nalika anjeun maca tutorial batur atawa diajar perpustakaan batur. Ieu rada mungkin nu bakal manggihan solusi leuwih optimal pikeun masalah anjeun dina eta. Sabalikna - upami anjeun henteu ngartos tina lembar data kumaha register saleresna jalanna, google éta: paling dipikaresep, aya anu parantos ngajelaskeun sadayana dina kecap anu saderhana atanapi ngantepkeun kode anu jelas dina GitHub.
Kamus
Sababaraha kecap sareng simbol anu mangpaat pikeun ngabantosan anjeun gancang biasa kana lembar data. Naon anu kuring émut dina sababaraha dinten terakhir, tambihan sareng koréksi wilujeng sumping.
Listrik
VDC, vdd - "tambah", kadaharan
Vss, vee - "minus", bumi
ayeuna – ayeuna
Voltaseu - Voltaseu
ngalelepkeun arus - dianggo salaku "taneuh" pikeun beban éksternal
pikeun sumber arus - kakuatan beban éksternal
tilelep tinggi / sumber pin - pin kalawan ngaronjat "kasabaran" pikeun ngamuat
IO
H, luhur – dina pin Vcc
L, Lemah - dina pin Vss
Impedansi tinggi, Hai-Z, ngambang - teu aya nanaon dina pin, "résistansi tinggi", éta ampir teu katingali ku dunya luar.
lemah tarik nepi, lemah tarik ka handap – résistor pull-up/pull-down diwangun-di, kira-kira sarua jeung 50 kOhm (tingali datasheet). Hal ieu dipaké, contona, pikeun nyegah pin input tina dangling dina hawa, ngabalukarkeun positip palsu. leuleus - sabab gampang "ngaganggu" anjeunna.
nyorong tarik – modeu kaluaran pin, nu pindah antara luhur и saeutik - OUTPUT biasa tina Arduino.
solokan muka - designation sahiji mode kaluaran nu pin bisa boh saeutikatawa Impedansi tinggi / ngambang. Sumawona, ampir sok ieu sanés "nyata" solokan kabuka; aya dioda pelindung, résistor, sareng anu sanés. Ieu ngan saukur sebutan pikeun mode taneuh / taya.
solokan kabuka leres - tapi ieu téh solokan kabuka nyata: pin ngarah langsung ka taneuh lamun dibuka, atawa tetep dina limbo lamun ditutup. Ieu ngandung harti yén, upami diperlukeun, tegangan leuwih gede ti Vcc bisa ngaliwatan eta, tapi maksimum nu masih dieusian dina lembar data dina bagian. Ratings maksimum mutlak / tegangan.
Selang
dina runtuyan - disambungkeun dina runtuyan
pikeun ranté - ngumpul chip kana ranté ngagunakeun sambungan serial, ngaronjatna jumlah kaluaran.
regu - shift, biasana nunjukkeun saeutik shift. masing-masing, ngalih ka и pikeun mindahkeun kaluar - nampi sareng ngirimkeun data sakedik-sakedik.
kancing - kancing anu nutupan panyangga bari bit digeser ngaliwatan éta. Nalika transperna réngsé, klep dibuka sareng bit mimiti beroperasi.
pikeun jam dina - ngalakukeun mindahkeun bit-demi-bit, mindahkeun sakabéh bit ka tempat katuhu.
panyangga ganda, kalangkang ngadaptar, ngadaptar preload - designations sajarah, nalika register kudu bisa nampa data anyar, tapi tahan nepi ka sababaraha titik. Contona, pikeun PWM jalan leres, parameter na (siklus tugas, frékuénsi) teu kudu robah nepi ka tungtung siklus ayeuna, tapi parameter anyar geus bisa ditransfer. Sasuai, anu ayeuna disimpen di kalangkang ngadaptar, jeung nu anyar digolongkeun kana ngadaptar preload, keur ditulis kana register chip pakait.
Sagala rupa
prescaler - prescaler frékuénsi
pikeun nyetél saeutik - set bit ka 1
pikeun mupus / ngareset saeutik - reset bit ka 0 (ngareset - Fitur lembar data STM)
Naon salajengna
Sacara umum, bagian praktis direncanakeun di dieu kalayan demonstrasi tilu proyék dina STM32 sareng STM8, didamel khusus pikeun tulisan ieu nganggo lembar data, kalayan bohlam lampu, SPI, timer, PWM sareng interrupts:

Tapi aya seueur téks, janten proyék-proyék dikirim ka bagian kadua.
Kaahlian maca lembar data bakal ngabantosan anjeun dina hobi anjeun, tapi sigana moal ngagentos komunikasi langsung sareng sasama hobi dina forum sareng obrolan. Pikeun tujuan ieu, anjeun masih kedah ningkatkeun Inggris anjeun mimitina. Ku alatan éta, jalma anu réngsé maca bakal nampi hadiah khusus: dua pelajaran gratis di Skyeng kalayan pamayaran munggaran nganggo kodeu HABR2.
sumber: www.habr.com
