Микроконтроллерлор сиздин хоббиңиз болсо, маалымат баракчаларын кантип жана эмне үчүн окуу керек

Микроконтроллерлор сиздин хоббиңиз болсо, маалымат баракчаларын кантип жана эмне үчүн окуу керек

Микроэлектроника сыйкырдуу Arduino аркасында акыркы жылдары мода хобби болуп саналат. Бирок маселе мына ушунда: жетиштүү кызыгуу менен DigitalWrite() тез эле ашып кете аласыз, бирок андан ары эмне кылуу керектиги так эмес. Arduino иштеп чыгуучулары алардын экосистемасына кирүү үчүн тоскоолдуктарды төмөндөтүү үчүн көп күч-аракет жумшашты, бирок анын сыртында дагы эле ышкыбоздор үчүн мүмкүн болбогон катаал схемалардын караңгы токойу бар.

Мисалы, маалымат баракчалары. Аларда баары бар окшойт, алып, колдонгула. Бирок алардын авторлору микроконтроллерлерди популярдуу кылуу милдетин коюшпайт; Кээде ал көрүнөтбилбегендерди мүмкүн болушунча чаташтыруу үчүн жөнөкөй нерселерди сүрөттөөдө түшүнүксүз терминдерди жана аббревиатураларды атайылап кыянаттык менен пайдаланышканын. Бирок баары жаман эмес, кааласа, куту ачылат.

Бул макалада мен хобби максатында маалымат баракчалары менен баарлашкан гуманитардык адистин тажрыйбасы менен бөлүшөм. Текст Arduino шымынан чоңойгон ышкыбоздорго арналган, ал микроконтроллерлердин иштөө принциптерин түшүнүүнү болжолдойт.

Мен салттуу менен баштайм

Arduino'до LED жаркыраган

Жана ошол замат код:

void setup() {
DDRB |= (1<<5);
}

void loop() {
PINB = (1<<5);
for (volatile uint32_t k=0; k<100000; k++);
}

"Бул эмне? – Татаал окурман сурайт. – Эмне үчүн PINB киргизүү реестрине бир нерсе жазып жатасыз? Бул окуу үчүн гана!” Чынында, Arduino документтери, Интернеттеги көпчүлүк билим берүүчү макалалардай эле, бул реестр окуу үчүн гана деп айтылат. Мен аны кайра окуганга чейин өзүм да ошондой ойлогом маалымат жадыбалы Бул макаланы даярдоо Atmega328p үчүн. Ал жерде:

Микроконтроллерлор сиздин хоббиңиз болсо, маалымат баракчаларын кантип жана эмне үчүн окуу керек

Бул салыштырмалуу жаңы функция, ал Atmega8де болгон эмес, бул тууралуу баары эле биле бербейт же артка шайкештиктин себептери боюнча айтылбайт. Бирок ал чиптин бардык мүмкүнчүлүктөрүн, анын ичинде анча белгилүү болгон мүмкүнчүлүктөрүн колдонуу үчүн маалымат баракчалары окууга татыктуу деген идеяны көрсөтүү үчүн абдан ылайыктуу. Бул жалгыз себеп эмес.

Эмне үчүн дагы маалымат баракчаларын окуйсуз?

Адатта, Arduino инженерлери LED жана AnalogWrites менен жетиштүү ойноп, ар кандай модулдарды жана чиптерди тактага туташтыра башташат, алар үчүн мурунтан эле жазылган китепканалар бар. Эртеби-кечпи, китепкана пайда болот, ал керектүүдөй иштебейт. Анан ышкыбоз аны оңдоп-түзөөгө киришет, анан...

Жана ал жерде таптакыр түшүнүксүз нерсе болот, андыктан Google'га барып, көптөгөн окуу куралдарын окуп, кимдир бирөөнүн ылайыктуу кодунун бөлүктөрүн чыгарып, акырында өз максатына жетүү керек. Бул ийгиликтин күчтүү сезимин берет, бирок иш жүзүндө бул процесс мотоциклди тескери инженериялоо аркылуу дөңгөлөктү кайра ойлоп табууга окшош. Анын үстүнө, бул велосипед кантип иштээрин түшүнүү көбөйбөйт. Мен билем, анткени мен муну өзүм көптөн бери жасадым.

