Comments 44
Включение таймеров последовательно — служит для других целей, но ни как не для «синхронизации»
Вот тут сейчас как-то сложно было. Источник тактовой частоты у таймеров конечно в каком-то смысле один, но если вы просто запустите сначала один таймер, а затем другой — то фронты у них разъедутся. И одновременно вы их не запустите, так как запуск двух таймеров требует записи в два разных регистра.
Фронты разъезжаются на китайских осциллографах до 100 тыс. руб., ибо синхронизация там просто убогая.
В описанном мной алгоритме при включении слейва
TIM_Cmd(TIM3, ENABLE);
Если в это время посмотреть на осциллограф не включая мастера на ножке ничего не будет. При включении мастера тактирование пойдет сразу на обе ножки без задержек.
А автор-то молодец, утёр нос профессиональным инженерам))
Автор предлагает для синхронного пуска использовать связку мастер-слейв.
А вы что предлагаете? Я пока увидел только:
1. Забить на пару тактов синхронизации.
2. Сделать старт таймеров по событию.
Так?
синхронизация самого осциллографа идет только по одному каналу, а второй соответственно отстает на собственную задержку осциллографа (обычно на время 1-го преобразования).
Вот тут я не понял. Всегда думал, что преобразования в цифровых осциллографах идут постоянно, независимо от синхронизации. Причем синхронно по всем каналам. А синхронизация просто задает позицию вывода на экран в в кольцевом буфере накопленных значений.
У вас в коде используется SPL? Разве он уже не Deprecated?
Не, тут просто: если производителю стало лень нянчиться со своей же библиотекой периферии, это значит, что для новых МК этой библиотеки не будет вовсе, а на исправление косяков в старой никто не будет тратить время и силы.
Поэтому рекомендуют использовать самое крайнее, что есть. Ну, за исключением HAL (см. выше), его не стоит использовать ни в каком виде, кроме случая "побыстрому написать на коленке за пять минут", потому что для всего остального он отвратителен
Опять же, зависит от целей:
- Если вам надо нарисовать скетч "а-ля ардуино" за минимально возможное время и вам плевать на просадку по производительности/перерасход памяти/неэффективный и порой откровенно ужасный код библиотеки, то берете STM32 HAL
- Если вы полагаете, что эмбеддед — это что-то посерьезнее, чем "мигание лампочкой в цикле", то значит догадываетесь, что почти ни одна библиотека не спасет вас от необходимости изучать нижележащее железо, и лучше всего придумать синонимы для регистровых операций ближе к нативному языку. Это делает STM32 Low Level Library
- Если "проприетарные" поделки для вас — ничто, и подавай только хардкорный опенсорц, не взирая на возможные баги (впрочем они есть везде) — то для вас libopencm3. Upd: был полезен, пока не вышел пункт 2
- Если вы берете великомощный камень (типа STM32F429, STM32F7xx, i.MX RT 1020/1050), и не собираетесь заниматься на нем хард-реалтаймом, то можно взять какую-нибудь RTOS с собственной абстракцией от железа, к примеру NuttX.
Внимание — то, что чип заявлен в поддержке RTOS еще не гарантирует, что там реализовано буквально весь функционал камня, бывают и откровенно смешные недоработки. К примеру для TI Tiva C не было реализовано изменение baudrate для UART в рантайме. Патч занимал 40-50 строк, но пришлось писать и коммитить его в репозиторий)
SPL поддерживается практически для всей линейки, ну разве кроме STM32F7xx
И для некоторых моделей МК, типа 303, SPL «зарыли» достаточно глубоко, и с размаху не видно. Но статус Active присутствует, и вроде как никто отменять не собирается…
Безусловно, ST «соорудили» конвертер SPL в LL. Но, есть один «маленький» затык. Работа с USB только HAL… Да и как то не очень активно народ переползает с SPL на LL, ибо всё равно остаётся какая то часть «ручной» работы. Тогда уж взад на CMSIS. И легче портировать например на TI и ли NXP. ( б-р-р )
Почему фронт сигнала неровный?
P.S. За статью спасибо (плюсов нет у меня).
Сигнал не ровный, потому что цеплял 2 крокодильчика от осциллографа на 1 ножку GND микроконтроллера.
P.S. рад что статья оказалась полезной.
Синхронизация ШИМ на STM32