Печать
Категория: STM32
Просмотров: 103

Задачи:

  1. создать проект в STM32cubeMX;
  2. настроить микроконтроллер под задачи;
  3. зажечь светодиод;
  4. заставить его мигать через нужные интервалы времени;
  5. заставить его мигать через нужные интервалы времени при нажатой кнопке.

1. Создаем проект в STM32cubeMX.

Запускаем куб. “File -> New project…”

В списке выбираем нужный микроконтроллер, в моем случае stm32f103c8t6, так как платка у меня имеется для экспериментов китайского производства именно с этим контроллером.

Если нет отладочной платы, а очень хочется попробовать эти камешки на вкус, выбирайте stm32f103c6 и устанавливаете себе Proteus Professional версии 8.7 или выше. Дело в том, что некоторые микроконтроллеры stm32 были добавлены в симулятор proteus начиная с версии 8.7. Но вот stm32f103c8t6 в протеусе нет.

Откроется окно «Pinout & Configuration».

Сразу же сохраним проект «File -> Save project  As..».

2. Настраиваем микроконтроллер.

На моей плате есть светодиод, и находится он на выводе PC13. Ищем его на картинке. Можно так же вписать его в строку поиска, и он сам даст о себе знать.

Нажимаем на нужную ножку контроллера и в списке выбираем GPIO_Output, что значит – настраиваем его на выход.

Кнопку буду подключать внешнюю к выводу PA1. Ищем нужный вывод на картинке, нажимаем на него, выбираем «GPIO_Input» - цифровой вход.

Слева, в меню, жмем SYS. Выбираем «Debug ->Serial Wire», и наблюдаем на картинке две активированные ножки. На этом шагу мы активировали интерфейс программирования микроконтроллера. Для контроллеров STM32F1 – этот шаг очень важен, так как по умолчанию в STM32CubeMX все интерфейсы программирования микроконтроллера отключены.  И если не указать интрфейс и сгенерировать код, то после прошивки им микроконтроллера эта прошивка отключит все интерфейсы программирования. В результате, в следующий раз, мы его запрограммировать без танцев с бубном не сможем.

В окне «Project Manager» укажем среду разработки в которой будем работать с проектом. В моем случае – это «MDK-ARM V5» - буду работать в Keil uVision.

Жмем «GENERATE CODE».

В папке, которую указали при сохранении проекта, должны появиться папки. Нам нужна папка Mdk-arm. Открываем ее и запускаем файл с расширением «*.uvprojx», в моем случае «STM32_test_GPIO.uvprojx» (среда разработки Keil uVision должна быть уже установлена).

Когда откроется проект в среде разработки, слева, в дереве файлов проекта ищем «main.c» - основной файл с которым будем работать при написании программы.

Можно пробежаться по открытому коду и просмотреть, что сгенерировал куб. Вообще говоря, с помощью STM32CubeMX можно настраивать микроконтроллер и в процессе написания программы, например, появилась необходимость задействовать еще один выход микроконтроллера или сконфигурировать другой таймер. В папке, которую указали при сохранения проекта в STM32cubeMX есть файл с расширением «*.ioc», в моем случае «STM32_test_GPIO.ioc» - запустив его, откроется куб, в котором можно внести изменения в конфигурацию микроконтроллера, после чего нажимаем «GENERATE CODE». Куб внесет изменения в конфигурацию нашего проекта. Однако, стоит помнить, когда куб вносит изменения в конфигурацию, он заново генерирует файлы проекта. И, что бы не удалился наш написанный код, его необходимо размещать в соответствующих местах между /* USER CODE BEGIN*/ и /* USER CODE END*/.

3. Зажжем светодиод.

Сейчас мы не будем обращаться к регистрам, а воспользуемся библиотекой HAL, которую STM32CubeMXуже добави.л в наш проект.

Ищем функцию main, в ней цикл while. В нужном месте прописываем:

HAL_GPIO_WritePin(GPIOС, GPIO_PIN_13, GPIO_PIN_SET) ;

Данная команда записывает  в бит регистра порта С, отвечающего за 13-й пин, высокий уровень (если указать RESET - уровень будет низкий).

Вот собственно и все, что от нас требуется, что бы зажечь светодиод.

Жмем кнопку «Build Target» или «F7», что бы скомпилировать проект.

Дожидаемся окончания процесса, что бы увидеть сообщение об ошибках.

Если ошибок нет, можно попробовать прошить наш контроллер прошивкой. Файл с расширением «*.hex» лежит по адресу «MDK-ARM\STM32_test_GPIO» относительно папки с проектом куба. Прошить микроконтроллер можно напрямую с Keil, нажав «F8».

4. Поморгаем светодиодом.

В библиотеке HAL имеется функция:

HAL_Delay();

Она формирует паузу в миллисекундах.

Поправим нашу программу.

«F7». Прошиваем. Наблюдаем.

5. Задействуем кнопку.

Вывод PA1 мы уже сконфигурировали как цифровой вход, но он висит в воздухе. Пусть кнопкой мы будем притягивать PA1 к земле, значит нужно, что бы при не нажатой кнопке на PA1  был высокий уровень. Как это сделать? Можно найти в коде инициализацию PA1 и внести изменения. Но мы пойдем по более простому пути, ведь мы еще не знаем, как и что за это отвечает.

Закроем Keil uVision и откроем проект в STM32CubeMX. На странице «Pinout & Configuration» раскрываем «System Core», жмем «GPIO». В открывшемся списке нажимаем наш PA1.

Внизу, напротив GPIO Pull-up/Pull-down, устанавливаем Pull-up. Таким образом мы использовали подтягивающий резистор и притянули через него PA1 к высокому уровню.

Генерируем код и открываем проект в Keil uVision.

Ищем уже написанный нами код и изменяем его, добавив условие.

«F7». «F8». Наблюдаем.

Авторизоваться, чтобы комментировать