Эгерде бул кызыктуу иштин ордуна мен Atmega328 документтерин изилдөөгө бир нече күн өткөрсөм, анда мен көп убакытты үнөмдөп калмакмын. Анткени, бул абдан жөнөкөй микроконтроллер.

Ошентип, микроконтроллердин жалпысынан кандайча иштээрин жана ал эмне кыла аларын элестетүү үчүн жок дегенде маалымат баракчаларын окуу керек. Жана андан ары:

  • башка адамдардын китепканаларын текшерүү жана оптималдаштыруу. Алар көбүнчө дөңгөлөктү кайра ойлоп тапкан ышкыбоздор тарабынан жазылат; же тескерисинче, авторлор аларды атайылап ашыкча акылсыз кылып коюшат. Үч эсе чоңураак жана жайыраак болсун, бирок ал сөзсүз түрдө иштейт;

  • библиотека библиотеказын номчуп алгаш проектте чиптерни тып билири;

  • бир МК линиясынан экинчисине өтүүнү жеңилдетүү;

  • акыры Arduino'го туура келбеген эски кодуңузду оптималдаштыруу үчүн;

  • кандайдыр бир чипти анын регистрлери аркылуу түздөн-түз башкарууну үйрөнүү, эгерде бар болсо, анын китепканаларынын структурасын изилдөө менен убара болбостон.

Эмне үчүн HAL жана LL болгондо түз регистрлерге жазуу керек?

сөздүк
HAL, Абстракциялуу катмар – абстракциянын жогорку деңгээли бар микроконтроллерди башкаруу үчүн китепкана. Эгер сиз SPI1 интерфейсин колдонушуңуз керек болсо, сиз SPI1ди жөн гана конфигурациялайсыз жана иштетесиз, кайсы регистрлер эмне үчүн жооптуу экенин ойлонбостон.
LL, төмөнкү деңгээл API – регистр даректери бар макросторду же түзүмдөрдү камтыган китепкана, аларга аты боюнча кирүүгө мүмкүндүк берет. Atmega боюнча DDRx, PORTx, PINx LL болуп саналат.

"HAL, LL же регистрлер" темасы боюнча талаш-тартыштар дайыма Habré боюнча комментарийлерде пайда болот. Астралдык билимге жетүүнү талап кылбастан, мен жөн гана үйрөнчүк тажрыйбам жана ойлорумду бөлүшөм.

Атмеганы аздыр-көптүр түшүнүп, STM32нин кереметтүүлүгү жөнүндө макалаларды окуп чыгып, мен жарым ондогон ар кандай такталарды - Discovery жана Blue Pills, ал тургай өзүмдүн үй буюмдарым үчүн чиптерди сатып алдым. Баары эки жыл бою чаңды бир кутуга чогултушту. Кээде мен өзүмө: "Мына, ушул дем алыштан баштап мен STMди өздөштүрүп жатам" деп айттым, CubeMX ишке киргизди, SPI үчүн жөндөө түздү, натыйжада тексттин дубалын карап, STM автордук укуктары менен кең пейилдикке ээ болду жана бул да кандайдыр бир жол менен деп чечтим. көп.

Микроконтроллерлор сиздин хоббиңиз болсо, маалымат баракчаларын кантип жана эмне үчүн окуу керек

Албетте, сиз CubeMX бул жерде эмне жазганын биле аласыз. Бирок ошол эле учурда бардык сөздөрдү эстеп, анан аларды кол менен жазуу реалдуу эмес экени көрүнүп турат. Муну оңдоо үчүн, эгер мен кокусунан Cubeдогу кутучаны белгилөөнү унутуп калсам, анда бул жакшы.

Арадан эки жыл өттү, мен дагы эле эриндеримди жалайм ST MCU Finder ар кандай даамдуу, бирок менин түшүнүгүмдөн тышкары, чипсы жана кокусунан туш келди сонун макала, STM8 жөнүндө болсо да. ЖАНА күтүлбөгөн жерден Мен ушул убакыттын ичинде ачык эшикти каккылап жүргөнүмдү түшүндүм: STM реестрлери башка МКлардын регистрлери сыяктуу жайгаштырылган жана алар менен иштөө үчүн Cube зарыл эмес. Мүмкүн болгонбу?..

