STM8. Урок 3. Описание GPIO и библиотека SPL

Управление портами GPIO осуществляется с помощью 5 регистров: 

  • Px_ODR  — вывод логического уровня в порт
  • Px_IDR   — чтение логического уровня порта 
  • Px_DDR  — настройка порта на вход или выход
  • Px_CR1   — настройка дополнительных параметров 1
  • Px_CR2  — настройка дополнительных параметров 2
  • Порты GPIO, в отличии от периферии, не нуждается в настройке тактирования.

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

    Итак, настройка порта начинается с выбора направления пина на вход или выход. Если мы выберем настройку ПИНа на выход, то необходимо выбрать режим выхода. Существует два вида выхода: Открытый сток или Тяни-толкай. Открытый сток необходим для программной реализации протоколов I2C, 1-Wire. Дополнительные настройки режима выхода: скорость нарастания фронта и начальный логический уровень.

    При настройке ПИНа на вход можно настроить подтягивающий резистор и настроить порт на внешнее прерывание.

    Опишем основные функции библиотеки SPL stm8l15x_gpio.h/c.

    Функции настройки GPIO:

    void GPIO_DeInit(GPIO_TypeDef* GPIOx); — Сброс всех регистров порта к 0 значениям.

    void GPIO_Init(GPIO_TypeDef* GPIOx, uint8_t GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode); — Настройка порта на один из режимов описанных в типе GPIO_Mode_TypeDef.

    typedef enum
    {
     GPIO_Mode_In_FL_No_IT    = (uint8_t)0x00,  /*!< Вход без подтяг. резистора, без внешних прерываний */
     GPIO_Mode_In_PU_No_IT    = (uint8_t)0x40,  /*!< Вход с подтяг. резистором, без внешних прерываний */
     GPIO_Mode_In_FL_IT    = (uint8_t)0x20,  /*!< Вход без подтяг. резистора, с внеш. прерываниями */
     GPIO_Mode_In_PU_IT    = (uint8_t)0x60,  /*!< Вход с подтяг. резистором, с внеш. прерываниями */
     GPIO_Mode_Out_OD_Low_Fast  = (uint8_t)0xA0,  /*!< Открытый сток, низкий уровень выхода, 10MHz */
     GPIO_Mode_Out_PP_Low_Fast  = (uint8_t)0xE0,  /*!< Тяни толкай, низкий уровень выхода, 10MHz */
     GPIO_Mode_Out_OD_Low_Slow  = (uint8_t)0x80,  /*!< Открытый сток, низкий уровень выхода, 2MHz */
     GPIO_Mode_Out_PP_Low_Slow  = (uint8_t)0xC0,  /*!< Тяни толкай, низкий уровень выхода, 2MHz */
     GPIO_Mode_Out_OD_HiZ_Fast  = (uint8_t)0xB0,  /*!< Открытый сток,  плавающий вход, 10MHz */
     GPIO_Mode_Out_PP_High_Fast = (uint8_t)0xF0,  /*!< Тяни толкай, высокий уровень выхода, 10MHz */
     GPIO_Mode_Out_OD_HiZ_Slow  = (uint8_t)0x90,  /*!< Открытый сток,  плавающий вход, 2MHz */
     GPIO_Mode_Out_PP_High_Slow = (uint8_t)0xD0   /*!< Тяни толкай, высокий уровень выхода, 2MHz */
    }GPIO_Mode_TypeDef;

    void GPIO_ExternalPullUpConfig(GPIO_TypeDef* GPIOx, uint8_t GPIO_Pin, FunctionalState NewState); — функция необходима для настойки подтягивающего резистора в режиме ВХОДА. 

    Далее следуют функции необходимые для настройки логического уровня и чтения логического уровня.

    void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t GPIO_PortVal); — запись данных в целый порт

    void GPIO_WriteBit(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, BitAction GPIO_BitVal); — запись выского или низкого уровня  в выбранный Пин (Пины*).

    void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint8_t GPIO_Pin); — настраиваем высокий логический уровень на выбранном Порту и Пине (Пинах*)

    void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint8_t GPIO_Pin); — настраиваем низкий логический уровень на выбранном Порту и Пине (Пинах*)

    void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint8_t GPIO_Pin); — переключаем выбранный порт и пин(пины*) выхода на противоположенное значение.

    *Для того, чтобы выбрать несколько пинов необходима следующая запись:  GPIO_Pin_0|GPIO_Pin_6. Здесь мы выбрали два пина 0 и 6.

    Функции для чтения данных:

    uint8_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); — чтение логического уровня всего порта

    BitStatus GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin); — чтение логического уровня выбранного пина. Если уровень низкий значение функции будет 0, иначе будет отличное значение.

    Спасибо за внимание. Надеюсь, что данный материал будет полезным. К статье прикрепляю файл word c рисунком настройки GPIO.

    Прикрепленные файлы:

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

    Ваш адрес email не будет опубликован.