Для использования 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 и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.
Прикрепленные файлы:
- ub_stm32f4_ext_int_v100_rus.rar (18 Кб)
- Demo_28_EXTI_rus.rar (178 Кб)
Комментарии (2) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]