Порты ввода/вывода общего назначения (GPIO)
Первые опыты «Привет мир»
И так первый шаг в изучении любого устройства, это сделать «Привет мир!». Простая программа и для контроллера это мигание светодиода. И тут мы не будем отклоняться от обычного плана.
И для этого мы будет пробовать функции ввода и вывода, заставляя мигать светодиод с переменной частотой. И так смотрим схему платы Discovery. Нам надо найти куда подключен светодиод и кнопка.
Для этого также можно использовать STM8CubeMX в режиме выбора плат. Как показано ниже:
Ниже показана внутренняя блок-схема контактов GPIO:
Поскольку каждый порт имеет множество настраиваемых функций и имеет множество связанных с ним опций, его блок на первый взгляд выглядит сложным. Ниже приведены различные варианты настроек, которые есть у каждого порта ввода/вывода:
Ниже показаны функции библиотеки SPL, связанные с модулем GPIO.
Обратите внимание на код приведенный ниже. В этом и есть прелесть библиотеки SPL от ST. Код написан без использования доступа к регистрам.
Названия функций имеют понятные названия, связанные с документацией на микроконтроллеры. Проблем с пониманием кода возникнуть не должно. Программирование почти похоже на использование Arduino. Мы будем опрашивать состояние кнопки, чтобы менять частоту мигания светодиода.
Подключенное оборудование:
Пример кода
Код файла main.c
Разбор кода
Следующие строки сбрасывают настройки используемых нами портов (GPIO). Это надо делать всякий раз, когда вы конфигурируете или настраиваете аппаратное периферию в первый раз. Это является не обязательным, но поможет устранить любую возможные ошибки в конфигурации.
После сброса настроек можно приступить к конфигурированию порта (GPIO). Входы можно подтянуть к питающему напряжению внутренними резисторами. Выходы могут быть двухтактными или с открытым стоком.
При этом каждый вывод может быть настроен индивидуально вне зависимости от другого. Следующие строчки программы устанавливают ножку PB7 как плавающий вход без прерываний, а ножку PD0 как двухтактный выход с высокой скоростью переключения. Ножка PB7 настроена как плавающий вход без внутренней подтяжки, так как кнопка на плате Discovery уже подключена через резистор к питанию.
Оставшаяся часть кода в основном цикле просто опрашивает состояние кнопки и изменяет задержку переключения светодиода.
Примечание переводчика.
В программе используется процедура delay_ms, код которой не приведен в оригинальной статье. После сборки проекта вы получите сообщения об ошибках. Для того чтоб удачно скомпилировать код приведенный выше необходимо создать два файла в папках src и inc с названием stm8s_delay.c и stm8s_delay.h. Файл с расширением .c необходимо скопировать в папку src. А файл с расширением ,h положить в папку inc.
Так же в код файла main.c в начале необходимо добавить строчку
include “stm8s_delay.h”
Ниже привожу содержимое файлов stm8s_delay.h и stm8s_delay.c
Код файла stm8s_delay.h
Код файла stm8s_delay.c
ПСЫ: Организация программных задержек на архитектуре STM8 не даст точного результата в отличии от ардуино, из-за наличия конвейера смотри ниже ссылку перевод документации по конвейеру STM8
http://www.count-zero.ru/2018/stm8_manual/
В данном случае автор статьи упростил реализацию программной задержки, так как перевожу придерживаясь авторского материала, то пока сохраним реализацию автора.
Возможно в случае если у меня не пропадет интерес к изучению этой линейки контроллеров, то подготовлю отдельную статью по созданию задержек в stm8s.
Оригинал статьи
http://embedded-lab.com/blog/starting-stm8-microcontrollers/9/