Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM8 не отключается LSE
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > STM8
-AZ-
Коллеги, может кто сталкивался.
Пример:
1. Включаем RTC от LSE
2. Прошиваем.
3. Не снимая питания убираем строчку в коде включения RTC от LSE.
4. Прошиваем.

И чудо LSE работает!!!!!!!!
При этом CLK_ECKR_LSEON = 0, а CLK_ECKR_LSERDY = 1 !!!

И сколько не сбрасывай контроллер все равно. работает.

Как только передернешь питание все встает на свои места, как и положено CLK_ECKR_LSEON = 0, а CLK_ECKR_LSERDY = 0 и LSE не работает.

Где может быть разгадка ?
uriy
Цитата
1. Включаем RTC от LSE
2. Прошиваем.
3. Не снимая питания убираем строчку в коде включения RTC от LSE.
4. Прошиваем.

Из вашего описания я ничего не понял.
У вас есть микроконтроллер с пустой флешкой. Каким-то образом вы включаете в нем RTC. Потом что-то в него заливаете.
Теперь немного меняете исходники. Снова что-то заливаете в контроллер.
-AZ-
Цитата(uriy @ Jan 18 2017, 21:26) *
Из вашего описания я ничего не понял.
У вас есть микроконтроллер с пустой флешкой. Каким-то образом вы включаете в нем RTC. Потом что-то в него заливаете.
Теперь немного меняете исходники. Снова что-то заливаете в контроллер.


Имеем:
IAR, ST-LINK, STM8L-DISK....
Минимальный код:
CLK_LSEConfig(CLK_LSE_ON);
while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);
CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);
.... инициализация RTC или LCD не важно( CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE); )

Далее убираю:
CLK_LSEConfig(CLK_LSE_ON);
while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);
CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);

Снова заливаю...


amiller
Цитата(phenixs @ Jan 18 2017, 17:57) *
Где может быть разгадка ?

Сразу оговорюсь, что на STM8 не приходилось поднимать LSE, работал с теми процами, где LSE нет.
Но не понимаю, что Вас смутило в описании ситуации.
Вы запустили LSE. Теперь он должен работать, пока Вы его принудительно не выключите или пока не исчезнет питание (включая батарейку).
Иначе получилось бы, что часы останавливались по каждому ресету.
А когда Вы выключаете питание (а батарейки видимо нет), то генератор благополучно останавливается.
При каждом старте надо проверять, работает ли генератор. Если уже работает - укороченная процедура инициализации часов.
А если стоит, то пытаемся запустить, ждём готовности, и только потом продолжаем инициализацию.
uriy
Читаем ref man например на STM8L151 (RM0031) страница 92
The LSE crystal is switched on and off using the LSEON bit in the external clock register
(CLK_ECKCR). It is also automatically switched on when it is selected as RTC, CCO, Beep
or system clock source.

Ваш случай?
Ни и как сказал amiller здравый смысл подсказыает что так и должно быть.
-AZ-
Да, но при сбросе все регистры STM устанавливаются в дефолт, т.е. LSE и вся периферия отключены...
Так почему должны работать LCD или RTC ?

-The LSE crystal is switched on and off using the LSEON bit in the external clock register
(CLK_ECKCR). It is also automatically switched on when it is selected as RTC, CCO, Beep
or system clock source.
Это как раз не тот случай т.к. - CLK_ECKR_LSEON = 0, а CLK_ECKR_LSERDY = 1 !!!
Т.е. регистр показывает что LSE OFF но по факту он работает...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.