ПредишенСледващото

Ето най-после, и е време да се опитаме да работи с външно прекъсване. Този урок, на първо място, е по-голямо търсене, макар и да изглежда на пръв поглед прост. Имаше много искания и аз нямаше как да не реагира. На второ място, ние сме вече работи с LAN ENC28J60 модул. kotorgo има достъп, чрез които можем да се прекъснат в края на някои операции, които бих искал да се справят. Също така, ако мога да го направя, исках да го споделя с вас, но без оригиналната идея на външно прекъсване контролер в STM32, за да го разбере, според мен, ще бъде меко казано, трудно. Ето защо този урок е узрял.

Като микроконтролер, ние приемаме и същ STM32F103RCT6. разположен на веригата на ниска цена съвет, с което ние правим в процеса на програмиране модул LAN, както и програмирането и евтин малък ST-Link V2.

Накратко на външни прекъсва. Външни прекъсва - тези прекъсвания, които се обработват поради настъпването на определени събития в определен етап от микроконтролер порт. Такива събития могат да бъдат до известна степен, въпреки само 2 логически състояния. Разнообразието на тези събития е лесно да се види, разкривайки списък с тях в Cube MX, за да изберете пристанища крака

Можете да разделите типове данни в 2 групи на половина. Първата група - външно прекъсване - е обработването на външни прекъсва. И второ - обработка на събития. Разликата е само, че в първия случай се нарича прекъсване манипулатор, а вторият флаг, съответстваща само се издига. Всяка група е разделена на три вида събития:

1. Установена възходящ ръб (ниво 0 до 1),

2. Установена попадащи ръб (промяна на ниво 1 до 0),

3. откриване на някое от тези фронтове.

Също така, все още има видове софтуер прекъсване, но ние сме с вас, те просто не е нужно.

Това е всичко, от прекъсване видове.

Има няколко регистри, за да се справят с външни прекъсва:

EXTI_IMR. Прекъсване маска регистър,

EXTI_EMR. събитие регистър маска

EXTI_RTSR. отговор се регистрирате на нарастващ фронт,

EXTI_FTSR: отговор регистрирате на падащ борд,

EXTI_SWIER. Стартиране на софтуера за прекъсване се регистрирате,

EXTI_PR. знамена регистрират събития, които се случват за прекъсване на повиквания.

Подробности всички тези регистри са боядисани в техническата документация Справочника на всички контролери STM. Ние няма да се помисли за по-подробно, нека да го оставя на съвестта на HAL библиотека.

Това е логическа схема на едно прекъсване манипулатор в контролера

STM урок 74

Тук ние виждаме всички наши регистри, и това, което между тях е логическа връзка.

Можете да видите и организационна схема линии външни прекъсва

STM урок 74

Тук ние виждаме 16-те линии, които са свързани чрез мултиплексори към крачетата на едно и също име за всички портове. Това означава, че можем да обработваме контролер 16 фута, но както може да се види от multipleksivnoy организация, те всички трябва да бъдат различни номера. Това означава, че можем да се справим както Pa1 и PC2 крака, но не може да обработи PA1 и PC1.

Също така, има още 4 линии, които не са свързани с пристанищата за общо предназначение, както и за някои видове периферни устройства

Четирите други EXTI линии са свързани, както следва:

• EXTI линия 16 е свързан към изхода на PVD

• EXTI ред 17 е свързан към Аларма събитието RTC

• EXTI линия 18 е свързан към USB събуждане събитието

• EXTI линия 19 е свързан към събитието Ethernet събуждане (само на свързаност линия устройства)

Това означава, че ние дори може да се справи външни събития от програмируеми детектор на напрежение върху РТК аларма, от "пробуждане" USB и Ethernet.

Ето колко прекъсне, и това не е всичко. По този въпрос е писано толкова, колкото 18 страници техническа документация, така че всеки, интересуващ се - не забравяйте да прочетете.

Нашата задача - да се справят с тези компетентно прекъсвания в нашия код с помощта на HAL библиотечни функции.

Създаване на генератор проекти Cube MX нов проект от нашия контролер

Ще включва кварцов резонатор

Ние избираме програмирането за SWD интерфейс

Колоездене крак, който отговаря за LED

STM урок 74

Включително външни прекъсвания на Pa1 на крака

Ние се създаде разделители и мултипликатори за максимална производителност, вижте "Часовник Configuration" (кликнете върху снимката за по-голямо изображение)

STM урок 74

Нека да преминем към "Configuration" и раздел GPIO конфигурирате PC13 крак за средната скорост

STM урок 74

