-
- Древний уже материал, но не умаляющий заслуг переводчика. Бывает, что очень много буковок, они жутко надоели, да и менять образ мышления на чуждый нет времени. bnb62(219 знак., 14.02.2022 20:02, ссылка, ссылка)
- Не обязательно перезапускать таймер. Просто сбрасывайте
счётчик-переменную в 0, который в прерывании от таймера будет
nCounter++; А в основном цикле уже проверять таймауты. Ну, или
как-нибудь аналогичный вариант. Если хочется обязательно таймер, то
достаточно его вкл/выкл. и счётчик (таймера) устанавливать. - Costic(14.02.2022 14:08)
- Мне надо менять величину интервала, ту что в регистре ARR Правда с
этим то же пока не понятно, вроде бы выбрал режим "сквозная запись
без буфера", а эффекта от записываемого нет, интервал остается
старым. Только если вручную поставлю флаг обновления (TIM_EGR_UG),
тогда работает. - AlexBi(14.02.2022 15:35)
- Буферизацией ARR управляет бит ARPE в регистре CR1. Он точно сброшен? - ЫЫyкпy(14.02.2022 19:16)
- А у меня нормально работает из-под HAL'а, например: Kceния(23 знак., 14.02.2022 18:47)
- Авторы HAL предлагают писать LL_TIM_SetAutoReload(TIM11, число);
Прекрасный пример, демонстрирующий чего стоят все их "абстракции". - ЫЫyкпy(14.02.2022 19:06)
- LL_TIM_SetAutoReload(TIM11, число) делает то же самое, т.к. она inline того же самого выражения. Однако посоветую LL-примитивами пользоваться как можно реже, заменяя их прямыми операциями с регистрами - так можно избежать участи стать рабом HAL'а :) и со временем научиться понимать чужой код, написанный без использования HAL'а. - Kceния(14.02.2022 19:35)
- Авторы HAL предлагают писать LL_TIM_SetAutoReload(TIM11, число);
Прекрасный пример, демонстрирующий чего стоят все их "абстракции". - ЫЫyкпy(14.02.2022 19:06)
- Так и надо. Вообще, таймеры в STM32 это такая штука, на которой можно сделать что угодно. Для освоения этой кухни надо приложить некоторые усилия, но оно того стоит. В помощь - AN4776 - STM32 General-purpose timer cookbook - il-2(14.02.2022 15:58)
- Мне надо менять величину интервала, ту что в регистре ARR Правда с
этим то же пока не понятно, вроде бы выбрал режим "сквозная запись
без буфера", а эффекта от записываемого нет, интервал остается
старым. Только если вручную поставлю флаг обновления (TIM_EGR_UG),
тогда работает. - AlexBi(14.02.2022 15:35)
- Куча каналов с МОДБАСом? Мне предстоит такое делать. Спец по СТМкам
так и посоветовал - " symbions(124 знак., 14.02.2022 14:03)
- Да, что-то похожее на кучу модбасов. Тоже склоняюсь к переходу на
манипуляцию битами, минуя HAL. Только еще не понял что делать с
обработчиками прерываний, как-то полностью заместить обработчик из
HAL-а, или оставить как есть, т.е. писать свою функцию, вызываемую
HALом. Что по этому поводу посоветуют опытные товарищи? - AlexBi(14.02.2022 15:39)
- Почему-то никто не упомянул про callback функции включенные почти
во все HAL обработчики прерываний, которые вам сгенерит Куб, стоит
только заказать нужные прерывания. bnb62(674 знак., 14.02.2022 18:09)
- Эти колбэки есть только на прием нескольких символов и на передачу нескольких символов. Я их назвал "функцией, вызываемой HALом". Надо еще разобраться как оно ошибки приема обрабатывает. И не понятно как организовать одновременные прием и передачу. - AlexBi(14.02.2022 18:36)
- Потому что забыл как называется :) Ну и не отменяет манипуляцию
регистрами - но я тут нуб, тока посматриваю - symbions(14.02.2022 18:17)
- Не прибедняемся и не стесняемся делиться! :) Видно же какого уровня нубы пишут эти библиотеки HAL... Но, бля, вроде работает - поэтому лучше не смотреть на реализацию - жизни может не хватить истолковать код пишущих его индусов. Видишь явный косяк или тормоз - тогда уж можно проверить или заглянуть в их Сообщество. - bnb62(14.02.2022 18:46)
- Даже если попытаться оставить только инициализацию UART, в нагрузку получаешь обработчик прерываний, который просто так на свой не заменить и кучу бесполезных функций. Типичный спагетти-код, одно от другого просто так не оторвать. В конце концов пришел к выводу что написать и отладить свой код будет быстрее чем копаться во всём этом. - ЫЫyкпy(14.02.2022 16:33)
- Для реализации МОДБАС на STM32 не нужно следить по прерыванию UART за приемом байтов и перезапускать каждый раз таймер. Есть более изящный способ: il-2(332 знак., 14.02.2022 16:04)
- Естественно, HAL имеет ограничения, это нужно понять и простить. Что касается конкретного случая... Я бы не лез в биты, а попытался использовать COMPARE или вообще одно частое прерывание свободного таймера. - VLLV(14.02.2022 16:04)
- Почему-то никто не упомянул про callback функции включенные почти
во все HAL обработчики прерываний, которые вам сгенерит Куб, стоит
только заказать нужные прерывания. bnb62(674 знак., 14.02.2022 18:09)
- Да, что-то похожее на кучу модбасов. Тоже склоняюсь к переходу на
манипуляцию битами, минуя HAL. Только еще не понял что делать с
обработчиками прерываний, как-то полностью заместить обработчик из
HAL-а, или оставить как есть, т.е. писать свою функцию, вызываемую
HALом. Что по этому поводу посоветуют опытные товарищи? - AlexBi(14.02.2022 15:39)
- фрэйминг на временных интервалах - хреновая идея. используй byte
stuffing или ещё лучше bit stuffing - cheblin(14.02.2022 13:34)
- У меня нет выбора, нужен фрейминг на временных интервалах. - AlexBi(14.02.2022 15:40)
- А зачем вам считать паузы между байтами? Они могут быть
длительными? - evgeniy1294(14.02.2022 13:15)
- Да, надо обнаруживать достаточно длительные, и при их обнаружении
периодически слать информацию по другим каналам. - AlexBi(14.02.2022 15:41)
- У UART есть флаг IDLE, для модбасов его достаточно. evgeniy1294(40 знак., 14.02.2022 20:14)
- Между прочим, если UART не занимает DMA, то можно по приёму байтов
заставить DMA обнулять таймер, например. Обнаружение пауз без
вмешательства CPU. - SciFi(14.02.2022 18:05)
- Мне бы чего по проще, для начала. Надеюсь что будет достаточно сравнительно простых вариантов. - AlexBi(14.02.2022 18:37)
- Не обязательно запускать спец таймеры. У нас же есть Систик таймер, например с дефолтным шагом 1 мс. В его обработчике инкрементируете сколько угодно ваших переменных - счетчиков. Проверяете их, ветвитесь, или обнуляете в ваших нужных местах. Но лучше опять же это делать в коллбэке Систика. - bnb62(14.02.2022 18:00)
- Да, надо обнаруживать достаточно длительные, и при их обнаружении
периодически слать информацию по другим каналам. - AlexBi(14.02.2022 15:41)