HAL жана өзгөчө STM32CubeMX бул STM32 чиптери менен тыгыз иштеген кесипкөй инженерлер үчүн курал. Негизги өзгөчөлүгү абстракциянын жогорку деңгээли, STM32 линиясында калуу менен бир MCUдан экинчисине, ал тургай бир өзөктөн экинчисине тез өтүү мүмкүнчүлүгү. Хоббиисттер мындай көйгөйлөргө сейрек кездешет - биздин микроконтроллерлерди тандоо, эреже катары, AliExpress ассортименти менен гана чектелет, жана биз көбүнчө түп-тамырынан бери ар кандай микросхемалардын ортосунда көчүп кетебиз - биз Atmegaдан STMге, STMден ESPге же кытайлык досторубузга кандай жаңы нерсе болбосун. бизге ыргыт. Бул жерде HAL жардам бербейт, аны изилдөө көп убакытты жейт.

LL бойдон калууда - бирок андан регистрлерге чейин жарым кадам бар. Жеке мен өзүмдүн макростарымды регистр даректери менен жазууну пайдалуу деп эсептейм: мен маалымат баракчасын кылдаттык менен изилдейм, келечекте мага эмне керек жана эмнеге такыр керек эместиги жөнүндө ойлоном, программаларымды жакшыраак түзөм жана жалпысынан жеңүү эстеп калууга жардам берет. .

Мындан тышкары, популярдуу STM32F103 менен бир нюанс бар - ал үчүн эки шайкеш келбеген LL версиясы бар, бир расмий STM, экинчиси Leaf Labs, STM32duino долбоорунда колдонулган. Эгер сиз ачык булактуу китепкана жазсаңыз (жана менде так болгон мындай милдет), сиз же эки версияны жасашыңыз керек, же регистрлерге түздөн-түз кирүүңүз керек.

Акыр-аягы, LL жоюу, менин оюмча, миграцияны жеңилдетет, өзгөчө, эгерде сиз аны долбоордун башынан эле пландаштырсаңыз. Ашыкча мисал: келгиле, Atmel Studio'до LL жок Arduino blink деп жазалы:

#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++);
    } 
}

Бул код STM8 (ST Visual Desktop) менен кытай тактасындагы LEDди өчүрүү үчүн андагы эки даректи өзгөртүү жетиштүү:

#define DDR_B 0x5007
#define OUT_B 0x5005

Ооба, мен LEDди белгилүү бир тактага туташтыруу функциясын колдоном, ал өтө жай бүлбүлдөтөт, бирок бул болот!

Маалымат баракчаларынын кандай түрлөрү бар?

Макалаларда жана форумдарда орус жана англис тилдеринде "маалымат баракчалары" чиптер үчүн кандайдыр бир техникалык документтерди билдирет жана мен бул текстте да ушундай кылам. Расмий түрдө, алар мындай документтердин бир түрү болуп саналат:

Маалымат жадыбалы – аткаруу мүнөздөмөлөрү, тактикалык жана техникалык мүнөздөмөлөрү. Ар кандай электрондук компонент үчүн милдеттүү. Фондук маалымат колуңузда болушу үчүн пайдалуу, бирок аны терең ойлонуу менен окууга болбойт. Бирок, керексиз документтерди чыгарбоо үчүн жөнөкөй чиптер көбүнчө маалымат баракчасы менен чектелет; бул учурда Шилтеме боюнча колдонмо бул жерде камтылган.

Шилтеме боюнча колдонмо – нускамалардын өздөрү, 1000+ барактан турган пайдалуу китеп. Чиптин ичине тыгылган бардык нерсенин иши деталдуу баяндалган. Микроконтроллерди өздөштүрүү үчүн негизги документ. Окшобой маалымат жадыбалы, нускамалар МКлардын кеңири диапазону үчүн жазылган; алар сиздин конкреттүү моделиңизде жок перифериялык түзүлүштөр жөнүндө көп маалыматты камтыйт.

