Это видео недоступно.
Сожалеем об этом.
Подключение кнопок к микроконтроллеру STM32: устранение дребезга, автоповтор, буферизованный ввод
HTML-код
- Опубликовано: 27 май 2022
- В этом видео расскажу о том, как грамотно подключить кнопки к микроконтроллеру STM32. Привожу свой модуль работы с кнопками. Возможности модуля:
- Поддержка до 32 кнопок, с учетом того, что на 1 кнопку выделяется 1 вывод микроконтроллера, настроенный на вход с подтяжкой по питанию.
- Доступна настройка фильтра устранения дребезга.
- Доступен буфер состояний кнопок с настраиваемой глубиной.
- Доступна настройка периодов задержки до первого автоповтора нажатия кнопок и последующих автоповторов.
- Доступно добавление кнопок для опроса посредством вызова соответствующей функции.
- Доступна установка статусов кнопки: "активна" - участвует в опросе, "пассивна" - не участвует в опросе.
- Доступен опрос статуса кнопки (активна либо пассивна).
Выводы микроконтроллера, к которым подключаются кнопки должны быть настроены, как входы с подтяжкой по питанию. Как вариант, с использованием внутренней подтяжки микроконтроллера pull-up, либо внешней через подтягивающий резистор, например, номиналом 10 кОм.
При нажатии кнопки должна осуществляется притяжка входа микроконтроллера к "земле" (GND).
Для работы модуля требуется 1 таймер с настроенным прерыванием по обновлению.
Путем несложной модификации модуль возможно использовать на любых микроконтроллерах, отвечающих минимальным требованиям.
Скачать проект из видео можно по ссылке:
github.com/vad...
Поддержать канал:
donate.qiwi.co...
yoomoney.ru/to...
Покупал на Алиэкспресс:
программатор ST-Link alii.pub/6fdujg
плата разработки stm32f401ccu6 alii.pub/6fdumy
плата разработки stm32f411ceu6 alii.pub/6fduop
аудио-ЦАП pcm5102a alii.pub/6fdurf
макетная плата alii.pub/6fduuq
провода для макетной платы alii.pub/6fduwo
3.2" дисплей с тачскрином ILI9341 spi alii.pub/6fdvcf
1.3" дисплей ST7789 spi alii.pub/6fdvks
модуль микро SD карты alii.pub/6fdvoh
#stm32
#buttons
#программирование
Проект из видео на гитхабе: github.com/vadrov/stm32-button-nobounce-autorepeat-buffer
Подключение дисплея st7789 по spi c dma на CMSIS и LL рассмотрено в видео ruclips.net/video/8tIJ16riJqo/видео.html
Подключение SD-карты по spi с dma на CMSIS и LL рассмотрено в видео ruclips.net/video/z99bLhlnukM/видео.html
Подключение кнопок на таймере с прерыванием на CMSIS и LL с устранением дребезга, автоповтором и буферов ввода (прямо как на PC 😉) рассмотрено в видео ruclips.net/video/e-w5HS75neg/видео.html
Файловый менеджер (структура и код) рассмотрен в видео ruclips.net/video/4c_PwnasQvs/видео.html
Подключение аудио-цап (audio dac) по интерфейсу i2s на CMSIS и LL рассмотрено в видео ruclips.net/video/p0IhX-XiiiQ/видео.html
К каждому из перечисленных видео есть ссылка в описании на проект для скачивания.
Поддержать канал:
donate.qiwi.com/payin/VadRov
yoomoney.ru/to/4100117522443917
Покупал на Алиэкспресс:
программатор ST-Link alii.pub/6fdujg
плата разработки stm32f401ccu6 alii.pub/6fdumy
плата разработки stm32f411ceu6 alii.pub/6fduop
аудио-ЦАП pcm5102a alii.pub/6fdurf
макетная плата alii.pub/6fduuq
провода для макетной платы alii.pub/6fduwo
3.2" дисплей с тачскрином ILI9341 spi alii.pub/6fdvcf
1.3" дисплей ST7789 spi alii.pub/6fdvks
модуль микро SD карты alii.pub/6fdvoh
Крепко вы прошлись по демонстрации возможностей работы с этим мк...! ;)
Спасибо!
Дребезг кнопок устраняется аппаратно. Пикушкой 220-680 пф на порту мк и резистором 10 ом, между портом и кнопкой. Экономия кода 100%. 👍
Не уверен, что это решение обеспечивает 100% гарантию подавления дребезга. Все немного сложнее в аппаратном плане. Ну, и, если обратили внимание, тут не просто подавление дребезга, но и буферизация ввода, что позволяет, например, обрабатывать очередь событий. 🙂
@@VadRov Этот метод прверен десятилетиями. Его в пособиях по программированию МК не раз публиковали. Я даже счётчик нажатий собирал для проверки. Из пару сотен нажатий ни одно сбоя.
Класс виде подписка и лайкосик
Спасибо 👍👍👍👍
Спасибо, очень достойный алгоритм! Позволю себе пару предложений к усовершенствованию. Иногда на одну физическую кнопку целесообразно вешать две функции. Одна срабатывает при коротком одиночном нажатии по отжатию кнопки (как пример кнопки мышки). Вторая функция - при длительном удержании кнопки. Этот алгоритм позволяет упростить конечное устройство.
Не давно обнаружил в телике кнопку для управления, до этого только пультом пользовались не было необходимости . Карл 1 кнопка на весь телик. Кнопка которая не фига не джойстик, хоть в другом телике джойстик под кнопку замаскирован, но джойстик, который по факту 4-5 кнопок Переключение каналов, звук больше меньше, меню и настройка осуществляется 1короткое ВВЕРХ 2коротких ВНИЗ 1длинный ВЫБОР. При необходимости можно еще всякий функционал навешать разных комбинаций нажатий.
Долго такая кнопка не проживет 🙂 1короткое ВВЕРХ 2коротких ВНИЗ 1длинный ВЫБОР... И так в течение месяца. А на следующий месяц кнопку перепаивать. 🙂Оптимально, думаю, для любого устройства 5 кнопок либо джойстик, либо энкодер. А так, конечно, проблем не вижу навесить на одну кнопку 100 функций. И "букварь" к этой кнопке в придачу с последовательностью "коротких и длинных". С точки зрения сервисных функций, кстати, такая 1 кнопка хороший вариант, но на повседнев - тоска. 🙂
@@VadRov На повседнев пульт 😁. А так как идея для самоделок сгодится. Если не часто нужно что-то включать. Разрабы для блекпил вкарячили - и не зря периодически пользую , правда без двойных и всяких остальных нажатий . Кстати у мышки Левая кнопка годами работает одинарными и двойными кликами , а то и тройными - если нужна сверхнадежная кнопка. А уж если начала косячить меняют местами правую и левую кнопки . Пацанам в кружке ,когда приобщал школту к МК через Ардуино, дал поизголятся они текст набирали при помощи 1 кнопки и переменного резистора. 😁
Stm32f401 прога не ругается на не подлиность клонов с Алишки и как у Вас все функции заявленные по даташнику работают?
Не ругается. Все функции (периферия, вводы/выводы, NVIC, DMA, таймеры и пр.) работают, в т.ч. совместно. С виду чип, вроде, оригинальный. Заказал 411, протестил, тоже все работает. Признаков "левой " маркировки/перемаркировки не замечено. Я даже 401 чип разгонял до 130 МГц, по-моему, все работало)) В сети видел с Алишки перемаркер, но там откровенно все видно (спил/шлифовку и пр.). Кстати, 411 хорошо шьется, в т.ч. по USB, а 401 - через раз по USB и без проблем по ST-Link.
@@VadRov спасибо, понял)
Что делать с шумами на пине во время спада или нарастания импульса ?
Именно эти шумы генерять сотни прерываний а не дребзг кнопки.
Если Вы смотрели видео, то должны были обратить внимание, что я в этом проекте вообще не использую внешних прерываний. Здесь используются только прерывание от одного таймера, которое обслуживает до 32 кнопок. Основа работы фильтра - постоянство сигнала на некотором участке времени, за который гарантированно затухают переходные процессы и который, естественно, больше длительности этих переходных процессов. Если Вы используете внешние прерывания (exti) в своем проекте, то Вы должны позаботиться об управлении их включением и выключением, чтобы не генерировались "сотни прерываний". Как это сделать, можно посмотреть, например, в моем проекте о подключении дисплея с тачскрином, в котором касание экрана отрабатывается по внешнему прерыванию по спадающему фронту. Там как раз и решается проблема возможности "сотни прерываний", которая может возникнуть как при касании, так и при отпускании сенсора дисплея: ruclips.net/video/iDFTmKkWJF4/видео.html Если Вы внимательно посмотрите видео и почитаете комментарии к проекту, который доступен на гитхабе (по ссылке к описанию видео), то поймете как решить проблему "сотен прерываний".
Только не 5 вольт ,а до 3.3в.
Если имелся ввиду момент в видео на 3:21, то, да, применительно к stm32 включение встроенной подтяжки входа к питанию дает до 3.3 В (ограничено напряжением питания м/к) на нем.
@@VadRov посоветуйте пожалуйста литературу по STM32.
@@user-rf1yx4kp4r , лично я знакомлюсь в основном только с официальными источниками, т.е. материалами на сайтах компаний STMicroelectronics и ARM. Этих данных, в принципе, достаточно для человека, имеющего некоторый базовый минимум в программировании и электронике.
Микроконтроллеры лучше изучать по мануалу (Reference Manuals) от производителя, т.е. ST.