- Припрема хардвера
- Разумевање ГПИО пиноута на СТМ8С103Ф
- Опис и савети за пиноут за избор СТМ8С103Ф ГПИО
- Програмирање СТМ8С за ГПИО улаз и излаз помоћу СПЛ-а
- Отпремање и тестирање програма
За микроконтролере, програм за трептање ЛЕД еквивалентан је програму „хелло ворлд“. У нашем претходном упутству научили смо како започети са СТМ8С103Ф3 развојном плочом и како подесити ИДЕ и компајлер за програмирање наших СТМ8С контролера. Такође смо научили како се користе стандардне периферне библиотеке и како се компајлира и отпрема код у наш микроконтролер. Са свим основним детаљима, заправо можемо започети писање кода. У овом упутству ћемо научити како се извршавају опште ГПИО функције на СТМ8С контролерима. Плоча већ има уграђену ЛЕД диоду повезану на пин 5 порта Б, научићемо како трептати ову ЛЕД лампицу, а такође ћемо додати спољну ЛЕД диоду и контролисати је притиском на тастер. Ако сте потпуно нови, топло се препоручује да прочитате претходни водич пре него што наставите даље.
Припрема хардвера
Пре него што уђемо у програм, припремите хардверске везе. Као што је раније поменуто, овде ћемо користити две ЛЕД диоде, једна је уграђена ЛЕД која ће непрекидно трептати, а друга је спољна ЛЕД лампица која се укључује дугметом. Идеја је научити сву ГПИО функционалност на једноставан начин. Уграђени Лед је већ повезан са ПБ5 (пин5 ПОРТБ), тако да сам управо спојио ЛЕД на ПА3 и тастер на ПА2, као што можете видети на доњем дијаграму.
Али, од свих излазних пинова доступних на нашем контролисаном, зашто сам изабрао ПА3 за излаз и ПА2 за улаз? Питања су валидна и то ћу објаснити касније у овом чланку. Моја хардверска поставка за овај водич је приказана у наставку. Као што видите, такође сам повезао свој СТ-линк програмер на пинове за програмирање који ће не само програмирати нашу плочу већ ће деловати и као извор напајања.
Разумевање ГПИО пиноута на СТМ8С103Ф
Сада се враћамо на питање, зашто ПА2 за улаз и зашто ПА3 за излаз? Да бисмо то разумели, погледајмо ближе пиноут микроконтролера који је приказан доле.
Према дијаграму пиноута, на нашем микроконтролеру имамо четири порта, и то ПОРТ А, Б, Ц и Д означени са ПА, ПБ, ПЦ и ПД. Свака ГПИО игла је такође спојена са неком другом посебном функционалношћу. На пример, ПБ5 (пин 5 ПОРТА Б) не може радити само као ГПИО пин, већ и као СДА пин за И2Ц комуникацију и као излазни пин Тимер 1. Дакле, ако користимо овај пин у једноставне ГПИО сврхе, попут повезивања ЛЕД диоде, тада нећемо моћи истовремено користити И2Ц и ЛЕД диоду. Нажалост, уграђена ЛЕД диода је повезана на овај пин, тако да овде немамо много избора, а у овом програму нећемо користити И2Ц, тако да то није велики проблем.
Опис и савети за пиноут за избор СТМ8С103Ф ГПИО
Заиста говорећи, не би шкодило употреби ПА1 улазног пина и то би само радио пин. Али намерно сам ово изнео да бих ми пружио прилику да вам покажем неке уобичајене замке у које бисте могли упасти приликом одабира ГПИО пинова на новом микроконтролеру. Најбоље је избећи замке ако прочитате детаље о пиновима и опис пин-а који су наведени у техничком листу СТМ8С103Ф3П6. За опис пин-а микроконтролера СТМ8С103Ф3П6 детаљи који су поменути у техничком листу приказани су испод слика.
Улазни пинови на нашем микроконтролеру могу бити плутајући или слаби на извлачење, а излазни пинови могу бити Опен Драин или Пусх-пулл. Разлика између отворених одвода и излазних пинова са Пусх-Пулл излазом је већ разматрана, па о томе нећемо улазити у детаље. Поједностављено, излазни пин са отвореним одводом може учинити излаз нижим и не тако високим, док излазни пин помоћу пусх-пулл може учинити излаз и високим и високим.
Поред тога из горње табеле, такође можете приметити да излазни пин може бити или Брзи излаз (10 МХз) или Спори излаз (2 МХз). Ово одређује ГПИО брзину, ако желите врло брзо да пребаците ГПИО пинове између високе и ниске, тада можемо одабрати Брзи излаз.
Неки ГПИО пинови на нашем контролеру подржавају Труе Опен Драин (Т) и Хигх Синк Цуррент (ХС), као што је поменуто на горњој слици. Значајна разлика између отвореног одвода и истинског отвореног одвода је у томе што излаз повезан на отворени одвод не може бити повучен више од радног напона микроконтролера (Вдд), док прави излазни пин отвореног одвода може бити повучен већи од Вдд. Игле са високом способношћу судопера значе да могу да потону више струје. Извор и струја судопера било ког ГПИО ХС пина је 20мА, док далековод може потрошити до 100 мА.
Ако пажљиво погледате горњу слику, приметићете да су готово сви ГПИО пинови типа високе струје умиваоника (ХС), осим ПБ4 и ПБ5 који су Труе Опен Драин Типе (Т). То значи да ови пинови не могу бити високи, неће моћи да обезбеде 3.3В чак и када је пин висок. Због тога је уграђени лед повезан на 3.3В и уземљен преко ПБ5, уместо да га напаја директно са ГПИО пина.
Детаљан опис пин-а потражите на страници 28 у техничком листу. Као што је поменуто на горњој слици, ПА1 се аутоматски конфигурише као слабо повлачење и не препоручује се да се користи као излазни пин. У сваком случају може се користити као улазни пин заједно са дугметом, али одлучио сам да користим ПА2 само да бих покушао да омогућим повлачење из програма. Ово је само неколико основних ствари које ће бити корисне када пишемо много сложеније програме. За сада је у реду ако вам се многе ствари одбију од главе, ући ћемо у тај слој у другим водичима.
Програмирање СТМ8С за ГПИО улаз и излаз помоћу СПЛ-а
Створите радни простор и нови пројекат о чему смо говорили у нашем првом упутству. Можете додати све датотеке заглавља и изворне датотеке или додати само датотеке гпио, цонфиг и стм8с. Отворите датотеку маин.ц и започните писање програма.
Обавезно укључите датотеке заглавља као што је приказано на горњој слици. Отворите датотеку маин.ц и покрените код. Комплетни код маин.ц налази се на дну ове странице, а одатле ћете моћи и да преузмете датотеку пројекта. Објашњење кода је следеће, можете се позвати и на кориснички приручник СПЛ-а или видео линк на дну ове странице ако сте збуњени око дела кодирања.
Деиницијализација потребног порта
Наш програм започињемо Деиницијализацијом потребних портова. Као што смо раније разговарали, сваки ГПИО пин имаће многе друге функције повезане с њим, осим што ради само као уобичајени улаз и излаз. Ако су ови клинови претходно коришћени за неке друге апликације, онда би требало да буду деиницијализовани пре него што их користимо. Није обавезно, међутим, добра је пракса. Следећа два реда кода користе се за деиницијализацију порта А и порта Б. Само користите синтаксу ГПИО_ДеИнит (ГПИОк); и помиње име луке уместо к.
ГПИО_ДеИнит (ГПИОА); // припремамо порт А за рад ГПИО_ДеИнит (ГПИОБ); // припремити порт Б за рад
Улазна и излазна ГПИО декларација
Даље, морамо прогласити које ће се игле користити као улаз, а које као излаз. У нашем случају, пин ПА2 ће се користити као улаз, такође ћемо пријавити овај пин са унутрашњим повлачењем тако да не морамо да га користимо споља. Синтакса је ГПИО_Инит (ГПИОк, ГПИО_ПИН_и, ГПИО_ПИН_МОДЕ_з); . Где је к назив порта, и је број пина, а з је ГПИО начин пина.
// Декларишите ПА2 као улазни извлачни пин ГПИО_Инит (ГПИОА, ГПИО_ПИН_2, ГПИО_МОДЕ_ИН_ПУ_ИТ);
Даље, пинове ПА3 и ПБ5 морамо прогласити излазима. Поново су могући многи типови декларације излаза, али ми ћемо користити „ГПИО_МОДЕ_ОУТ_ПП_ЛОВ_СЛОВ“, што значи да ћемо га декларисати као излазни пин пусх-пулл типа са малом брзином. А подразумевано ће вредност бити мала. Синтакса ће бити иста.
ГПИО_Инит (ГПИОА, ГПИО_ПИН_3, ГПИО_МОДЕ_ОУТ_ПП_ЛОВ_СЛОВ); // Декларишите ПБ5 као пусх пулл излазни пин ГПИО_Инит (ГПИОБ, ГПИО_ПИН_5, ГПИО_МОДЕ_ОУТ_ПП_ЛОВ_СЛОВ);
У доњем снимку из корисничког приручника СПЛ наведени су сви могући ГПИО режими (з).
Бесконачна петља
Након декларације пин-а, морамо створити бесконачну петљу унутар које ћемо непрестано трептати ЛЕД и надгледати статус дугмета за пребацивање ЛЕД-а. Бесконачна петља може да креира са временом (1) или са фор (;;) . Овде сам користио вхиле (1).
док (1) {}
Провера статуса улазног пина
Морамо да проверимо статус улазног пина, синтакса да бисмо то урадили је ГПИО_РеадИнпутПин (ГПИОк, ГПИО_ПИН_и); где је к назив порта, а и пин број. Ако је пин висок, добићемо '1', а ако је пин низак, добићемо '0'. Некада смо у петљу иф проверили да ли је пин висок или низак.
иф (ГПИО_РеадИнпутПин (ГПИОА, ГПИО_ПИН_2)) // ако је притиснуто дугме
Израда ГПИО пин високе или ниске
Да бисмо направили ГПИО пин висок или низак, можемо користити ГПИО_ВритеХигх (ГПИОк, ГПИО_ПИН_и); и ГПИО_ВритеЛов (ГПИОк, ГПИО_ПИН_и); редом. Овде смо направили ЛЕД да се укључи ако се притисне дугме и искључи ако се не притисне дугме.
иф (ГПИО_РеадИнпутПин (ГПИОА, ГПИО_ПИН_2)) // // ако је притиснуто дугме ГПИО_ВритеЛов (ГПИОА, ГПИО_ПИН_3); // ЛЕД укључен иначе ГПИО_ВритеХигх (ГПИОА, ГПИО_ПИН_3); // ЛЕД искључен
Укључивање ГПИО пина
За пребацивање ГПИО пина имамо ГПИО_ВритеРеверсе (ГПИОк, ГПИО_ПИН_и); позивање ове функције ће променити статус излазног пина. Ако је пин висок, он ће бити промењен у низак, а ако је низак, променит ће се у висок. Ову функцију користимо за трептање уграђене ЛЕД лампице на ПБ5.
ГПИО_ВритеРеверсе (ГПИОБ, ГПИО_ПИН_5);
Функција одлагања
За разлику од Ардуина, космички компајлер нема унапред дефинисану функцију одлагања. Дакле, морамо га сами створити. Моја функција одлагања дата је у наставку. Вредност дое делаи ће бити примљена у променљиву мс и користићемо две фор петље за задржавање или извршавање програма. Попут _асм („ноп“) је упутство за склапање које означава никакву операцију. То значи да ће се контролер петљати у петљу фор без извођења било каквих операција, стварајући тиме кашњење.
воид делаи (инт мс) // Дефиниција функције {инт и = 0; инт ј = 0; фор (и = 0; и <= мс; и ++) {фор (ј = 0; ј <120; ј ++) // Ноп = Фосц / 4 _асм ("ноп"); // Не изводимо никакву операцију // код склопа}}
Отпремање и тестирање програма
Сада када је наш програм спреман, можемо га отпремити и тестирати. Једном отпремљен, мој хардвер је радио како се очекивало. Уграђена црвена ЛЕД лампица трептала је сваких 500 милисекунди, а спољни зелени ЛЕД се палио сваки пут када бих притиснуо прекидач.
Комплетна дела могу се наћи на видео линку доле. Када дођете до ове тачке, можете покушати повезати прекидач и ЛЕД на различите пинове и поново написати код да бисте разумели концепт. Такође се можете играти са временом одлагања да бисте проверили да ли сте концепте јасно разумели.
Ако имате било каквих питања, оставите их у одељку за коментаре испод, а за остала техничка питања можете користити наше форуме. Хвала што сте пратили, видимо се у следећем водичу.