Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

STM32F4. Урок 28 - Работа с внешними прерываниями

Для использования 16-ти внешних прерываний для каждого порта существует библиотека EXT_INTx-Librarys.

Для прерываний от 0 до 4 автор написал отдельные библиотеки (0,1,2,3,4).

Прерывания от 5 до 9 используют общую библиотеку (5To9), прерывания от 10 до 15 также используют общую библиотеку (10To15).

В STM32F4 на портах PA0, PB0, PC0, PD0 и т.д. используется EXT_INT0, EXT_INT1 применяется на портах PA1, PB1, PC1, PD1 и таким же образом до EXT_INT15.

Нельзя использовать несколько выводов для одной линии прерывания (например, одновременно PB2 и PC2).

В C-файле можно указать, какой порт необходимо использовать и по какому фронту будет вызываться прерывание.

В библиотеке имеются функции для инициализации каждого прерывания и две пользовательских функции "P_EXT_INTx_LoFlanke ()" и "P_EXT_INTx_HiFlanke()", где указывается код, который необходимо выполнить по прерыванию.

Требуемые библиотеки:

Подключаемые модули CooCox-IDE: GPIO, EXTI, SYSCFG, MISC
Поддерживаемые библиотеки: не требуется

Функции (для EXT-INT0):

void UB_Ext_INT0_Init(void); // инициализация

Пример использования (Main):

//--------------------------------------------------------------
// File     : main.c
// Datum    : 01.04.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der EXT-Interrupt-Library
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------

#include "main.h"
#include "stm32_ub_led.h"
#include "stm32_ub_ext_int0.h"

int main(void)
{
  SystemInit(); // Инициализация настроек кварца

  // Инициализация светодиода
  UB_Led_Init();

  // Инициализация прерывания 0
  UB_Ext_INT0_Init();

  while(1)
  {
    // Если нажать кнопку User (высокий уровень на PA0),
	// сработает прерывание Int0 и загорится зеленый светодиод
  }
}

Пример использования (Interrupt):

#include "stm32_ub_led.h"
 
//--------------------------------------------------------------
// Данная функция вызывает
// прерывание EXT-INT0 по высокому уровню
// если [EXTI_Trigger_Rising или EXTI_Trigger_Rising_Falling]
//--------------------------------------------------------------
void P_EXT_INT0_HiFlanke(void)
{
  // добавить свой код здесь
  UB_Led_On(LED_GREEN);
}

В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.

Оригинал статьи

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (2) | Я собрал (0) | Подписаться

0
Tig #
Как-то не привычно вот так каждый модуль контроллера пихать в библиотеку, было бы полезнее просто разбирать как как это стандартными библиотеками кокоса сделать, но у автора свой подход
Ответить
0

[Автор]
Rough #
В таком виде решил делать автор оригиналов статей. Скажем для меня удобнее именно такой формат, ну и выдрать нужный кусок из библиотеки ничего не мешает.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
ELM327 OBD II — адаптер с поддержкой CAN Катушка Тесла
вверх