STM32F4. Урок 4 - цифрові входи

Данная библиотека используется для считывания данных с цифровых выводов микроконтроллера. Используемые выводы должны быть объявлены в «stm32_ub_dig_in.h» и присвоены соответствующие значения в файле «stm32_ub_dig_in.c». Для каждого входа можно так же включить подтягивающее сопротивление (три режима: отсутствует, подтяжка «вверх», подтяжка «вниз»).

Начиная с библиотеки версии 1.2 в «stm32_ub_dig_in.h» можно включить защиту от дребезга контактов, использующую таймер. Тогда станут доступны функции "OnHiLevel", "OnHiEdge" и "OnLoEdge". Эти функции возвращают "true", когда происходит событие.

В примере используется 4 вывода: PD3, PD6, PD11, PE4.

Требования:

  • Подключаемые модули CooCox-IDE : GPIO (TIM, MISC)
  • Поддерживаемые библиотеки: отсутствуют.

Перечисления:

typedef enum 
{
  DIN_PD3 = 0,    // PD3-Pin
  DIN_PD6 = 1,    // PD6-Pin
  DIN_PD11 = 2,   // PD11-Pin
  DIN_PE4 = 3     // PE4-Pin
}DIN_NAME_t;

Функции:

void UB_DigIn_Init(void);                    // Инициализация выводов цифровых входов
BitAction UB_DigIn_Read(DIN_NAME_t dig_pin); // считать уровень на входе (без защиты от дребезга)
bool UB_DigIn_OnHiLevel(DIN_NAME_t dig_pin); // true, если установлен высокий уровень (с защитой от дребезга)
bool UB_DigIn_OnHiEdge(DIN_NAME_t dig_pin);  // true, если появился высокий уровень по фронту (с защитой от дребезга)
bool UB_DigIn_OnLoEdge(DIN_NAME_t dig_pin);  // true, если появился низкий уровень по фронту (с защитой от дребезга)

Пример использования:

//--------------------------------------------------------------
// File     : main.c
// Datum    : 16.02.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Function : Demo of Button Library
// Reference: These two files must be written to 8MHz
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------

#include "main.h"
#include "stm32_ub_dig_in.h"
#include "stm32_ub_dig_out.h"

int main(void)
{
  BitAction wert;

  SystemInit(); // Инициализация настроек кварца

  UB_DigIn_Init();  // Инициализация цифровых входов
  UB_DigOut_Init(); // Инициализация цифровых выходов

  while(1)
  {
	// Зачитать уровень на входе PD3 и установить полученное значение на выходе PB2
    wert=UB_DigIn_Read(DIN_PD3);
    UB_DigOut_Pin(DOUT_PB2,wert);
	// Зачитать уровень на входе PD6 и установить полученное значение на выходе PB7
    wert=UB_DigIn_Read(DIN_PD6);
    UB_DigOut_Pin(DOUT_PB7,wert);
	// Зачитать уровень на входе PD3 и установить полученное значение на выходе PC6
    wert=UB_DigIn_Read(DIN_PD11);
    UB_DigOut_Pin(DOUT_PC6,wert);
	// Зачитать уровень на входе PE4 и установить полученное значение на выходе PC13
    wert=UB_DigIn_Read(DIN_PE4);
    UB_DigOut_Pin(DOUT_PC13,wert);
  }
}

Режим работы:

  • GPIO-выводы PB2, PB7, PC6 и PC13 настраиваются как цифровые выходы (в библиотеке);
  • GPIO-выводы PD3, PD6, PD11 и PE4 настраиваются как цифровые входы (в библиотеке);
  • на входах считывается уровень сигнала, и полученные данные устанавливаются на выходах.

Библиотека, использованная в примере: stm32_ub_dig_out, stm32_ub_dig_in.

В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.

Оригинал статьи

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

Top