Товары из Китая

Семисегментный LED индикатор, 4 цифры: быстрое подключение


Семисегментный LED индикатор, 4 цифры: быстрое подключение

Когда в проекте появляется небольшая периферия, не хочется сильно погружаться в логику ее работы. Хорошо было бы сделать так: подключил и все работает. В данном случае, речь о 7-сегментном индикаторе из четырех цифр, который нужно было использовать в некоем приборчике с контроллером STM32F103C8T6 на борту.

Быстро конечно не получилось, определенное погружение было. Индикатор выбирал с минимумом интерфейсных цепей, после чего на AliExpress заказал вот такой. Дисплей работает по последовательному интерфейсу по двум цепям: данные DIO и синхронизация CLK. Ну и соответственно ему нужно 5V.

Чтобы не вникать в особенности протокола обмена (как и что на нем зажигается), поискал и готовые исходники программы (драйвера, назовем ее так) для работы с TM1637. Именно этот чип стоит на платке индикатора и делает всю работу.

Дальше сама процедура.

Подключаем DIO и CLK индикатора к любым GPIO выводам STM32: да-да, именно так, никакой UART здесь не нужен. Всю временную последовательность обеспечивают функции драйвера. Подаем на индикатор питание 5V. На этом аппаратное сопряжение завершено.

Теперь, в драйвере ищем строчки

#define CLK_PORT GPIOA

#define DIO_PORT GPIOA
#define CLK_PIN GPIO_PIN_2
#define DIO_PIN GPIO_PIN_3

и прописываем там свои обозначения выводов GPIO, к которым вы подключили индикатор.

В настройках проекта STM32 (я пользуюсь STM32CubeMX) нужно подправить параметры для портов GPIO: пометить порты как выходные, установить подтяжку Pull Up и скорость обмена High. Кроме этого, поскольку инициализация HAL у меня и так идет в основной программе, я сократил функцию инициализации драйвера, которая теперь выглядит так:

void tm1637Init(void)

{
tm1637SetBrightness(8);
}

Кстати, яркостью индикатора тоже можно управлять.

Зажечь цифирки на дисплее достигается вызовом функции

tm1637DisplayDecimal(int v, int displaySeparator)

где v это само собственное число которое будет отображено, displaySeparator — включать или нет двоеточие в середине дисплея.

Если чисел вам мало и нужно индицировать кракозябры, добавляете их в шаблон segmentMap.

Вот и все. Теперь как мне кажется все точно выглядит достаточно просто.


СМОТРИ ТАКЖЕ