Где находятся файлы, определяющие NVI C для STM32 в PlatformIO при использовании CubeMX? - PullRequest
0 голосов
/ 25 мая 2020

Недавно я переключился на использование PlatformIO для разработки для STM32, используя следующий рабочий процесс:

  • Создание файла .io c с помощью утилиты CubeMX
  • Создание исходного кода и конфигурация PlatformIO из этого файла .io c из утилиты командной строки stm32pio
  • Редактирование, сборка и отладка с помощью подключаемого модуля PlatformIO для VSCode (Ma c)

В целом работает очень хорошо. Однако ранее я использовал генерацию кода CubeMX в среде ST CubeMX IDE, которая помещала файл .s в исходный каталог, который (насколько я понимаю) определял NVI C, а также функцию по умолчанию, которая использовалась для исключений. / interrupts, которые не определены явно (т. е. те, которые обрабатываются их слабыми реализациями по умолчанию). Я не вижу, где это определено в новом рабочем процессе. Генерируется ли это динамически как часть процесса сборки?

Причина, по которой я спрашиваю, заключается в том (помимо желания лучшего понимания процесса в целом), я хотел бы написать обработчик прерывания для EXTI0, но запускать это как программное прерывание, а не назначать ему пин. Если это невозможно, то, возможно, весь вопрос спорный.

1 Ответ

1 голос
/ 27 мая 2020

Я смог найти ответ. Эти шаги могут быть полезны тем, кто сталкивается с этим вопросом. Это было сделано в MacOS, но должно быть аналогично процессу для других операционных систем.

В процессе сборки можно увидеть имя файла. Ему будет предшествовать startup_, за которым следует название конкретного чипа, для которого вы разрабатываете. В моем случае это строка

Compiling .pio/build/disco_f072rb/FrameworkCMSISDevice/gcc/startup_stm32f072xb.o

При поиске в папке .platformio моего пользовательского каталога я нашел соответствующий файл .s, который в моем случае был .platformio/packages/framework-stm32cube/f0/Drivers/CMSIS/Device/ST/STM32F0xx/Source/Templates/gcc/startup_stm32f072xb.s

Структура пути, ведущего к файлу, указывает на особенности оборудования и фреймворков, которые я использую: фреймворк STM32Cube, чип серии F0 и компилятор G CC. Самый простой способ найти этот файл и как мне удалось его найти - это использовать команду find из терминала для поиска в каталоге PlatformIO.

Чтение этого файла дает строки, которые я искал, определяя имена функций, которые будут использоваться для обработки исключений и прерываний, например:

.weak      EXTI0_1_IRQHandler
.thumb_set EXTI0_1_IRQHandler,Default_Handler

Похоже, пока я использую CubeMX HAL для некоторых драйверов, код запуска basi c выполняется с использованием CMSIS, поэтому он должен быть таким же для сборок на основе HAL, LL или CMSIS.

...