За Pa1 крака приложимо затягане регистрирате към обща шина, така че да не виси във въздуха, тъй като прекъсването, ще хване бутона и бутона никъде не дърпайте, в противен случай статутът ще бъде несигурно. Въведете външно прекъсване отпуск по подразбиране - нарастващ фронт

STM урок 74

Приложими настройки пристанищни и преминете към настройката на световната бутона прекъсване "NVIC", ние включват прекъсване там EXTI1

STM урок 74

тези настройки могат да се прилагат.

Ние се създаде проект, възлагане EXTI01 име и избор на среда за разработка SW4STM32

STM урок 74

Ние генерираме проект, да го отворите в Workbench System. както винаги, и да изтриете настройки за корекция на грешки за отстраняване на грешки файл.

Ще се съберат на проекта, се опитайте да го стартирате, но най-вероятно ние не работи и ще видим в конзолата успя тук е послание, че администратора на флаш не се дължи на факта, че тя не успя да се рестартира

Разбира се, може просто задръжте и отпуснете бутона RESET на дъската. Но да отидем друг начин. Четох много форуми и не намери нищо там, освен за редактиране на конфигурационни файлове. Да отворим нашия файл отстраняване на грешки в свойствата на проекта

STM урок 74

В диалоговия прозорец zaydom в отметка "за отстраняване на грешки" и кликнете до него бутон "Показване на опциите за генератор"

STM урок 74

В най-долната кутия "режим Reset" изберете "Software нулиране System"

STM урок 74

Запазване на настройките трябва сега ние всички питат.

Open Стартиране и деактивирайте нашия LED в основната (функция). тъй като ние знаем, че той е свързан в обратна (можете да разбира се да го направя в Cube MX, но по-ясно)

/ * ПОТРЕБИТЕЛСКИ КОД започне 2 * /

HAL_GPIO_WritePin (GPIOC, GPIO_PIN_13, GPIO_PIN_SET);

/ * ПОТРЕБИТЕЛСКИ КОД END * 2 /

След това добавете манипулатор в Стартиране външни прекъсвания

/ * ПОТРЕБИТЕЛСКИ КОД започне 4 * /

анулира HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin)

/ * ПОТРЕБИТЕЛСКИ КОД END 4 * /

Тогава ние тук са прецизно проследяване на прекъсването на линията 1 и светлинният индикатор ще свети

анулира HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin)

HAL_GPIO_WritePin (GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);

/ * ПОТРЕБИТЕЛСКИ КОД END 4 * /

Свържете бутон между PA1 и тел захранване (кликнете върху картинката, за да я увеличите)

STM урок 74

Ще събираме проект proshom контролер. След това кликнете до бутона - индикаторът трябва да бъде осветен (кликнете върху картинката, за да я увеличите)

STM урок 74

Нека многообразието на нашия малък проект, така че не е толкова скучно. За тази zaydom в Cube MX, и тъй като не разполагаме с Кайл, че не е необходимо да се затвори по проекта, както и да включва външни прекъсва, а повече върху PA2 на крака

И ние ще включва различен тип - спусък на низходящ край прекъсне и резистора имаме обратното издърпайте нагоре към източник на напрежение. За тази vnesom следните настройки в "Configuration" в GPIO за PA2 крака

STM урок 74

Нанесете настройки, генериране на проекта, през Workbench системата и направи Обновяване проект.

Попълнете следния начин нашия манипулатор за прекъсване на Pa1 на крак нашите LED светлина, а в случай на PA2 - потушен

анулира HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin)

ако (GPIO_Pin == GPIO_PIN_1)

HAL_GPIO_WritePin (GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);

> Иначе ако (GPIO_Pin == GPIO_PIN_2)

HAL_GPIO_WritePin (GPIOC, GPIO_PIN_13, GPIO_PIN_SET);

Свържете още един бутон, а от PA2, освен това на втория терминал от GND (кликнете върху картинката, за да я увеличите)

STM урок 74

Сега, ако ще събираме код и proshom контролер, първия бутон ще сме LED светлина, а вторият да гасят.

Тя ще изглежда, защо не? И това, което се случва, независимо от напредъка на програмата, а не в един безкраен цикъл, когато има е написан по време на манипулатор с натискане на един бутон, ние никога не може да бъде и не е ясно дали нашето събитие се обработва. Поради това, разглеждането на външните прекъсва, ние направихме една голяма крачка напред към лечението на независимостта на определени събития по краката на пристанищата микроконтролер. Разбира се, вече са дадени ни сега е много богат опит, ние не го направим много трудно.

Благодаря ви за вниманието!

STM урок 74

Свързани статии

Подкрепете проекта - споделете линка, благодаря!