Микроконтроллерлер сіздің хоббиіңіз болса, деректер парағын қалай және неге оқуға болады

Микроконтроллерлер сіздің хоббиіңіз болса, деректер парағын қалай және неге оқуға болады

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

Мысалы, деректер кестелері. Оларда бәрі бар, соны алып, пайдаланатын сияқты. Бірақ олардың авторлары микроконтроллерлерді танымал ету міндетін қойған жоқ; Кейде көрінедіқарапайым нәрселерді сипаттағанда түсініксіз терминдер мен аббревиатураларды әдейі теріс пайдаланып, білмейтіндерді мүмкіндігінше шатастыруы. Бірақ бәрі соншалықты жаман емес, егер қаласаңыз, қорап ашылады.

Бұл мақалада мен гуманитарлық маманның хобби мақсатында деректер кестелерімен байланысу тәжірибесімен бөлісемін. Мәтін Arduino шалбарынан өскен әуесқойларға арналған, ол микроконтроллерлердің жұмыс істеу принциптерін түсінуді болжайды.

Мен дәстүрліден бастайын

Arduino-да жарық диодты жыпылықтау

Және бірден код:

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

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

«Бұл не? – Талғампаз оқырман сұрайды. – Неліктен PINB енгізу регистріне бірдеңе жазып жатырсыз? Бұл тек оқуға арналған!» Шынымен, Arduino құжаттамасы, Интернеттегі көптеген білім беру мақалалары сияқты, бұл тізілім тек оқуға арналған. Мен оны қайта оқығанға дейін солай ойладым datashit осы мақаланы дайындауда Atmega328p. Және онда:

Микроконтроллерлер сіздің хоббиіңіз болса, деректер парағын қалай және неге оқуға болады

Бұл салыстырмалы түрде жаңа функционалдылық, ол Atmega8-де болмаған, бұл туралы бәрі біле бермейді немесе кері үйлесімділік себептері бойынша айтылмайды. Бірақ бұл чиптің барлық мүмкіндіктерін, соның ішінде аз белгілі мүмкіндіктерін пайдалану үшін деректер парақтарын оқуға тұрарлық деген идеяны көрсету үшін өте қолайлы. Және бұл жалғыз себеп емес.

Неліктен деректер парақтарын тағы оқу керек?

Әдетте, Arduino инженерлері жарықдиодты шамдармен және AnalogWrites-пен жеткілікті түрде ойнап, барлық модульдер мен чиптерді тақтаға қосуды бастайды, олар үшін қазірдің өзінде жазылған кітапханалар бар. Ерте ме, кеш пе, қажетінше жұмыс істемейтін кітапхана пайда болады. Содан кейін әуесқой оны жөндеу үшін таңдай бастайды, содан кейін ...

Ол жерде мүлдем түсініксіз нәрсе болады, сондықтан сізге Google-ге кіріп, көптеген оқулықтарды оқып, біреудің сәйкес кодының бөліктерін шығарып алып, ақырында мақсатыңызға жету керек. Бұл жетістікке жетудің күшті сезімін береді, бірақ іс жүзінде бұл процесс мотоциклді кері өңдеу арқылы дөңгелекті қайта ойлап табу сияқты. Оның үстіне, бұл велосипедтің қалай жұмыс істейтінін түсіну өспейді. Білемін, өйткені мен мұны ұзақ уақыт бойы өзім жасадым.

Егер осы қызықты әрекеттің орнына мен Atmega328 құжаттамасын зерттеуге бірнеше күн жұмсасам, мен көп уақытты үнемдеген болар едім. Өйткені, бұл өте қарапайым микроконтроллер.

Осылайша, микроконтроллердің жалпы қалай жұмыс істейтінін және оның не істей алатынын елестету үшін, кем дегенде, деректер парағын оқу керек. Және одан әрі:

  • басқа адамдардың кітапханаларын тексеру және оңтайландыру. Оларды көбінесе дөңгелекті қайта ойлап тапқан әуесқойлар жазады; немесе, керісінше, авторлар оларды әдейі шектен тыс ақымақ етеді. Ол үш есе үлкен және баяу болсын, бірақ ол міндетті түрде жұмыс істейді;

  • ешкім кітапхана жазбаған жобада чиптерді пайдалана білу;

  • бір МК сызығынан екіншісіне көшуді өзіңізге жеңілдету;

  • Ардуиноға сәйкес келмейтін ескі кодты оңтайландыру үшін;

  • кез келген чипті оның регистрлері арқылы, егер бар болса, оның кітапханаларының құрылымын зерттеумен айналыспай-ақ басқаруды үйрену.

