Энкодер на STM32 (arduino, platformio)

Использование энкодера вместе с STM32 с прерываниями.

Код лежит тут https://ideone.com/9oMlVS (сильно не пинайте, в первые использую подобный сервис).

Кусочек в прерываниях где-то увидел, не могу вспомнить где, но он сюда подошел.

Готовых решений в интернете не нашел, а из готовых библиотек ни одна не заработала как я хотел.

Оформлять в библиотеку не стал, просто есть как есть.

Arduino & Pi

1.4K постов20.6K подписчик

Добавить пост

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

2
Автор поста оценил этот комментарий
У stm32 в General таймерах есть функция опроса энкодера. Причем он даже направление вращения выдает. Все это есть в Reference Manual, плюс вагон примеров в сети.
раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Спасибо за наводку! Пугает то, что большинство примеров на HAL STMCube и прочее, в них я ещё не разобрался, а тут атмеги стало мало и пришлось быстро решать
показать ответы
1
Автор поста оценил этот комментарий

Начинал с ассемблера на Z80, т.е. немного есть представление о низкоуровневом программировании. Сейчас изредка что-то пишу на stm32 на Си без всяких обёрток, напрямую.
Однако  HAL  мне вполне нравится для своих задач. Визуально можно посмотреть тактирование, задать альтернативные пины и вообще быстро накидать и что то проверить.
Да там очень много избыточного кода и тд, но всему своё применение. Считаю что нужно осваивать все подходы.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Я, пока, только больше запутываюсь, но, дорогу осилит идущий! Мне ассемблер не подошёл, я его логику не понимаю, регистры, стеки, и прочее...
показать ответы
1
Автор поста оценил этот комментарий

Так велосипед же изобретает человек вместо существующих либ, само собой и решения будут костылями. И да, я не против велосипедов в образовательных целях ни в коем случае.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

В посте писал, что существующие длибы не подошли/не удовлетворили. Принял решение такое-же, как делал на AVR микроконтроллерах.

2
Автор поста оценил этот комментарий

stm32duino и сделано на HAL и CMSIS. Пример очень не удачный вышел. Лучше сделать через групповое прерывание EXTI9_5_IRQ или EXTI10_15_IRQ, а не два раздельных. Оно то конечно может и работает в таком виде, но в проектах посложнее будут проблемы. Смотреть тут - https://github.com/stm32duino/Arduino_Core_STM32/blob/master...

раскрыть ветку (1)
Автор поста оценил этот комментарий
Спасибо! На будущее учту
4
Автор поста оценил этот комментарий
Очень советую никогда не использовать HAL и подобные либы. Вот тут неплохое описание дано https://hubstub.ru/stm32/68-kak-podklyuchit-enkoder-k-stm32.... Можно еще запустить прерывания такймера и делать обработку события в прерывании.
раскрыть ветку (1)
Автор поста оценил этот комментарий
Спасибо! Ознакомлюсь!
раскрыть ветку (1)
Автор поста оценил этот комментарий
Да, спасибо! Нашёл уже, смотрю
6
Автор поста оценил этот комментарий

а чего на таймере не сделал?
там же только заинитить да считывать готовое значение когда надо, всё аппаратно если правильно помню. в даташите целый раздел про энкодер

Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий

STM пока только начал раскуривать. То, о чем вы пишете - не нашел в даташите к F103C8T6, может быть это из какого-то AN.

показать ответы