Семисегментный 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.
Вот и все. Теперь как мне кажется все точно выглядит достаточно просто.
- Робот пылесос Sailing QH8
- РУ модель самолета - Cessna 182
- TFZ KING Exclusive Upgraded — наушники с детальным басом и впечатляющими высокими
- Korean Shin Ramyun - острая корейская лапша быстрого приготовления. Острая. Очень острая...
- Встроенный карман для горячего подключения 3.5" + 2.5" SATA HDD/SSD с парой USB 3.0 портов в придачу
- Бритвенный T-образный станок YINTAL YT9307
- Китайский кошелек из кожи молодой PUмы после года эксплуатации
- Обзор Беспроводной колонки Tronsmart Element T6 Аудиопортатив №2 (подойдёт любителям тёмного звука)
- Bluetooth-колонка Tronsmart element T6 - каким должен быть бас!
- Блютуз-колонка Tronsmart Element T6 - мой №1. Сравнение с 4-мя "конкурентами"