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 и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.