Неліктен HAL және LL бар болса, регистрлерге тікелей жазу керек?

Глоссарий
HAL, жоғары абстракциялық қабат – абстракцияның жоғары деңгейі бар микроконтроллерді басқаруға арналған кітапхана. SPI1 интерфейсін пайдалану қажет болса, сіз қандай регистрлердің не үшін жауапты екенін ойламай-ақ SPI1-ді конфигурациялап, қосасыз.
LL, төмен деңгейлі API – макростарды немесе регистрлік мекенжайлары бар құрылымдарды қамтитын кітапхана, оларға аты бойынша қол жеткізуге мүмкіндік береді. Atmega жүйесіндегі DDRx, PORTx, PINx - LL.

«HAL, LL немесе регистрлер» тақырыбы бойынша даулар Хабредегі түсініктемелерде жиі кездеседі. Астралдық білімге қол жеткізуді талап етпей, мен өзімнің әуесқойлық тәжірибеммен және ойлармен бөлісемін.

Atmega-ны азды-көпті түсініп, STM32 кереметтігі туралы мақалаларды оқып, мен жарты ондаған түрлі тақталарды сатып алдым - Discovery және Blue Pills, тіпті өзімнің үй өнімдеріме арналған чиптер. Олардың барлығы екі жыл бойы бір жәшікке шаң жинады. Кейде мен өзіме: «Міне, осы демалыс күндерінен бастап мен STM-ді меңгеріп жатырмын», - деп CubeMX іске қосты, SPI үшін орнатуды жасады, алынған мәтіннің қабырғасына қарап, STM авторлық құқықтарымен жомарт дәмделеді және бұл да солай деп шештім. көп.

Микроконтроллерлер сіздің хоббиіңіз болса, деректер парағын қалай және неге оқуға болады

Әрине, мұнда CubeMX не жазғанын анықтауға болады. Бірақ сонымен бірге барлық сөздерді есте сақтау, содан кейін оларды қолмен жазу шындыққа жанаспайтыны анық. Мұны түзету үшін, егер мен текшедегі құсбелгіні байқауды ұмытып қалсам, бұл өте жақсы.

Арада екі жыл өтті, әлі ернімді жалап жүрмін ST MCU Finder дәмді барлық түрлері үшін, бірақ менің түсінігімнен тыс, чипсы, және кездейсоқ кездесті тамаша мақала, STM8 туралы болса да. ЖӘНЕ кенеттен Мен осы уақыт бойы ашық есікті қағып жүргенімді түсіндім: СТМ регистрлері кез келген басқа МК регистрлері сияқты орналастырылған, ал куб олармен жұмыс істеудің қажеті жоқ. Мүмкін болды ма?..

HAL және әсіресе STM32CubeMX - STM32 чиптерімен тығыз жұмыс істейтін кәсіби инженерлерге арналған құрал. Негізгі ерекшелігі - абстракцияның жоғары деңгейі, STM32 желісінде қала отырып, бір MCU-дан екіншісіне және тіпті бір ядродан екіншісіне жылдам көшу мүмкіндігі. Әуесқойлар мұндай проблемаларға сирек кездеседі - біздің микроконтроллерлерді таңдау, әдетте, AliExpress ассортиментімен шектеледі, және біз көбінесе түбегейлі әртүрлі чиптер арасында ауысамыз - біз Atmega-дан STM-ге, STM-ден ESP-ке немесе қытайлық достарымыздың кез келген жаңалығына көшеміз. бізге лақтыр. HAL бұл жерде көмектеспейді, ал оны оқу көп уақытты жейді.

LL қалады - бірақ одан регистрлерге дейін жарты қадам бар. Өз басым макростарымды тіркеу мекенжайларымен жазуды пайдалы деп санаймын: мен деректер кестесін мұқият зерттеймін, болашақта не қажет болады және нені қажет етпейтінін ойлаймын, бағдарламаларымды жақсырақ құрастырамын және жалпы алғанда, еңсеру есте сақтауға көмектеседі.

Сонымен қатар, танымал STM32F103-мен бір нюанс бар - ол үшін екі үйлесімсіз LL нұсқасы бар, бір ресми STM, екіншісі Leaf Labs-тен, STM32duino жобасында қолданылады. Егер сіз ашық бастапқы кітапхананы жазсаңыз (және менде дәл болды мұндай тапсырма), екі нұсқаны жасау керек немесе регистрлерге тікелей қол жеткізу керек.

