|
0 / 0 / 0
Регистрация: 08.09.2025
Сообщений: 1
|
||||||
STM реализация мигания светодиодом с разной скоростью через таймер08.09.2025, 15:51. Показов 3454. Ответов 61
Здравсвтвуйте, пытаюсь реализовать мигание светодиодом с разной скоростью через таймер на микроконтроллере STM32F401CDU6, но он мигает только с одной скоростью не меняя её. Написал такой код:
0
|
||||||
| 08.09.2025, 15:51 | |
|
Ответы с готовыми решениями:
61
Мигание светодиодов с разной скоростью и направлением STM 32L1Discovery. Реализовать переключение светодиодов с некоторой частотой ATmega128. Мигание светодиодом через таймер0 |
|
321 / 80 / 5
Регистрация: 19.07.2024
Сообщений: 441
|
|||||
| 08.09.2025, 19:37 | |||||
|
Это что-ль?: Добавлено через 1 минуту ![]()
0
|
|||||
|
60 / 185 / 31
Регистрация: 14.02.2013
Сообщений: 1,669
|
||||||||||||||||
| 10.09.2025, 20:05 | ||||||||||||||||
|
jcxz, неплохо написано.
Только не понятно зачем остаток вычислять? % 3
0
|
||||||||||||||||
|
Windows must die
|
|
| 10.09.2025, 21:23 | |
|
ТС хочет с помощью таймера мигать светодиодом. Зачем здесь вообще прерывания? Элементарно ШИМ гнать, нехай себе мигает. И в процессе можно, меняя ARR и CC1 (или какой канал будет использоваться), управлять частотой и заполнением.
Только код руками писать. И без использования убогих недобиблиотек. Если эту дрянь написали какие-то индусы или китайцы для ST, то это совершенно не значит, что можно этим пользоваться! Хотели бы написать вменяемую HAL-библиотеку, сделали бы это на true inline функциях и макросах. Но все равно код был бы непереносим между разными семействами. А чтобы совсем уж унифицировать, есть лишь один путь - писать на С++'ных шаблонах. И всегда помнить, что аллокаторы использовать запрещено - иначе можно в "ардуину головного мозга" скатиться.
0
|
|
|
|
||
| 10.09.2025, 21:31 | ||
|
Прерывание таймера и вариативный ARR - самый вариант.
0
|
||
|
Windows must die
|
||
| 10.09.2025, 22:26 | ||
|
// А в этом варианте попроще: текст посимвольно загоняется, DMA "пищит" одну букву, а как заканчивает, заполняется буфер для следующей.
0
|
||
|
Windows must die
|
||
| 10.09.2025, 23:18 | ||
|
Жаль, у STM32 очень мало каналов. Ну, хоть в G-серии появился DMAMUX, позволяющий скудные каналы более рационально использовать. Но все равно мало. И таймеры аппаратно не все можно связывать, что тоже плохо. А насчет "тупо помигать светодиодом" с разной скоростью, достаточно SysTick, который обычно является таймером "времени жизни". У меня, например, он отсчитывает миллисекунды. К сожалению, связать с ним другой таймер аппаратно нельзя, поэтому приходится заниматься дурью: каждую миллисекунду в прерывании от SysTick инкрементировать переменную Tms - "время в миллисекундах". Зато в суперлупе можно элементарно завести еще пару-тройку счетчиков и ориентироваться на них. Скажем, зажег светодиод, а через 300мс надо погасить. Просто в каждом проходе суперлупа сравниваешь текущее значение Tms с временем перехода в новое состояние. Многие конечные автоматы у меня именно на Tms и ориентируются (скажем, нужна задержка 15мс - ОК, КА находится в состоянии WAIT_xxx, а как только время ожидания истекает, переходит в следующее состояние).
0
|
||
|
|
|
| 10.09.2025, 23:29 | |
|
Eddy_Em, ну я применительно к задаче автора..
Мигать с разной скоростью - подразумевает изменение частоты, а стало быть, ШИМ тут неуместен. Если не городить банальный огород с переменной задержки в суперлупе, то любой таймер со своим прерыванием и пара строчек кода в while(1) решают проблему полностью. Вряд ли ТС на этой задаче хочет/сможет изучить механизм DMA и/или генерацию ШИМа, да и вообще понять - зачем они.
1
|
|
|
321 / 80 / 5
Регистрация: 19.07.2024
Сообщений: 441
|
||||
| 11.09.2025, 12:44 | ||||
|
В STM32F401 DMA-каналов не так уж много, чтобы их бездумно тратить на всякую ерунду, где они совсем не нужны. Да и таймеров тоже - не бесконечное число. Такую примитивную и медленную вещь как "моргание лампочками" лучше делать на любом периодическом прерывании. Уже существующем прерывании (не создавая новых). А "напрягать МК на посторонние задачи" - вообще смешно! Учитывая, что это самое "напрягание" - вряд-ли даже одну тысячную процента ресурса 84 МГц CPU займёт. Добавлено через 3 минуты Добавлено через 3 минуты Хотя конечно - использовать тут операцию деления - моветон. Учитывая сколько времени она выполняется на ARM. Да ещё в ISR. Лучше заменить на умножение или на обычный условный оператор. Который займёт пару тактов. Но для новичка - простительно. Учитывая, насколько плохо всё остальное написано... PS: Впрочем - иногда некоторые компиляторы сами умеют заменять операции деления на константу, на соответствующую команду умножения.
0
|
||||
|
1182 / 458 / 68
Регистрация: 22.09.2023
Сообщений: 1,388
|
||
| 11.09.2025, 13:55 | ||
|
0
|
||
|
|
|
| 11.09.2025, 14:30 | |
|
Dushevny, речь шла про ШИМ. Он не уместен для такой задачи.
Менять ARR и все, этого хватит. Будут меняться периоды переполнения таймера, а стало быть и частота. Менять при этом CCRx для изменения периода ШИМа - тупо лишняя операция. И только из-за того, что это ШИМ.
0
|
|
|
1182 / 458 / 68
Регистрация: 22.09.2023
Сообщений: 1,388
|
|||
| 11.09.2025, 14:45 | |||
|
1
|
|||
|
|
|
| 11.09.2025, 14:59 | |
|
Dushevny, вместо того, чтобы просто вбить гвоздь молотком - мы берем и закручиваем его пассатижами?
1. Автор вопроса (скорее всего) вообще не знает что такое ШИМ и его физический смысл. 2. Автор же вопроса хочет просто мигать светиком и менять частоту этого мигания. Для этого достаточно одного таймера. 3. Если изменять период ШИМа, что это будет уже практически ЧИМ (ЧМ/FM), т.е. частотная модуляция. А она уже для совсем других вещей предназначена. 4. Автор не говорил что ему надо менять соотношение вкл/выкл при неизменной частоте (Duty). А ШИМ как раз предполагает переменную скважность при постоянной длительности периода. 5. Из п.3-4 следует вопрос: нафига козе баян? Если эта задача решается элементарно. 6. Автор явно начинающий и ему бы нужно начинать понимать с простых основ. Предложить ему ШИМы, DMA и еще что - просто выпендреж.
0
|
|
|
1182 / 458 / 68
Регистрация: 22.09.2023
Сообщений: 1,388
|
||||||||
| 11.09.2025, 15:08 | ||||||||
|
1
|
||||||||
|
|
|
| 11.09.2025, 15:14 | |
|
Dushevny, ну если ваша задача показать как это работает на ШИМе, и чтоб он ничего не понял - то пожалуйста.
По итогу он не поймет как это работает, а так же не научится работать с таймерами руками.. Я не возражаю.
0
|
|
|
1182 / 458 / 68
Регистрация: 22.09.2023
Сообщений: 1,388
|
|
| 11.09.2025, 15:17 | |
|
wizard41, у меня тут задач нет. Это вы с пеной у рта доказывали, что так эту задачу решать нельзя. При этом никакого другого решения не показали.
А я продолжаю ждать более элементарного решения. Просто любопытно.
1
|
|
|
|
|||||||
| 11.09.2025, 15:19 | |||||||
0
|
|||||||
| 11.09.2025, 15:19 | |
|
Помогаю со студенческими работами здесь
20
Мигание светодиодом на PIC. Организация задержки
Мигание светодиода по переполнению счетчика
Мигание светодиодом на ATMega8515 (Proteus) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|