Входные сигналы и кнопки

STM32 и CubeIDE: кнопки и прерывания

На предыдущем уроке мы познакомились со средой разработки STM32CubeIDE и написали программу для управления светодиодом.

Если управление светодиодом — это работа с выходным сигналом, то при обработке сигнала кнопки мы будем работать с входами. На этом уроке подключим к микроконтроллеру STM32F103C8 две кнопки, одна из которых будет зажигать светодиод, а другая гасить. Сделаем это двумя способами: по-простому, как в уроке про кнопки на Ардуино, и более грамотно — при помощи прерываний. Заодно посмотрим, как у STM32 обстоят с дела с этими самыми прерываниями.

Список необходимых компонентов

Для выполнения всех экспериментов в данном уроке потребуется отладочная плата с микроконтроллером STM32F103C8T6, программатор ST-Link, обычные тактовые кнопки, макетная плата и немного проводов вилка-розетка типа Dupont.

Необходимые компоненты можно добавить в корзину прямо здесь, и затем оформить заказ в нашем интернет-магазине.

В корзину
В корзину
В корзину
В корзину
В корзину

Изменено:

STM32 и CubeIDE: кнопки и прерывания: 6 комментариев

  1. Почему обработчик прерываний в main.c — HAL_GPIO_EXTI_Callback, а вызывается он из stm32f1xx_it.c как HAL_GPIO_EXTI_IRQHandler ?

    • вызов Вашегообработчика прерываний нужно добавить в сгенерированную функцию EXTIX_IRQHandler

    • точнее говоря, если вы генерируете код через куб, то функция EXTX_Callback вызывается через HAL_GPIO_EXTI_IRQHandler

      • она и так вызывается в качестве week после сброса. в кубе надо поменять приоритет с 0 допустим на 2.

  2. Здравствуйте. Находится ли МК внутри прерывания когда срабатывает одна из функций ***handler? если да то получается что и callback обрабатывается внутри прерывания. Просьба уточнить последовательность смены режимов МК для данного примера

  3. А зачем такие танцы с бубнами? Сначала код для двух разных прерываний разный, потом мы его объединяем, вызывая одну функцию, с разными аргументами, чтобы потом опять ветвлениями выяснять, а какая же кнопка была нажата. А не проще всё сделать непосредственно в самих функциях-обработчиках, не объединяя код без необходимости?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.