Ақырында, LL жою, менің ойымша, көші-қонды жеңілдетеді, әсіресе егер сіз оны жобаның басынан бастап жоспарласаңыз. Үлкейтілген мысал: Atmel Studio бағдарламасында LL-сіз Arduino жыпылықтауын жазайық:

#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) бар қытай тақтасындағы жарық диодты жыпылықтауы үшін ондағы екі мекенжайды өзгерту жеткілікті:

#define DDR_B 0x5007
#define OUT_B 0x5005

Иә, мен жарық диодты белгілі бір тақтаға қосу мүмкіндігін қолданамын, ол өте баяу жыпылықтайды, бірақ ол болады!

Деректер парақтарының қандай түрлері бар?

Мақалалар мен форумдарда орыс және ағылшын тілдерінде «мәліметтер парақтары» чиптерге арналған кез келген техникалық құжаттаманы білдіреді, мен бұл мәтінде де солай істеймін. Ресми түрде олар осындай құжаттаманың бір түрі ғана:

Деректер тізімі – Жұмыс сипаттамалары, тактикалық және техникалық сипаттамалары. Кез келген электрондық компонент үшін міндетті. Фондық ақпаратты қолыңызда ұстау пайдалы, бірақ оны мұқият оқып шығудың қажеті жоқ. Дегенмен, қажетсіз құжаттарды жасамау үшін қарапайым чиптер көбінесе деректер парағымен шектеледі; Бұл жағдайда Анықтамалық нұсқаулық мұнда енгізілген.

Анықтамалық нұсқаулық – нұсқаулардың өзі, 1000+ беттен тұратын сау кітап. Чипке тығылған барлық нәрсенің жұмысы егжей-тегжейлі сипатталған. Микроконтроллерді меңгеруге арналған негізгі құжат. Ұнайды деректер тізімі, нұсқаулар МК-ның кең ауқымы үшін жазылған; олар сіздің нақты үлгіңізде жоқ перифериялық құрылғылар туралы көптеген ақпаратты қамтиды.

Бағдарламалау жөніндегі нұсқаулық немесе Нұсқаулар жинағы нұсқаулығы – микроконтроллердің бірегей командаларына арналған нұсқаулар. Assembly тілінде бағдарлама жасайтындарға арналған. Компилятор авторлары оны кодты оңтайландыру үшін белсенді түрде пайдаланады, сондықтан жалпы жағдайда ол бізге қажет болмайды. Бірақ мұнда қарау жалпы түсіну үшін, үзілістен шығу сияқты кейбір нақты пәрмендер үшін, сондай-ақ отладчикті белсенді пайдалану үшін пайдалы.

Қолдану туралы ескерту – жиі код мысалдары бар нақты мәселелерді шешуге арналған пайдалы кеңестер.

Қателер парағы – стандартты емес микросхема әрекетінің жағдайларын, егер бар болса, шешу опцияларымен сипаттау.

Деректер парағында не бар

Тікелей кіріңіз Деректер тізімі бізге келесі бөлімдер қажет болуы мүмкін:

Құрылғының қысқаша мазмұны – деректер парағының бірінші бетінде құрылғы қысқаша сипатталған. Сіз чипті бір жерден тапқан (дүкенде көрген, дәнекерлеген, ескертуге тап болған) және оның не екенін түсінгіңіз келген жағдайларда өте пайдалы.

Жалпы сипаттама – сызықтан чиптердің мүмкіндіктерін толығырақ сипаттау.

Pinouts – барлық ықтимал чип бумалары үшін түйреуіш диаграммалары (қай түйреуіш қай аяқта).

Бекіту сипаттамасы – әрбір түйреуіштің мақсаты мен мүмкіндіктерін сипаттау.

Жад картасы – бізге жадта мекенжай картасы қажет болуы екіталай, бірақ кейде ол регистр блогының мекенжайларының кестесін де қамтиды.

Тіркеу картасы – регистр блоктарының мекенжайлар кестесі, әдетте, деректер парағында және ішінде орналасқан Нұсқаулық – тек ауысым (мекенжай ығысулары).

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

Пакет туралы ақпарат – қол жетімді жағдайлардың сызбалары, тақталарды жобалау кезінде пайдалы.

Анықтамалық нұсқаулық құрылымдық жағынан атауында көрсетілген нақты перифериялық құрылғыларға арналған бөлімдерден тұрады. Әрбір тарауды үш бөлікке бөлуге болады:

