STM32 для начинающих. Урок 1. GPIO.

Автор: | 16.08.2016

GPIO (general-purpose input/output,Интерфейс ввода/ вывода общего назначения)— Интерфейс связывающий микроконтроллер с внешними устройствами (Кнопками, светодиодами, датчиками и так далее).

Как и любой другой микроконтроллер, микроконтроллер STM32, имеет в своем составе интерфейс ввода/вывода. Данный интерфейс позволяет управлять внешними устройствами путем передачи сигналов низкого и высокого уровня через контакты GPIO, а так же принимать данные с них, путем приема сигналов низкого или высокого уровня. Контакты GPIO, группируются в порты(GPIOA,GPIOB,GPIOC…). Каждый контакт может работать на прием или передачу данных.

Рассмотрим режимы работы контакта GPIO:

  • HiZ вход — В таком состоянии сопротивление входа стремится к бесконечности, и он ведет себя как отключенный от схемы.

  • Вход с подтяжкой к питанию — Контакт работает на прием данных. Когда данных нет, контакт подтягивается к логической “1” (напряжению питания). Это делается, что бы избежать помех и искажения данных.

  • Вход с подтяжкой к земле — Контакт работает на прием данных. Когда данных нет, контакт подтягивается к логическому “0” (земле). Это делается, что бы избежать помех и искажения данных.

  • Аналоговый вход — Контакт работает в аналоговом режиме, что позволяет выводить на него сигнал ЦАП или считывать сигнал для АЦП.

  • Выход с открытым коллектором.

  • Двухтактный выход — Контакт работает на передачу данных. Контакт может быть установлен в логическую “1” либо в логический ”, соответствующим регистром.

  • Альтернативный режим с подтяжкой.

  • Альтернативный режим с открытым коллектором.

Альтернативные режимы пока рассматривать не будем, равно как выход с открытым коллектором и аналоговый вход. Рассмотрим подробнее режимы работы “Вход с подтяжкой к питанию/земле” и “Двухтактный выход”.

Как и любую другую периферию, перед использованием GPIO необходимо настроить. Так как периферия микроконтроллеров STM32 очень богата и разнообразна, разработчики потрудились облегчить жизнь пользователям и избавить их от ручной правки регистров, путем создания библиотек HAL и SPL. Разумеется, никто не запрещает вам вручную править регистры. Хоть ручная правка регистров и сложна, однако позволяет лучше понять работу микроконтроллера и оптимизировать прошивку.

Читайте также  STM32.TFT дисплей.Библиотека для дисплея

Но мы не будет сильно углубляться в дебри даташитов и регистров. Возьмем библиотеку SPL и с её помощью инициализируем порты ввода/вывода нашей платы STM32 F3 DISCOVERY.

Работать будем в среде Keil uVision 5.

Как создать свой первый проект в данной среде смотрите здесь :

STM32 для начинающих. Урок 0. Создание проекта в Keil uVision.

Добавим следующий код:

Итак, разберем подробнее, что же происходит в данном коде.

Точка входа — функция main, именно с неё начинается работа нашей прошивки. Сначала вызывается функция InitGPIO,в которой мы настраиваем работу наших портов. Остановимся на ней подобробнее.

Вначале создаются две структуры GPIO_InitTypeDef инициализации портов GPIOE,GPIOA, названные мною как PORTA,PORTE. Данные структуры являются частью библиотеки SPL, и содержат в себе параметры работы соответствующих портов.

Читайте также  STM32 для начинающих. Урок 0. Создание проекта в Keil uVision.

Затем, происходит включение тактирование портов GPIOA,GPIOE командами RCC_AHBPeriphClockCmd. Следует помнить что, изначально тактирование периферии контроллера отключено, в целях снижения энергопотребления. Данной командой мы включаем или выключаем тактирование периферии шины AHB. Подробнее о тактировании поговорим в следующих уроках.

После этого мы заполняем поля структуры GPIO_InitTypeDef , для портов GPIOE,GPIOA. Предварительно структуру можно проинициализировать (записать в неё стандартные значения) командой GPIO_StructInit. Рассмотрим поля структуры GPIO_InitTypeDef:

  • GPIO_Mode — Режим работы порта.
  • GPIO_OType — При настройке порта на выход, данным полем задается его тип (С открытым стоком или двухтактный).
  • GPIO_Pin — Данным полем мы выбираем, какие ножки порта настраивать.
  • GPIO_PuPd — Выбираем режим подтяжки к напряжению питания или к земле.
  • GPIO_Speed — Скорость работы порта.

Итак, поля заполнены, теперь инициализируем порты согласно тому, что прописано в соответствующей структуре командой GPIO_Init.

На этом функция InitGPIO заканчивается.

После вызова функции InitGPIO, наступает основной цикл программы while. В нем мы считываем входящее значение 0 ножки порта GPIOA(К которой подключена кнопка USER платы STM32 F3 DISCOVERY). Делаем мы это командой GPIO_ReadInputDataBit, которая возвращает входное значение выбранной ножки порта. В соответствии с состоянием ножки 0 порта GPIOA, выставляем значение 10 ножки порта GPIOE командами GPIO_ResetBits и GPIO_SetBits. Команда GPIO_ResetBits устанавливает логический ноль на выбранной ножке порта, а команда GPIO_SetBits устанавливает логическую единицу на выбранной нами ножке.

Когда вы загрузите данную программу в плату STM32 F3 DISCOVERY, не забудьте нажать кнопку RESET, которая сбросит микроконтроллер. После этого нажимайте кнопку USER и смотрите за результатом.

 

Спасибо за внимание!

Другие уроки цикла


Любое копирование, воспроизведение, цитирование материала, или его частей разрешено только с письменного согласия администрации MKPROG.RU. Незаконное копирование, цитирование, воспроизведение преследуется по закону!

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

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