Программалоо боюнча колдонмо же Instruction Set Manual – уникалдуу микроконтроллердин буйруктары үчүн нускамалар. Assembly тилинде программалагандар үчүн иштелип чыккан. Компилятордун авторлору аны кодду оптималдаштыруу үчүн жигердүү колдонушат, андыктан жалпы учурда бизге анын кереги жок болот. Бирок бул жерде карап көрүү жалпы түшүнүк үчүн, үзгүлтүктөн чыгуу сыяктуу кээ бир конкреттүү буйруктар үчүн, ошондой эле мүчүлүштүктөрдү оңдоочуну активдүү колдонуу үчүн пайдалуу.

Колдонмо жөнүндө эскертүү – конкреттүү маселелерди чечүү үчүн пайдалуу кеңештер, көбүнчө код мисалдары менен.

Errata Sheet – стандарттуу эмес чиптин жүрүм-турумунун учурларын чечүү жолдору, эгерде бар болсо, сыпаттоо.

Маалымат баракчаларында эмне бар

Түздөн-түз Маалымат жадыбалы бизге төмөнкү бөлүмдөр керек болушу мүмкүн:

Түзмөктүн корутундусу – маалымат баракчасынын биринчи бетинде аппаратты кыскача сүрөттөйт. Сиз бир жерден чипти тапкан (дүкөндөн көрүп, ширеткен, сөзгө туш болгон) жана анын эмне экенин түшүнгүңүз келген учурларда абдан пайдалуу.

Жалпы маалымат – линиядан чиптердин мүмкүнчүлүктөрүнүн кеңири сүрөттөлүшү.

Pinouts – бардык мүмкүн болгон чип пакеттери үчүн пинут диаграммалары (кайсы пин кайсы бутта турат).

Пин сүрөттөлүшү – ар бир төөнөгүчтүн максатын жана мүмкүнчүлүктөрүн баяндоо.

Эстутум картасы – бизге эстутумда дарек картасы керек болушу күмөн, бирок кээде ал регистр блок даректеринин таблицасын да камтыйт.

Каттоо картасы – реестр блокторунун даректеринин таблицасы, эреже катары, маалымат баракчасында жана ичинде жайгашкан Ref Manual – бир гана жылдыруу (даректерди алмаштыруу).

Электр мүнөздөмөсү – бул бөлүмдө биз биринчи кезекте кызыкдарбыз абсолюттук максималдуу рейтингдер, бир чипке максималдуу жүктөмдөрдүн тизмеси. бузулбас Atmega328p айырмаланып, көпчүлүк МК олуттуу жүктөрдү төөнөгүчкө туташтырууга жол бербейт, бул Ардуинисттер үчүн жагымсыз сюрприз болуп калат.

Пакет жөнүндө маалымат – колдо болгон учурлардын чиймелери, такталарды долбоорлоодо пайдалуу.

Шилтеме боюнча колдонмо структуралык жактан алардын аталышында көрсөтүлгөн белгилүү перифериялык түзүлүштөргө арналган бөлүмдөрдөн турат. Ар бир бөлүмдү үч бөлүккө бөлүүгө болот:

жалпы көрүнүш, тааныштыруу, Өзгөчөлүктөрү – перифериялык мүмкүнчүлүктөрдү карап чыгуу;

Белек Description, Колдонуу колдонмо же жөн эле бөлүмдүн негизги блогу - перифериялык түзүлүштүн принциптерин жана аны колдонуунун толук тексттик сыпаттамасы;

Реестрлер – контролдук регистрлердин сыпаттамасы. GPIO же SPI сыяктуу жөнөкөй учурларда, бул перифериялык түзүлүштөрдү колдонуу үчүн жетиштүү болушу мүмкүн, бирок көбүнчө мурунку бөлүктөрдү окууга туура келет.

Маалымат баракчаларын кантип окуу керек

Маалымат баракчалары, адаттан тыш, алардын көлөмү жана түшүнүксүз сөздөрдүн көптүгү менен сизди коркутат. Чынында, эгер сиз бир нече лайфхактарды билсеңиз, баары анча деле коркунучтуу эмес.