қайта қарау, кіріспе, Мүмкіндіктер – перифериялық мүмкіндіктерге шолу;

Функционалды сипаттама, Пайдалану жөніндегі нұсқаулық немесе жай ғана бөлімнің негізгі блогы - перифериялық құрылғының жұмыс істеу принциптерінің толық мәтіндік сипаттамасы және оны пайдалану жолы;

Тіркеушілер – бақылау регистрлерінің сипаттамасы. GPIO немесе SPI сияқты қарапайым жағдайларда бұл перифериялық құрылғыларды пайдалануды бастау үшін жеткілікті болуы мүмкін, бірақ көбінесе алдыңғы бөліктерді оқуға тура келеді.

Деректер парағын қалай оқуға болады

Деректер парақтары, әдеттен тыс, сізді өзінің көлемімен және түсініксіз сөздердің көптігімен қорқытады. Шын мәнінде, егер сіз бірнеше лайфхактарды білсеңіз, бәрі соншалықты қорқынышты емес.

Орнату жақсы PDF оқу құралы. Деректер парақтары қағаз нұсқауларының керемет дәстүрінде жазылған; оларды басып шығаруға, пластик бетбелгілермен кірістіруге және тігуге тамаша. Олардағы гипермәтін іздік мөлшерде байқалады. Бақытымызға орай, кем дегенде құжаттың құрылымы бетбелгілермен жасалған, сондықтан оңай шарлауы бар қолайлы оқырман өте қажет.

Деректер парағы Stroustrup оқулығы емес, ол бар бәрін оқудың қажеті жоқ. Егер сіз алдыңғы кеңесті пайдалансаңыз, бетбелгілер жолағында қажетті бөлімді табыңыз.

Деректер парақтары, әсіресе Анықтамалық нұсқаулықтар, нақты чиптің емес, мүмкіндіктерін сипаттай алады бүкіл сызық. Бұл ақпараттың жартысы, тіпті үштен екісі сіздің чипке қатысты емес дегенді білдіреді. TIM7 регистрлерін зерттемес бұрын тіркеліңіз Жалпы сипаттама, сізде бар ма?

Білу ағылшын тілі үшін жеткілікті негізгі деңгей. Деректер парақтары орташа ана тілінде сөйлейтіндерге бейтаныс терминдердің жартысын және қарапайым байланыстырушы құрылымдардың жартысын құрайды. Сондай-ақ қытай ағылшын тілінде тамаша қытай деректер парақтары бар, олардың жартысы да терминдер, ал екінші жартысы кездейсоқ сөздер жиынтығы.

Кездессең бейтаныс сөз, оны ағылшынша-орысша сөздік арқылы аударуға тырыспаңыз. Егер сіз шатассаңыз гистерезис, содан кейін аударма «гистерезис» сізді жылытпайды. Қажетті тұжырымдама болатын Google, Stack Overflow, Wikipedia, форумдарды пайдаланыңыз мысалдар арқылы қарапайым сөздермен түсіндіріледі.

Оқығаныңызды түсінудің ең жақсы жолы әрекетті тексеру. Сондықтан, сіз әлі де бірдеңені дұрыс түсінбесеңіз және сиқырлы түтінді көрген болсаңыз, өзіңіз танысып жатқан жөндеу тақтасын қолыңызда ұстаңыз немесе жақсырақ екеуі.

Деректер парағын қолыңызда ұстау жақсы әдет біреудің оқулығын оқу немесе басқа біреудің кітапханасын оқу. Онда сіз өз мәселеңіздің оңтайлы шешімін табуыңыз әбден мүмкін. Және керісінше - егер сіз деректер парағынан тізілімнің қалай жұмыс істейтінін түсіне алмасаңыз, оны google-де іздеңіз: біреу бәрін қарапайым сөздермен сипаттап қойған немесе GitHub-та анық код қалдырған болуы мүмкін.

Глоссарий

Деректер парағына тез үйренуге көмектесетін кейбір пайдалы сөздер мен таңбалар. Соңғы екі күнде есімде қалғаны, толықтырулар мен түзетулер қабылданады.

Электр энергиясы
ДК, Рас – «плюс», тамақ
Қарсы, Vee – «минус», жер
ағымдағы – ағымдағы
Вольтаж - Вольтаж
ток бату үшін – сыртқы жүктеме үшін «жер» ретінде жұмыс істеу
ток көзіне – сыртқы қуат жүктемесі
жоғары раковина/қайнар көз – жүктеуге «шыдамдылығы» жоғары түйреуіш

