-=az=- 0 18 января, 2017 Опубликовано 18 января, 2017 · Жалоба Коллеги, может кто сталкивался. Пример: 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 4 18 января, 2017 Опубликовано 18 января, 2017 · Жалоба 1. Включаем RTC от LSE 2. Прошиваем. 3. Не снимая питания убираем строчку в коде включения RTC от LSE. 4. Прошиваем. Из вашего описания я ничего не понял. У вас есть микроконтроллер с пустой флешкой. Каким-то образом вы включаете в нем RTC. Потом что-то в него заливаете. Теперь немного меняете исходники. Снова что-то заливаете в контроллер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=az=- 0 18 января, 2017 Опубликовано 18 января, 2017 · Жалоба Из вашего описания я ничего не понял. У вас есть микроконтроллер с пустой флешкой. Каким-то образом вы включаете в нем 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 2 19 января, 2017 Опубликовано 19 января, 2017 · Жалоба Где может быть разгадка ? Сразу оговорюсь, что на STM8 не приходилось поднимать LSE, работал с теми процами, где LSE нет. Но не понимаю, что Вас смутило в описании ситуации. Вы запустили LSE. Теперь он должен работать, пока Вы его принудительно не выключите или пока не исчезнет питание (включая батарейку). Иначе получилось бы, что часы останавливались по каждому ресету. А когда Вы выключаете питание (а батарейки видимо нет), то генератор благополучно останавливается. При каждом старте надо проверять, работает ли генератор. Если уже работает - укороченная процедура инициализации часов. А если стоит, то пытаемся запустить, ждём готовности, и только потом продолжаем инициализацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 4 19 января, 2017 Опубликовано 19 января, 2017 · Жалоба Читаем 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=- 0 19 января, 2017 Опубликовано 19 января, 2017 · Жалоба Да, но при сбросе все регистры 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 но по факту он работает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться