- Врсте прекида и ИСР
- Синтакса за прекид у СТМ32
- Компоненте потребне
- Кружни дијаграм и везе
- Програмирање СТМ32Ф103Ц8 за прекиде
Прекиди су механизам помоћу којег И / О или инструкција могу обуставити нормално извршавање процесора и сервисирати се као да имају највећи приоритет. Као на пример, процесор који ради нормално извршавање такође може континуирано надгледати неку врсту догађаја или прекида. Тада се догоди спољни прекид (као са неког сензора), тада процесор зауставља нормално извршење и прво сервира прекид, а затим наставља нормално извршавање.
Овде у овом пројекту, за разумевање прекида у СТМ32Ф103Ц8, користићемо тастер као спољни прекид. Овде ћемо повећати број са 0 и приказати га на ЛЦД-у димензија 16к2, а кад год се притисне тастер, лед се УКЉУЧИ, а ЛЦД екран приказује ПРЕКИД. ЛЕД се искључује чим се дугме отпусти.
Врсте прекида и ИСР
Прекиди се могу класификовати у две врсте:
Хардверске прекиде: Ако сигнал у процесор долази са неког спољног уређаја попут дугмета или сензора или са другог хардверског уређаја који генерише сигнал и поручује процесору да изврши одређени задатак присутан у ИСР-у, познат је као хардверски прекиди.
Прекиди софтвера: Прекиди који се генеришу у софтверским упутствима.
Рутинска услуга прекида
Рутинска услуга прекида или обрађивач прекида је догађај који садржи мали скуп инструкција и када се догоди прекид, процесор прво изврши овај код који је присутан у ИСР-у, а затим наставља са задатком који је радио пре прекида.
Синтакса за прекид у СТМ32
ИСР има следећу синтаксу аттацхИнтеррупт (дигиталПинТоИнтеррупт (пин), ИСР, моде) у Ардуину, а исти се такође може користити у СТМ32 као што користимо ардуино ИДЕ за отпремање кода.
- дигиталПинТоИнтеррупт (пин): Као и на Ардуино плочи Уно, имамо пинове 2,3, а у мега имамо 2,3,18,19,20,21 за прекиде. У СТМ32Ф103Ц8 такође имамо пинове за прекиде, било који ГПИО пинови се могу користити за прекиде. Ми само да одредимо улазни пин који користимо за прекид. Али док истовремено користимо више прекида, можда ћемо морати да следимо нека ограничења.
- ИСР: То је функција обрађивача прекида која се позива када се догоди спољни прекид. Нема аргументе и тип враћања воид.
- Режим: Тип прелаза за покретање прекида
- РИСИНГ: За покретање прекида када пин прелази из ЛОВ у ХИГХ.
- ПАДАЊЕ: Да би се покренуо прекид када пин прелази из ВИСОКОГ у НИСКИ.
- ПРОМЕНА: Да би се покренуо прекид када пин прелази или од ЛОВ до ХИГХ или од ХИГХ до ЛОВ (тј. Када се пин мења).
Неки услови током коришћења прекида
- Рутинска функција услуге прекида (ИСР) мора бити што краћа.
- Функција Делаи () не ради унутар ИСР-а и треба је избегавати.
Компоненте потребне
- СТМ32Ф103Ц8
- Тастер
- ЛЕД
- Отпорник (10К)
- ЛЦД (16к2)
Кружни дијаграм и везе
Једна страна пин-а дугмета повезана је на 3.3В СТМ32, а друга страна је повезана са улазним пин-ом (ПА0) СТМ32 преко падајућег отпора.
Отпорник за повлачење се користи тако да микроконтролер добија ХИГХ или ЛОВ на свом улазу само када се притисне или отпусти дугме. У супротном, без повлачења отпора, МЦУ може збунити и на улаз унети неке случајне плутајуће вредности.
Веза између СТМ32Ф103Ц8 и ЛЦД екрана
Следећа табела приказује пин везу између ЛЦД-а (16Кс2) и микроконтролера СТМ32Ф103Ц8.
СТМ32Ф103Ц8 |
ЛЦД |
ГНД |
ВСС |
+ 5В |
ВДД |
На ПИН центра за потенциометар |
В0 |
ПБ0 |
РС |
ГНД |
РВ |
ПБ1 |
Е. |
ПБ10 |
Д4 |
ПБ11 |
Д5 |
ПЦ13 |
Д6 |
ПЦ14 |
Д7 |
+ 5В |
А. |
ГНД |
К. |
Програмирање СТМ32Ф103Ц8 за прекиде
Програм за овај водич је једноставан и дат је на крају овог водича. Није нам потребан ФТДИ програмер за програмирање СТМ32, једноставно повежите свој рачунар са УСБ портом СТМ32 и започните програмирање са Ардуино ИДЕ. Сазнајте више о програмирању СТМ32 преко УСБ порта.
Као што смо рекли да ћемо овде у овом упутству повећати број са 0 и приказати га на ЛЦД-у димензија 16к2, а сваки пут када се притисне тастер, лед се УКЉУЧИ, а ЛЦД екран приказује 'ПРЕКИД'.
Прво дефинишите конекције ЛЦД пинова са СТМ32. Можете га изменити према својим захтевима.
цонст инт рс = ПБ10, ен = ПБ11, д4 = ПБ0, д5 = ПБ1, д6 = ПЦ13, д7 = ПЦ14;
Даље, укључујемо датотеку заглавља за ЛЦД екран. Ово позива библиотеку која садржи код како СТМ32 треба да комуницира са ЛЦД-ом. Такође се уверите да је функција ЛикуидЦристал позвана са именима пинова која смо управо дефинисали горе.
укључују
Глобалне променљиве се користе за пренос података између ИСР и главног програма. Проглашавамо променљиву ледОн променљивом и такође логичком како бисмо навели тачно или нетачно.
волатиле боолеан ледОн = фалсе;
Унутар функције воид сетуп () приказаћемо уводну поруку и обрисати је након 2 секунде.
лцд.бегин (16,2); лцд.принт ("ДИГЕСТ ЦИРЦУИТ"); кашњење (2000); лцд.цлеар ();
Опет у истој функцији воид сетуп () , морамо да одредимо улазне и излазне пинове. Подесили смо пин ПА1 за излаз на ЛЕД и ПА0 за улаз са дугмета.
пинМоде (ПА1, ИЗЛАЗ) пинМоде (ПА0, ИНПУТ)
Такође ћемо повећавати број, па декларисати променљиву са вредношћу нула.
инт и = 0;
Сада је важан део кода функција аттацхИнтеррупт () , она је такође укључена у воид сетуп ()
аттацхИнтеррупт (дигиталПинТоИнтеррупт (ПА0), буттонПресс, ЦХАНГЕ)
Навели смо пин ПА0 за спољни прекид, а буттонПресс је функција која се позива када у ПА0 пину постоји ЦХАНГЕ (ЛОВ то ХИГХ или ХИГХ то ЛОВ). Такође можете користити било које друго име функције, пин и начин рада према захтеву.
Унутар празнине петље () увећавамо број (и) са нуле и исписујемо број на ЛЦД (16к2).
лцд.цлеар (); лцд.принт ("БРОЈ:"); лцд.принт (и); ++ и; кашњење (1000);
Најважнији део је стварање функције руковаоца прекидима према имену које смо користили у функцији аттацхИнтеррупт () . Користили смо буттонПресс, па смо овде креирали функцију воид буттонПресс ()
воид буттонПресс () { иф (ледОн) { ледОн = фалсе; дигиталВрите (ПА1, ЛОВ); } елсе { ледОн = тачно; дигиталВрите (ПА1, ХИГХ); лцд.сетЦурсор (0,1); лцд.принт ("Прекид"); } }
Рад овог дугметаПресс () ИСР:
Према вредности ледОн променљиве, ЛЕД се укључује и искључује.
ДУГМЕ СТАЊЕ |
ледОн (вредност) |
ЛЕД (црвена) |
ЛЦД (16к2) |
НЕСПРЕСИВАН |
Нетачно |
ВАН |
- |
ПРИТИСНУТО |
Истина |
НА |
Емисије '' ПРЕКИД '' |
Ако је ледОн вредност нетачна, ЛЕД остаје искључен, а ако је ледОн вредност Труе, ЛЕД се укључује и на ЛЦД екрану се приказује 'Интеррупт'.
НАПОМЕНА: Понекад може доћи до ефекта прекидања прекидача и он може бројати вишеструки окидач када се притисне тастер, јер је то неколико скокова напона због механичког разлога пребацивања дугмета. Ово се може смањити увођењем РЦ филтера.
Комплетан рад прекида у СТМ32Ф103Ц8 приказан је у доњем видеу.