Таблица прерываний Libopencm3 на STM32F4
Я использую libopenCM3 для своего проекта на STM32F4. Ранее я использовал Стандартную периферийную библиотеку и более новый уровень аппаратной абстракции, разработанный ST.
В этих библиотеках у вас есть файл сборки (файл запуска) с определением таблицы векторов.
Это то, что мне не хватает в libopenCM3. Подскажите, пожалуйста, где найти эту таблицу? Или это сделано каким-то другим способом?
Мне действительно нужно использовать прерывания в моем проекте.
Благодарю.
1 ответ
Подскажите, пожалуйста, где найти эту таблицу?
Таблица векторов прерываний находится в lib / cm3 / vector.c:
__attribute__ ((section(".vectors")))
vector_table_t vector_table = {
...
.irq = {
IRQ_HANDLERS
}
};
А также IRQ_HANDLERS
для STM32F4 определены в lib/stm32/f4/vector_nvic.c
файл. Этот файл будет доступен после сборки библиотеки (он генерируется скриптом irq2nvic_h). В этом файле вы можете увидеть что-то вроде этого:
#define IRQ_HANDLERS \
[NVIC_DMA1_STREAM0_IRQ] = dma1_stream0_isr, \
[NVIC_ADC_IRQ] = adc_isr, \
...
Функции как dma1_stream0_isr()
а также adc_isr()
определяются так:
#pragma weak adc_isr = blocking_handler
Таким образом, эти функции просто блокируют обработчики по умолчанию. Но они определены как слабые, поэтому вы можете легко переопределить их в своем коде.
Или это сделано каким-то другим способом?
Как обсуждалось выше, все сводится к следующему: вам просто нужно определить функцию обработчика прерываний ( ISR) с правильным именем в вашем коде, и ваша функция будет помещена в таблицу векторов прерываний автоматически.
Например, если вы хотите обработать прерывание UART2, просто реализуйте usart2_isr()
Функция где-то в вашем коде. Полный список имен функций ISR см. В include/libopencm3/stm32/f4/nvic.h
, Но эти имена обычно довольно просты.
Также ознакомьтесь с проектом libopencm3-examples. Скорее всего, вы найдете именно то, что вам нужно там.