RSS блога
Подписка
Семисегментный LED индикатор, 4 цифры: быстрое подключение
Когда в проекте появляется небольшая периферия, не хочется сильно погружаться в логику ее работы. Хорошо было бы сделать так: подключил и все работает. В данном случае, речь о 7-сегментном индикаторе из четырех цифр, который нужно было использовать в некоем приборчике с контроллером STM32F103C8T6 на борту.
Быстро конечно не получилось, определенное погружение было. Индикатор выбирал с минимумом интерфейсных цепей, после чего на AliExpress заказал вот такой. Дисплей работает по последовательному интерфейсу по двум цепям: данные DIO и синхронизация CLK. Ну и соответственно ему нужно 5V.
Чтобы не вникать в особенности протокола обмена (как и что на нем зажигается), поискал и готовые исходники программы (драйвера, назовем ее так) для работы с TM1637. Именно этот чип стоит на платке индикатора и делает всю работу.
Дальше сама процедура.
Подключаем DIO и CLK индикатора к любым GPIO выводам STM32: да-да, именно так, никакой UART здесь не нужен. Всю временную последовательность обеспечивают функции драйвера. Подаем на индикатор питание 5V. На этом аппаратное сопряжение завершено.
Теперь, в драйвере ищем строчки
и прописываем там свои обозначения выводов GPIO, к которым вы подключили индикатор.
В настройках проекта STM32 (я пользуюсь STM32CubeMX) нужно подправить параметры для портов GPIO: пометить порты как выходные, установить подтяжку Pull Up и скорость обмена High. Кроме этого, поскольку инициализация HAL у меня и так идет в основной программе, я сократил функцию инициализации драйвера, которая теперь выглядит так:
Кстати, яркостью индикатора тоже можно управлять.
Зажечь цифирки на дисплее достигается вызовом функции
где v это само собственное число которое будет отображено, displaySeparator — включать или нет двоеточие в середине дисплея.
Если чисел вам мало и нужно индицировать кракозябры, добавляете их в шаблон segmentMap.
Вот и все. Теперь как мне кажется все точно выглядит достаточно просто.
Быстро конечно не получилось, определенное погружение было. Индикатор выбирал с минимумом интерфейсных цепей, после чего на 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.
Вот и все. Теперь как мне кажется все точно выглядит достаточно просто.
Самые обсуждаемые обзоры
+124 |
2289
75
|
Посмотрел Ваши обзоры, сорри…
Sorry men…
Антенну Герц придумал, транзисторы покупные, кабели тоже, Линух заимствованный, программы все опенсорс, обработка из научных журналов, RF тракт — схемы передрал, ну и пусть что они типовые, так что локатор не ваш, товарищ )
Уровень посетителей конечно впечатляет, хотя чего не сделаешь в погоне за кармой )
Вы вроде бы в DIY пишете, а ничего не показываете
Обычный LED, еще и в связке с STM32, без фоток, нормального описания и т.д.
Для кого и зачем !?
P.S. Краткость не всегда сестра таланта
Влепил статье минус.
Поехали:
Предмет обзора:
С обратной стороны, покрупнее:
Для тех, кто будет делать свои самоделки.
Библиотека с экзамплами: github.com/avishorp/TM1637
Предмет обзора на видео выглядит так:
Для дальнейшего самостоятельного погружения в тему, можно посоветовать раз, два и т.д.
Возможно, после покупки индикатора на AliExpress я подробно описал бы, как извлекал его из коробки, как снимал пленочку, только статья не об этом. Она для тех, кому нужно быстро подключить дисплей к контроллеру и не тратить время на поиск информации в сети.
Указанная вами ссылка — для Arduino. Есть понимание разницы между Arduino и STM32?
Мои комментарии и обзоры совершенно определённо об этом свидетельствуют. Вы же глянули, прежде чем задать этот вопрос? :-)
По обзорам, кстати, можете оценить моё понимание термина «наполненность статьи», это я про фото упаковки, трек посылки, распаковки и обёрточную бумагу…
PS. Зачем мне публиковать ссылку на библиотеку STM32, если вы её уже дали? Я привёл ссылку на то, что, скорее всего, спросят читатели, зашедшие под кат…
Доллары по 100 не берите, они через пару месяцев снизятся.
Пугачёва не прощается со сценой. у неё ещё будут концерты.
А, главное,: если вы планируете в следующем, 2019-м, съездить в Китай, не ешьте там сырых летучих мышей!
+++
Нашёл, почти все ноги у STM32 толерантны к 5 вольтам.
Serial interface — 3.3В, с STM32 сопрягается нормально.
Кстати нет спецификации на STM32, это обобщенное название семейства чипов
а вот автор топика ну прям очень вовремя упоминает о возможности использовать свои символы;)
Att: не будет топика — не будет коммента, так что голосуйте
сердцемразумно;))