Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: stm32 WWDG.IWDG настройка таймеров.

Пт мар 04, 2022 06:46:45

А Вам запрещают использовать прерывания на своё усмотрение?
У меня сейчас имеется прототип детектора сигнала, в котором прерывания используются достаточно активно. Ну как активно...
1. Стандартный SysTick для счётчика милисекунд (отмеряет время для основного цикла, увеличивает volatile переменные, хранящие пару флагов типа "Тут милисекунда таки тикнула", "Тикнула секунда", и собственно счётчики милисекунд), там же опрос кнопки выключения. Прибор позволяет его просто обесточить. =]
2. Прерывание DMA, которое запрашивает новую порцию данных для SPI модуля, который отправляет поток битов на управляемые светодиоды (WS2812, точнее их аналог в компактном корпусе).
3. Прерывание другого канала DMA, которое завершает выборку сэмплов от АЦП, которые дальше отправляются на обработку в функцию БПФ для определения наличия/отсутствия тона от генератора.

Так что, сон контроллеру в принципе разрешён.

Re: stm32 WWDG.IWDG настройка таймеров.

Вс мар 06, 2022 23:20:28

У меня маленькая проблемка.При включении контроллера немного и иногда подвесает он.На LCD ничего не показывает.Конечно сразу срабатывает вач дог.Но мне кажется нужно ещё аппаратно решать.Что вы можете посоветовать?

Re: stm32 WWDG.IWDG настройка таймеров.

Пн мар 07, 2022 14:09:05

Аппаратно решать - это правильно.
Не инициализируется экран и зависает контроллер на старте - разные вещи.
К тому же, если контроллер зависает, то почему идёт перезагрузка по часам? Контроллер должен их настроить для того, чтобы они сработали.

У себя я стараюсь придерживаться такого алгоритма работы:
1. После включения максимально быстро настраиваем порты ввода-вывода в ожидаемое состояние.
Например, последовательные шины - в неактивное состояние - I2C в IDLE, SPI - поднять все пины, являющиеся выбором ведомого (ведомых) в "1", паралельные - в "0x00" с поднятыми в "1" пинами /WE /RE /RS, и так далее. Обычно это занимает достаточно мало времени.
2. Настроить внутренний тактовый генератор на нужную частоту. HSE ON -> PLL ON -> Core
3. После переключения на нужную частоту - инициализировать остальную периферию - сами модули I2C/SPI/UART и так далее.
4. Инициализировать устройства на шинах, предварительно выполнив их сброс (если есть пин /RESET).
5. Выйти в основной цикл.

Плюс, аппаратная особенность конкретно STM32 - достаточно слабая внутрення подтяжка пина сброса. Бывали случаи, когда контроллер сбрасывался неожиданно от наводки на этот пин (точнее, на линию, идущую на этот пин). Помогло добавление резистора в 1кОм между пином сброса и пином питания. На внутренний сброс и внешний резистор не влияет, но делает работу чипа стабильнее в некоторых случаях.

В остальном - стандартные советы - по возможности короткие провода, экранирование, если есть такая возможность, изоляция от частей схемы, где возможны всплески тока.

Re: stm32 WWDG.IWDG настройка таймеров.

Пн мар 07, 2022 14:58:35

Но второй пункт это внешний генератор.Вы имеете ввиду при включении использовать внутренний генератор при запуске а потом переключится на HSE ON -> PLL ON -> Core .

Re: stm32 WWDG.IWDG настройка таймеров.

Вт мар 08, 2022 14:03:59

Но второй пункт это внешний генератор.Вы имеете ввиду при включении использовать внутренний генератор при запуске а потом переключится на HSE ON -> PLL ON -> Core .

Я привожу пример того, как код работает у меня. Чип в любом случае стартует на внутреннем генераторе, а затем можно включить внешний, подключить с него PLL, и тактироваться от него.
Можно подавать внутренний генератор на вход PLL.
Это всё по вкусу, как приправы в кулинарии.
Ответить