Таблица прерываний 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. Скорее всего, вы найдете именно то, что вам нужно там.

Другие вопросы по тегам