орнотуу жакшы PDF окурман. Маалымат баракчалары кагаз нускамаларынын даңктуу салтында жазылган; аларды басып чыгаруу, пластик кыстармалар менен кыстаруу жана тигүү үчүн сонун. Алардагы гипертекст изи өлчөмдө байкалат. Бактыга жараша, жок эле дегенде, документтин түзүмү кыстармалар менен иштелип чыккан, ошондуктан жеңил багыттоо менен ылайыктуу окурман абдан зарыл.

Маалымат баракчасы Stroustrup окуу китеби эмес; ал камтыйт баарын окуунун кереги жок. Эгерде сиз мурунку кеңешти колдонсоңуз, жөн гана кыстармалар тилкесинде керектүү бөлүмдү табыңыз.

Маалымат баракчалары, өзгөчө Маалымдама колдонмолору, белгилүү бир чип эмес, мүмкүнчүлүктөрүн сүрөттөй алат, бирок бүт линия. Бул маалыматтын жарымы, атүгүл үчтөн экиси сиздин чипиңизге тиешеси жок дегенди билдирет. TIM7 регистрлерин изилдөөдөн мурун, текшериңиз Жалпы маалымат, сенде барбы?

билүү Кыргызча үчүн жетиштүү Негизги деңгээл. Маалымат таблицалары кадимки эне тилинде сүйлөгөндөр үчүн бейтааныш терминдердин жарымынан жана жөнөкөй байланыш түзүмдөрүнүн жарымынан турат. Ошондой эле кытай англис тилиндеги эң сонун кытай маалымат баракчалары бар, алардын жарымы да терминдер, ал эми экинчи жарымы кокус сөздөрдүн жыйындысы.

Эгер жолуксаңыз бейтааныш сөз, аны англисче-орусча сөздүк менен которууга аракет кылбаңыз. Эгер сиз баш аламан болсоңуз гистерезис, анда котормо "гистерезис" сизди жылуу кылбайт. Керектүү концепция боло турган Google, Stack Overflow, Wikipedia, форумдарды колдонуңуз мисалдар менен жөнөкөй сөздөр менен түшүндүрүлөт.

Окуганыңызды түшүнүүнүн эң жакшы жолу аракетте текшерүү. Ошондуктан, сиз дагы эле бир нерсени туура эмес түшүнүп, сыйкырдуу түтүндү көргөн болсоңуз, анда сиз таанышып жаткан мүчүлүштүктөрдү аныктоо тактасын же андан да жакшысы экөөнү кармаңыз.

Качан болсоңуз, маалымат баракчаңызды колуңузда кармап туруу жакшы адат бирөөнүн окуу куралын окуу же башка бирөөнүн китепканасын изилдөө. Сиз андан өзүңүздүн көйгөйүңүздүн оптималдуу жолун таба аласыз. Жана тескерисинче - эгер сиз маалымат баракчасынан реестр чындыгында кантип иштээрин түшүнө албасаңыз, анда аны google'ден издеңиз: кыязы, кимдир бирөө бардыгын жөнөкөй сөздөр менен сүрөттөп койгон же GitHub'да так код калтырган.

сөздүк

Кээ бир пайдалуу сөздөр жана белгилер маалымат баракчаларына тез көнүүгө жардам берет. Акыркы эки күндө эмнени эстедим, толуктоолорду жана оңдоолорду кабыл алыңыз.

электричество
VCC, Ырас - "плюс", тамак-аш
Vss, Vee – “минус”, жер
учурдагы – учурдагы
Чыңалуу - Чыңалуу
ток батуу – тышкы жүк үчүн «жер» катары иштөө
ток булагы – кубаттуу тышкы жүк
жогорку раковина/булак пин – жүктөөгө “толеранттуулук” жогорулатылган пин

