Baser 5 4 апреля, 2017 Опубликовано 4 апреля, 2017 · Жалоба Есть устройство на STM32F072. Домен RTC запитывается от мелкой батарейки. Нужно при пропадании основного питания запоминать время выключения. А обработка этого времени производится уже после включения. Поскольку в RTC есть встроенные регистры TimeStamp, думал применить их для хранения времени выключения. Читаю документацию, и не могу найти, можно ли активировать запись времени в TimeStamp программно. Все натыкаюсь на аппаратные события по ножкам МК Можно это сделать программно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 5 апреля, 2017 Опубликовано 5 апреля, 2017 · Жалоба Чисто программно, похоже, нет. А вот поиграться с PullUp\PullDown на PC13, как входе RTC_TS, программно-аппаратный вариант, я думаю даст желаемое. Единственно: п 8.3.14 "The PC13/PC14/PC15 GPIO functionality is lost when the core supply domain is powered off (when the device enters Standby mode). In this case, if their GPIO configuration is not bypassed by the RTC configuration, these pins are set in an analog input mode." Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 64 5 апреля, 2017 Опубликовано 5 апреля, 2017 · Жалоба Читаю документацию, и не могу найти, можно ли активировать запись времени в TimeStamp программно. Все натыкаюсь на аппаратные события по ножкам МК Можно это сделать программно? "If a time-stamp event occurs immediately after the TSF bit is supposed to be cleared, then both TSF and TSOVF bits are set." Попробовать выставить вручную TSF and TSOVF, а потом TSF очистить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 5 апреля, 2017 Опубликовано 5 апреля, 2017 · Жалоба "If a time-stamp event occurs immediately after the TSF bit is supposed to be cleared, then both TSF and TSOVF bits are set." Попробовать выставить вручную TSF and TSOVF, а потом TSF очистить. Как-то тут не вижу никакой связи с генерацией события time-stamp. Тем более, что оба бита TSF and TSOVF - аппаратно взводимые и выставить вручную их не удастся. поиграться с PullUp\PullDown на PC13, как входе RTC_TS, программно-аппаратный вариант, я думаю даст желаемое. Я тоже пока других вариантов не увидел. Ножка PC13 свободная, нужно попробовать. А то, что "PC13 GPIO functionality is lost when the core supply domain is powered off", так не вижу проблем. Я же в sleep не ухожу, у меня основное питание совсем снимается, до нуля. И мне сгенерировать time-stamp event нужно в прерывании по снижению питания. Я могу и просто прочитать часы и сохранить их в backup-регистрах, да ST пожлобилась и их в этом МК только 5 штук. А вдруг они для чего другого понадобятся - а спец. регистры time-stamp при этом будут простаивать... Не классненько, как-то :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 13 апреля, 2017 Опубликовано 13 апреля, 2017 · Жалоба Добрался до проверки на реальном железе. Тезис "поиграться с PullUp\PullDown на PC13, как входе RTC_TS" не проходит. Как только взводится бит TSE в RTC_CR, управление PC13 забирается модулем RTC и ножка ни на какие действия по конфигурации её как GPIO, не реагирует: For the additional functions like RTC, WKUPx and oscillators, configure the required function in the related RTC, PWR and RCC registers. These functions have priority over the configuration in the standard GPIO registers. Зато обнаружил примечание к биту установки фронта записи TimeStamp: TSEDGE в RTC_CR TSE must be reset when TSEDGE is changed to avoid unwanted TSF setting. И действительно, дерганье TSEDGE туда-сюда при включенном TSE, приводит к срабатыванию записи TimeStramp и установке флага TSF в RTC_ISR. Но нигде в документации не видел указания, что так можно делать, так что только на свой страх и риск. Однако при отладке обнаружил, что разработчики из STM пожлобились на сохранение в регистрах TimeStamp значения года. Место есть, а года НЕТ! Экономия на спичках :01: Так что TimeStamp вычеркиваем, все равно значение года нужно читать, проще все прочитать и сохранить. =========================================================== Еще один вопрос возник по RTC модулю. У меня к входу VBAT подключена батарейка CR2032 на 3V, а основное питание VDD = 3.0V отключается до нуля, и при этом идут только часы на внешнем часовом кварце от батарейки. Часы стабильно идут при передергивании питания в любых вариантах, но от батарейки все время потребляется ток, в том числе и при наличии главного питания VDD. Как это возможно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 14 апреля, 2017 Опубликовано 14 апреля, 2017 · Жалоба но от батарейки все время потребляется ток, в том числе и при наличии главного питания VDD. Как это возможно? А что тут такого? Батарейка питает домен часов, часы же работают и при подключенном питании, ставьте диод от основного питания и потребления не будет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 14 апреля, 2017 Опубликовано 14 апреля, 2017 · Жалоба А что тут такого? Батарейка питает домен часов, часы же работают и при подключенном питании, ставьте диод от основного питания и потребления не будет... Бррр... Какая-то профанация идеи. Там же внутренний ключ-переключатель питания RTC домена от VDD или VBAT по уровню POR/PDR на линии VDD. И ножка VBAT выделенная. Это должно позволять нормально работать при любой комбинации рабочих напряжений на VDD и VBAT, как ниже, так и выше. И это, кстати, работает. VDD = 3.0V Подавал напряжение на VBAT с внешнего источника от 2.0V до 3.5V Ток при этом пропорционально меняется от 21 мкА до 36 мкА из-за включенного внутреннего делителя 2х50 кОм для измерения напряжения батареи АЦП. Т.е. домен питается от VBAT, хотя VDD присутствует. Что совсем удивительно, можно отключать батарейку на ходу, тока ессно нет, осциллограф показывает на VBAT "висячку" подтянутую к земле. Часы при этом стабильно идут, не сбиваются, не спешат и не отстают. Подключаешь батарею назад - опять потребляет свои мкА. А снимаешь VDD - паспортное потребление 1.5 мкА. Такое впечатление, что встроенный ключ подключает домен к VDD только когда пропадает VBAT, а когда есть и то и то, подключен к VBAT. :01: Сегодня уже давно роюсь в Инете, пока прямых сообщений на эту тему не нашел. Нашел сообщение на форуме РадиоКот о такой же проблеме, но без ответа на вопрос. И вот картинка из презентации, где прямо говорится, что при наличии VDD ток от VBAT не потребляется. Может быть там еще какие конфигурационные биты где есть??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 14 апреля, 2017 Опубликовано 14 апреля, 2017 · Жалоба А вы делитель, что с батарейки на АЦП идет, отключили? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 14 апреля, 2017 Опубликовано 14 апреля, 2017 · Жалоба А вы делитель, что с батарейки на АЦП идет, отключили? Про делитель я выше написал. Проблема не в делителе, он - просто индикатор того, что происходит в МК. Проблема в том, что внутренний ключ не переключает питание RTC домена с VBAT на VDD когда VDD присутствует. Это идет вразрез с заявлениями, которые присутствуют в презентациях с официальных семинаров по STM32, картинка из которого приведена выше. Да и противоречит логике. Проверил еще на одной своей новой плате, которую раньше не прошивал, и на отладке NUCLEO-F072RB. На моих платах STM32F072RB ревизии "1", на отладке постарше - "Y" Поведение везде одинаковое, так что проблемы "железа" вычеркиваются. Надо копать в моей программе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 14 апреля, 2017 Опубликовано 14 апреля, 2017 · Жалоба Про включенный делитель я выше прочитал. А где читать про выключенный делитель? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 15 апреля, 2017 Опубликовано 15 апреля, 2017 · Жалоба Есть устройство на STM32F072. Домен RTC запитывается от мелкой батарейки. Нужно при пропадании основного питания запоминать время выключения. А обработка этого времени производится уже после включения. Поскольку в RTC есть встроенные регистры TimeStamp, думал применить их для хранения времени выключения. Читаю документацию, и не могу найти, можно ли активировать запись времени в TimeStamp программно. Весь тред читать лень - так что заранее извиняюсь, если уже предлагали это простое решение: В этом RTC-домене наверняка есть ячейки обычного ОЗУ. Может просто - при работе ПО периодически писать текущее время в них и после включения там будет время непосредственно перед выключением? Мы так у себя во всех устройствах делаем, только пишем во FRAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 15 апреля, 2017 Опубликовано 15 апреля, 2017 · Жалоба . . . Все натыкаюсь на аппаратные события по ножкам МК Можно это сделать программно? Не идите против природы. Соедините 2 ноги МК, одна из которых - вход прерывания, запись копии TimeStamp. Вторая - выход - программный сигнал "все пропало" :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 17 апреля, 2017 Опубликовано 17 апреля, 2017 · Жалоба Не идите против природы. Соедините 2 ноги МК, одна из которых - вход прерывания, запись копии TimeStamp. Вторая - выход - программный сигнал "все пропало" Так еще хуже, еще одна ножка МК бездарно пропадет. Я этот вопрос уже выше решил. Дерганье бита установки фронта срабатывания всегда приводит к записи копии TimeStamp. Но я от TimeStamp все равно отказался, см. выше, + все равно при его включении нога PC13 активна и её нужно подтягивать снаружи. Весь тред читать лень - так что заранее извиняюсь, если уже предлагали это простое решение: В этом RTC-домене наверняка есть ячейки обычного ОЗУ. Может просто - при работе ПО периодически писать текущее время в них и после включения там будет время непосредственно перед выключением? Мы так у себя во всех устройствах делаем, только пишем во FRAM. Хорошая мысль, наверно, так и сделаю. + у меня время храниться в виде почти юниксовского таймстампа в 32 битах, так еще буду перепаковывать BCD в бинарный таймстамп и сэкономлю слово в регистрах бэкапа. В момент снятия питания времени мало паковать, а так - без проблем. Про включенный делитель я выше прочитал. А где читать про выключенный делитель? Ответил вам на прошлый вас совет, и только потом все понял :) Мне втемяшилось, что делитель батарейки находится в домене RTC после ключа питания. А ведь это не так, иначе мы бы при наличии VDD измеряли бы напряжение VDD, а не VBAT. А делитель находится непосредственно на входе VBAT и к домену RTC отношения не имеет. Так что переписал функции АЦП, сделал подключение делителя на 10 мс раз в секунду - и все стало на свои места. Часы идут отлично. Потребление от VBAT при наличии VDD - 0.3 мкА, при снятии VDD и питании от VBAT - 1.5 мкА. Все "как доктор в даташите прописал". Всем спасибо за советы! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться