Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32L151 MSI переключение частот
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
MiklPolikov
Делюсь наблюдениями :

Изменять частоту генератора MSI надо так
Код
int RCC_ICSCR_MASK;

RCC_ICSCR_MASK=RCC->ICSCR;
RCC_ICSCR_MASK&=~RCC_ICSCR_MSIRANGE;
RCC_ICSCR_MASK|=RCC_ICSCR_MSIRANGE_64KHz;
RCC->ICSCR=RCC_ICSCR_MASK;


Т.е сначала копировать весь регистр в переменную, изменять биты в переменной, и потом копировать обратно.

Если менять биты прямо в регистре , даже если при этом недопустимых комбинаций битов не образуется, и даже если в это время
от MSI ничего не тактируется, возникают удивительные глюки :
У меня , при выполении условия : вышли из спящего режима + изменили частоту MSI глохнет генератор LSE !
Причём глохнет он на строчке
RCC->ICSCR|=RCC_ICSCR_MSIRANGE_64KHz; // RCC_ICSCR_MSIRANGE_64KHz==0 !

C битами SW в CFGR наблюдаю в точности такую же ситуацию. Если после выхода из спячки переключать
биты в самом регистре RCC_CFGR то LSE глохнет, бит LSERDY сбрасывается.

Очень долго и мучительно отлавливал глюк : у меня программа всё время переключает частоты и входит/выходит из спящего режима.
KnightIgor
Чисто формальный подход - результат достигается за две операции: сначала сброс (группы) битов, затем установка части из них. При операции непосредственно над регистром он примет некое промежуточное состояние сразу после & и прежде, чем будут установлены требуемые биты операцией |. Возникает предположение, что аппаратуре не нравятся сброшенные биты. Когда же операция производится с привлечением временной переменной, сам регистр "мгновенно" меняет биты на "правильные", без промежуточного состояния. Вывод: видимо, есть-таки некая "недопустимая комбинация битов".
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.