IO
H, жоғары – Vcc істікшесінде
L, төмен – Vss істікшесінде
Жоғары импеданс, Сәлем-Z, өзгермелі – түйреуіште ештеңе жоқ, «жоғары қарсылық», ол сыртқы әлемге іс жүзінде көрінбейді.
әлсіз көтеру, әлсіз төмен тарту – шамамен 50 кОм-ға баламалы кірістірілген жоғары/төмен тартылатын резистор (мәліметтер парағын қараңыз). Ол, мысалы, кіріс істікшесі ауада салбырап, жалған дабылдарды тудырмау үшін қолданылады. әлсіз - өйткені оны «үзу» оңай.
итеру тарту – пин шығыс режимі, онда ол ауысады биік и төмен – Arduino-дан тұрақты OUTPUT.
ашық дренаж – түйреуіш болуы мүмкін шығыс режимінің белгіленуі төмен, немесе Жоғары кедергі/қалқымалы. Сонымен қатар, бұл әрдайым дерлік «нақты» ашық дренаж емес, қорғаныс диодтары, резисторлар және т.б. бар. Бұл жай ғана жерге/жоқ режиміне арналған белгілеу.
нағыз ашық дренаж - бірақ бұл нағыз ашық дренаж: түйреуіш ашық болса тікелей жерге апарады немесе жабық болса лимбода қалады. Бұл қажет болған жағдайда ол арқылы Vcc-тен жоғары кернеуді өткізуге болатынын білдіреді, бірақ максимум әлі де бөлімдегі деректер парағында көрсетілген. Абсолютті максималды көрсеткіштер/кернеу.

Интерфейстер
сериялы – тізбектей қосылған
шынжырға салу – шығу санын көбейте отырып, тізбекті қосылым арқылы чиптерді тізбекке жинау.
Ауысым – shift, әдетте аздап жылжуды білдіреді. Сәйкесінше, ауысу и жылжыту – мәліметтерді бит бойынша қабылдау және жіберу.
ілгек – биттерді жылжытқанда буферді жабатын ысырма. Тасымалдау аяқталғаннан кейін клапан ашылады және бит жұмыс істей бастайды.
сағат енгізу – биттік тасымалдауды орындаңыз, барлық биттерді дұрыс орындарға жылжытыңыз.
қос буфер, көлеңкелі регистр, алдын ала жүктеу регистрі – регистр жаңа деректерді қабылдай алатын, бірақ оны белгілі бір уақытқа дейін ұстап тұру керек болған кездегі тарих белгілері. Мысалы, PWM дұрыс жұмыс істеуі үшін оның параметрлері (жұмыс циклі, жиілік) ағымдағы цикл аяқталғанша өзгермеуі керек, бірақ жаңа параметрлерді жіберуге болады. Сәйкесінше, қазіргілері сақталады көлеңкелі регистр, ал жаңалары кіреді алдын ала жүктеу регистрі, сәйкес чип регистріне жазылады.

Әр түрлі заттар
алдын ала масштабтаушы – жиілікті алдын ала масштабтаушы
сәл орнату үшін – битті 1-ге орнатыңыз
біраз тазалау/қалпына келтіру үшін – битті 0-ге қалпына келтіру (қалпына келтіру – STM деректер парағы мүмкіндігі)

Ары қарай не

Тұтастай алғанда, мұнда шамдар, SPI, таймерлер, PWM және үзілістер бар деректер кестелері арқылы осы мақала үшін арнайы жасалған STM32 және STM8 бойынша үш жобаның көрсетілімімен практикалық бөлім жоспарланған:

Микроконтроллерлер сіздің хоббиіңіз болса, деректер парағын қалай және неге оқуға болады

Бірақ мәтін көп, сондықтан жобалар екінші бөлікке жіберіледі.

Деректер парағын оқу дағдысы сіздің хоббиіңізге көмектеседі, бірақ форумдар мен чаттардағы басқа әуесқойлармен тікелей байланысты ауыстыру екіталай. Ол үшін ең алдымен ағылшын тілін әлі де жетілдіру керек. Сондықтан оқуды аяқтағандар арнайы сыйлыққа ие болады: Skyeng-те кодты пайдаланып бірінші төлеммен екі тегін сабақ HABR2.

Ақпарат көзі: www.habr.com

пікір қалдыру