#arm #stm32 #stm32f4 #stm32cubeide
Вопрос:
Я создал (до сих пор) простой проект для микроконтроллера STM32F411 в STM32CubeIDE. При использовании графического конфигуратора для включения аппаратного прерывания EXTI для моих выводов (изначально я хотел использовать вывод PB5, но добавил, PB8, а просто торчит на моей печатной плате и PA0, так как имеет кнопку, прикрепленную между ним и землей) он генерирует код конфигурации для моего main.cpp (для поколения я переименовать его в основной.с таким конфигуратор видит его), он создал правильные обработчики событий, к которому я добавил метод HAL_GPIO_EXTI_Callback
, согласно инструкции stm32f4xx_hal_gpio.c
, однако, прерывает не уволили. Точки останова не заданы, последовательный вывод отсутствует.
Я настроил эти контакты на использование EXTI, настроил их соответствующие подтягивания/опускания и т. Д. В соответствии с моими потребностями (хотя пытался изменить это безрезультатно). Я включил эти прерывания (EXTI line0 и EXTI line[9:5]) на странице NVIC, последовал бесчисленным руководствам по этой проблеме (например, этому: https://www.waveshare.com/wiki/STM32CubeMX_Tutorial_Series:_EXTI, также официальный youtube-канал ST Electronics).
Моя плата-китайская черная таблетка на основе STM32F411CEU. Полный код можно посмотреть здесь: https://github.com/domints/LoadCellCWManipulator (последняя фиксация, для дальнейшего использования f4330cd6066f227f5cf3d3ea619adcc810025b72
).
Может быть, я чего-то не понимаю? Весь остальной код, который я пробовал до сих пор, работает без проблем. Может быть, в CubeIDE чего-то не хватает во время генерации, и мне нужно что-то написать от руки?
Я пытаюсь использовать C (хотя в IDE предположительно есть такие опции, что это усложняет задачу), так как я исхожу из более высокого уровня фона.
Комментарии:
1. Код библиотеки-C, основной-C , поэтому
HAL_GPIO_EXTI_Callback
его следует объявить какextern "C"
. Без этого слабый заглушка из библиотеки вызывается из прерывания2. @Flexz, я попробую это, спасибо, хотя меня беспокоит то, что точки
EXTI9_5_IRQHandler
доступа иEXTI0_IRQHandler
методыstm32f4xx_it.c
также не срабатывают, а код, вставленный между комментариямиUSER CODE BEGIN EXTI9_5_IRQn 1
, также не выполняется 🙁 ПРАВКА: я добавил эти внешниеHAL_GPIO_EXTI_Callback
элементы, и он даже остановился на точках остановаstm32f4xx_it.c
… Странный…3. @Flexz Я удалил эти внешние эффекты сейчас, и это все еще работает. Вчера я перепробовал все, включая перезагрузку ПК, повторное подключение как ST-Link, так и Blue Pill, но безуспешно. Сегодня я начал свой день с создания этого вопроса, и теперь, хотя все работало и было подключено в течение всей ночи, по какой-то причине это работает. Это обычный способ работы с STMS? Это то, к чему тебе просто нужно привыкнуть? РЕДАКТИРОВАТЬ: Одна вещь, которую я помню, я мог бы сделать сегодня, а не вчера — для очистки git я удалил папку отладки…
4. Я просмотрел
stm32f4xx_hal_gpio.h
файл, иHAL_GPIO_EXTI_Callback
там объявлен прототип, с.extern "C"
Поэтому указывать его в исходном файле не требуется, если заголовок включен прямо или косвенно. STMs редко создает странные проблемы, и их библиотеки могут быть уродливыми, но не прослушиваться. Ваша проблема может быть связана с переименованием main.c в main.cpp и обратно, это может каким — то образом нарушить систему сборки-вот почему помогла очистка старых встроенных файлов.