Найти в Дзене
Uninterest

Изучаем STM8S часть 8

Оглавление

Порты ввода/вывода общего назначения (GPIO)

Первые опыты «Привет мир»

И так первый шаг в изучении любого устройства, это сделать «Привет мир!». Простая программа и для контроллера это мигание светодиода. И тут мы не будем отклоняться от обычного плана.

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

Для этого также можно использовать STM8CubeMX в режиме выбора плат. Как показано ниже:

-2
-3

Ниже показана внутренняя блок-схема контактов GPIO:

-4

Поскольку каждый порт имеет множество настраиваемых функций и имеет множество связанных с ним опций, его блок на первый взгляд выглядит сложным. Ниже приведены различные варианты настроек, которые есть у каждого порта ввода/вывода:

-5

Ниже показаны функции библиотеки SPL, связанные с модулем GPIO.

-6

Обратите внимание на код приведенный ниже. В этом и есть прелесть библиотеки SPL от ST. Код написан без использования доступа к регистрам.

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

Подключенное оборудование:

-7

Пример кода

Код файла main.c

Разбор кода

Следующие строки сбрасывают настройки используемых нами портов (GPIO). Это надо делать всякий раз, когда вы конфигурируете или настраиваете аппаратное периферию в первый раз. Это является не обязательным, но поможет устранить любую возможные ошибки в конфигурации.

После сброса настроек можно приступить к конфигурированию порта (GPIO). Входы можно подтянуть к питающему напряжению внутренними резисторами. Выходы могут быть двухтактными или с открытым стоком.

При этом каждый вывод может быть настроен индивидуально вне зависимости от другого. Следующие строчки программы устанавливают ножку PB7 как плавающий вход без прерываний, а ножку PD0 как двухтактный выход с высокой скоростью переключения. Ножка PB7 настроена как плавающий вход без внутренней подтяжки, так как кнопка на плате Discovery уже подключена через резистор к питанию.

Оставшаяся часть кода в основном цикле просто опрашивает состояние кнопки и изменяет задержку переключения светодиода.

Примечание переводчика.

В программе используется процедура delay_ms, код которой не приведен в оригинальной статье. После сборки проекта вы получите сообщения об ошибках. Для того чтоб удачно скомпилировать код приведенный выше необходимо создать два файла в папках src и inc с названием stm8s_delay.c и stm8s_delay.h. Файл с расширением .c необходимо скопировать в папку src. А файл с расширением ,h положить в папку inc.

-8

Так же в код файла 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/