IO
H, Жогорку – Vcc пининде
L, төмөн – Vss пин боюнча
Жогорку импеданс, Hi-Z, калкып – төөнөгүчтө эч нерсе жок, “жогорку каршылык”, ал сырткы дүйнөгө дээрлик көрүнбөйт.
алсыз көтөрүү, алсыз түшүрүү – болжол менен 50 кОмго барабар (маалымат баракчасын караңыз). Ал, мисалы, кирүүчү төөнөгүчтүн абада илинип калышына жол бербөө үчүн, жалган позитивдерди пайда кылуу үчүн колдонулат. начар - анткени аны «үзгүлтүккө учуратуу» оңой.
түртүү тартуу – пин чыгаруу режими, анда ал которулат бийик и төмөн – Arduinoдон үзгүлтүксүз OUTPUT.
ачык дренаж – пин да боло турган чыгаруу режимин белгилөө төмөнже Жогорку импеданс/сүзүүчү. Анын үстүнө, дээрлик ар дайым бул "чыныгы" ачык дренаж эмес, коргоочу диоддор, резисторлор жана башкалар бар. Бул жөн гана жер/жок режими үчүн белги.
чыныгы ачык дренаж - бирок бул чыныгы ачык дренаж: төөнөгүч ачык болсо түз жерге алып барат, ал эми жабык болсо лимбодо калат. Бул, эгерде зарыл болсо, Vccден чоңураак чыңалуудан өтсө болот, бирок максималдуу көрсөткүч дагы эле бөлүмдөгү маалымат баракчасында көрсөтүлгөн. Абсолюттук максималдуу рейтингдер/чыңалуу.

кошки
катар – катар менен туташтырылган
чынжырга салуу – сериялык туташуунун жардамы менен чиптерди чынжырга чогултуу, чыгаруулардын санын көбөйтүү.
өзгөрүү – shift, адатта, бир аз жылышты билдирет. Тиешелүүлүгүнө жараша, өтүү и көчүрүү – бит маалыматтарды кабыл алуу жана берүү.
эшиктин тээги – буферди жаап турган, ал аркылуу биттер жылдырылып жатканда. Өткөрүп берүү аяктаганда клапан ачылып, биттер иштей баштайт.
саат киргизүү – бит-бит которууну аткарыңыз, бардык биттерди керектүү жерлерге жылдырыңыз.
кош буфер, көмүскө регистр, алдын ала жүктөө реестри – тарых белгилөөлөрү, качан реестр жаңы маалыматтарды кабыл алышы керек, бирок аны кандайдыр бир убакытка чейин кармап туруу керек. Мисалы, PWM туура иштеши үчүн, анын параметрлери (кызматтык цикл, жыштык) учурдагы цикл аяктаганга чейин өзгөрбөшү керек, бирок жаңы параметрлерди өткөрүп берүүгө болот. Ошого жараша азыркылары сакталып турат көмүскө регистр, жана жаңылары кирет алдын ала жүктөө реестри, тиешелүү чип регистрине жазылууда.

Ар кандай нерселер
prescaler – жыштык алдын ала шкалалоочу
бир аз коюу – битти 1ге коюу
бир аз тазалоо/кайра коюу – битти 0гө кайтаруу (кайра орнотуу - STM маалымат баракчасынын өзгөчөлүгү)

кийинкиси эмне

Жалпысынан бул жерде практикалык бөлүгү STM32 жана STM8 боюнча үч долбоордун демонстрациясы менен пландаштырылган, бул макала үчүн атайын маалымат баракчаларын колдонуу менен, лампалар, SPI, таймерлер, PWM жана үзгүлтүктөр бар:

Микроконтроллерлор сиздин хоббиңиз болсо, маалымат баракчаларын кантип жана эмне үчүн окуу керек

Бирок текст көп болгондуктан, долбоорлор экинчи бөлүккө жөнөтүлөт.

Маалымат баракчаларын окуу чеберчилиги сизге хоббиңизге жардам берет, бирок форумдарда жана чаттарда кесиптештер менен түз баарлашууну алмаштыруу күмөн. Бул үчүн, сиз дагы эле биринчи кезекте англис тилин жакшыртуу керек. Демек, окууну аяктагандар атайын сыйлыкка ээ болушат: кодду колдонуу менен биринчи төлөм менен Skyeng боюнча эки акысыз сабак HABR2.

Source: www.habr.com

Комментарий кошуу