Библиотека RTC

Grumpyoldpizza
Вторник 24 мая 2016 г., 21:27
Быстро хотел бы попросить вклад в дизайн библиотеки RTC. Цель состоит в том, чтобы быть совместимым с API RTCZERO.

Мне интересно, есть ли вся необходимая функциональность аддона, или что -то упустили из виду. Не.b Есть только 1 сигнал тревоги. 2 -е место в оборудовании зарезервировано для внутренних целей.

Спасибо за поиск.
class RTClock { public: enum RTCAlarmMatch { MATCH_OFF, // Never MATCH_SS, // Every Minute MATCH_MMSS, // Every Hour MATCH_HHMMSS, // Every Day MATCH_DDHHMMSS, // Every Month MATCH_MMDDHHMMSS, // Every Year MATCH_YYMMDDHHMMSS, // Once, on a specific date and a specific time }; RTClock(); void begin(bool resetTime = false); void enableAlarm(RTCAlarmMatch match); void disableAlarm(); void attachInterrupt(void(*callback)(void)); void detachInterrupt(); void standbyMode(); // Get Functions uint8_t getSeconds(); uint8_t getMinutes(); uint8_t getHours(); uint8_t getDay(); uint8_t getMonth(); uint8_t getYear(); uint8_t getAlarmSeconds(); uint8_t getAlarmMinutes(); uint8_t getAlarmHours(); uint8_t getAlarmDay(); uint8_t getAlarmMonth(); uint8_t getAlarmYear(); // Set Functions void setSeconds(uint8_t seconds); void setMinutes(uint8_t minutes); void setHours(uint8_t hours); void setTime(uint8_t hours, uint8_t minutes, uint8_t seconds); void setDay(uint8_t day); void setMonth(uint8_t month); void setYear(uint8_t year); void setDate(uint8_t day, uint8_t month, uint8_t year); void setAlarmSeconds(uint8_t seconds); void setAlarmMinutes(uint8_t minutes); void setAlarmHours(uint8_t hours); void setAlarmTime(uint8_t hours, uint8_t minutes, uint8_t seconds); void setAlarmDay(uint8_t day); void setAlarmMonth(uint8_t month); void setAlarmYear(uint8_t year); void setAlarmDate(uint8_t day, uint8_t month, uint8_t year); // Epoch Functions uint32_t getEpoch(); uint32_t getY2kEpoch(); void setEpoch(uint32_t ts); void setY2kEpoch(uint32_t ts); // EXTENSTION: subsecond handling for timer synchronisation uint32_t getSubSeconds(); void shiftSubSeconds(int32_t micros); // EXTENSTION: clock calibration [-511..512] int32_t getCalibration(); void setCalibration(int32_t calibration); // EXTENSTION: periodic wakeup void wakeup(uint32_t millis, void(*callback)(void)); }; extern RTClock RTC;

Martinayotte
Ср 25 мая 2016 г. 12:09
Привет @grumpyoldpizza,

Зачем вам не раскрывать вторую тревогу ?

На F1, если я помню, есть только 1, но на F4 я реализовал LIB с обоими доступными.

Grumpyoldpizza
Ср 25 мая 2016 г. 12:59
Martinayotte написал:Привет @grumpyoldpizza,

Зачем вам не раскрывать вторую тревогу ?

На F1, если я помню, есть только 1, но на F4 я реализовал LIB с обоими доступными.

Ахулл
Ср 25 мая 2016 г. 15:13
Вы уверены, что на F1 есть только один, единственная информация, которую я мог бы найти, предполагает, что может быть два.
Обзор Advanced RTC STM32
AN3371
8/42
DOC ID 018624 Rev 2
1.2 RTC тревоги
1.2.1
Конфигурация тревоги RTC
STM32 RTC встраивает два тревоги: тревога A и тревога B, которые похожи. Тревога может быть
сгенерировано в определенное время или/и дата, запрограммированная пользователем.
RTC STM32 предоставляет богатую комбинацию настройки тревоги и предлагает множество функций для
Сделайте это легко настраивать и отображать эти настройки тревоги.
Я не могу найти что -то конкретное для F10X, которое говорит, что есть только один, однако вы вполне можете быть правильным.С другой стороны, даже если документация STM претендует только на одну для F10X, это может быть маркетинговой спецификацией, а не чем -то, что связано с кремнием, и 2 -я тревога может действительно работать в любом случае.

Martinayotte
Ср 25 мая 2016 г. 15:35
Документ STM32F1XXX-RM0008-CD00171190.PDF заявляет в главе 18, что для F1XX присутствует только 1 RTCAlarm.
Для F4XX документ STM32F4XXX-RM0090-DM00031020.PDF (гл.26) показывает, что есть 2 тревоги, A и B, а также таймер пробуждения, который я реализовал в RTClock для F4 в качестве SetPeriodicWakeup () Некоторое время назад.

РЕДАКТИРОВАТЬ: Кроме того, на боковом режиме RTC F1 основан на «эпохе», в то время как F4 основан на BCD.

Grumpyoldpizza
Ср 25 мая 2016 г. 15:52
Martinayotte написал:Документ STM32F1XXX-RM0008-CD00171190.PDF заявляет в главе 18, что для F1XX присутствует только 1 RTCAlarm.
Для F4XX документ STM32F4XXX-RM0090-DM00031020.PDF (гл.26) показывает, что есть 2 тревоги, A и B, а также таймер пробуждения, который я реализовал в RTClock для F4 в качестве SetPeriodicWakeup () Некоторое время назад.

РЕДАКТИРОВАТЬ: Кроме того, на боковом режиме RTC F1 основан на «эпохе», в то время как F4 основан на BCD.

Ахулл
Ср 25 мая 2016 г., 16:44
Martinayotte написал:Документ STM32F1XXX-RM0008-CD00171190.PDF заявляет в главе 18, что для F1XX присутствует только 1 RTCAlarm.
Для F4XX документ STM32F4XXX-RM0090-DM00031020.PDF (гл.26) показывает, что есть 2 тревоги, A и B, а также таймер пробуждения, который я реализовал в RTClock для F4 в качестве SetPeriodicWakeup () Некоторое время назад.

РЕДАКТИРОВАТЬ: Кроме того, на боковом режиме RTC F1 основан на «эпохе», в то время как F4 основан на BCD.

Martinayotte
Ср 25 мая 2016 г. 18:30
Да, это снижается до уровня кремния, но главная цель состоит в том, что тревоги BCD могут быть вызваны различными способами, такие как «в минуту», «в час», «в день» и т. Д., Вещи, которые не могут быть достигнуты в оборудовании с «эпохи» на основе.

Martinayotte
Ср 25 мая 2016 г. 18:32
Grumpyoldpizza написал:Есть ли какое -либо преимущество, разделяющее прикрепление/отделение обратного вызовов после конфигурации тайм -аута пробуждения ? Нормальное использование пробуждения (учитывая его низкую точность), кажется, больше для периодического пробуждения из режима остановки периодически. В этом случае обратный вызов был бы довольно бессмысленным ...

Grumpyoldpizza
Солнце 23 октября 2016 г. 14:01
Хорошо, наконец -то обошел все это для ядра STM32L4. Может кто -нибудь рассмотреть && || Предоставьте отзыв, правильно ли я получил API и функциональность ?

API совместим с RTCZERO (код на GitHub имеет "RTCZERO.H "Обертка). Пара предостережений. Таймер пробуждения не выставлен. Это зарезервировано для "STM32.Сон (тайм -аут) »и« STM32.DeepSleep (тайм -аут) ". 2 -й тревога для L0 и L4 в данный момент не подвергается воздействию будущего класса «rtcalarm».

Некоторые заметки. RTC.GetCalibration/SetCalibration позволяет ускорить/замедлить часы. Один использует RTC.Pinmode (output_1hz), например, для вывода сигнала 1 Гц на PC13, который можно сравнить с более точными эталонными часами. RTC.AdvitationTicks () можно использовать вместе с RTC.PinMode (input_sync), чтобы выровнять RTC с внешними часами. Скажем, подключает PPS GPS с PC13 и использует RTC.onsync (). Каждый раз, когда на PPS появляется повышающий край, будет вызван обратный вызов OnSync (), и с RTC.getSyncticks () может быть определено смещение (или коэффициент корректировки). Сам объект синхронизации также может быть использована для измерения точного времени внешнего события, скажем, нажатие кнопки (это по умолчанию для Dragonfly).

Не.B, что «клеща» похожи на «подсеконд» в документации STM, за исключением того, что они всегда масштабируются до [0..32767].

Спасибо за поиск.
class RTCClass { public: enum AlarmMatch: uint8_t { MATCH_ANY = 0, // Every Second MATCH_SS = 1, // Every Minute MATCH_MMSS = 3, // Every Hour MATCH_HHMMSS = 7, // Every Day MATCH_DHHMMSS = 15, // Every Month MATCH_MMDDHHMMSS = 31, // Every Year MATCH_YYMMDDHHMMSS = 64 // Once, on a specific date and a specific time }; enum PinMode: uint8_t { NONE = 0, INPUT_SYNC = 1, OUTPUT_512HZ = 2, OUTPUT_1HZ = 3, }; void enableAlarm(AlarmMatch match); void disableAlarm(); void attachInterrupt(void(*callback)(void)); void detachInterrupt(); // Get Functions uint8_t getSeconds(); uint8_t getMinutes(); uint8_t getHours(); uint8_t getDay(); uint8_t getMonth(); uint8_t getYear(); uint8_t getAlarmSeconds(); uint8_t getAlarmMinutes(); uint8_t getAlarmHours(); uint8_t getAlarmDay(); uint8_t getAlarmMonth(); uint8_t getAlarmYear(); // Set Functions void setSeconds(uint8_t seconds); void setMinutes(uint8_t minutes); void setHours(uint8_t hours); void setTime(uint8_t hours, uint8_t minutes, uint8_t seconds); void setDay(uint8_t day); void setMonth(uint8_t month); void setYear(uint8_t year); void setDate(uint8_t day, uint8_t month, uint8_t year); void setAlarmSeconds(uint8_t seconds); void setAlarmMinutes(uint8_t minutes); void setAlarmHours(uint8_t hours); void setAlarmTime(uint8_t hours, uint8_t minutes, uint8_t seconds); void setAlarmDay(uint8_t day); void setAlarmMonth(uint8_t month); void setAlarmYear(uint8_t year); void setAlarmDate(uint8_t day, uint8_t month, uint8_t year); // Epoch Functions uint32_t getEpoch(); uint32_t getY2kEpoch(); void setEpoch(uint32_t ts); void setY2kEpoch(uint32_t ts); // STM32L4 EXTENSION: atomic set time/date void setCalendar(uint8_t hours, uint8_t minutes, uint8_t seconds, uint8_t day, uint8_t month, uint8_t year); // STM32L4 EXTENSION: ticks [0..32767] uint16_t getTicks(); // STM32L4 EXTENSION: clock calibration [-511..512] int32_t getCalibration(); void setCalibration(int32_t calibration); // STM32L4 EXTENSION: clock fine tuning [-32767..32768] void adjustTicks(int32_t ticks); // STM32L4 EXTENSION: external sync pulse bool syncOccured(); uint16_t getSyncTicks(); uint8_t getSyncSeconds(); uint8_t getSyncMinutes(); uint8_t getSyncHours(); uint8_t getSyncDay(); uint8_t getSyncMonth(); void onSync(void(*callback)(void)); // STM32L4 EXTENSION: PC13 control void pinMode(PinMode mode); }; extern RTCClass RTC;

Ореховый
Солнце 26 марта 2017 12:43
ОК, заинтригован... Я бы хотел RTC на моем проекте Speedo... Я собирался использовать один из этих внешних модулей RTC... Но я вспомнил, что кто -то сказал, что есть один встроенный.

Я полагаю, что вы подаете питание в VBAT, чтобы сохранить RTC, когда остальная часть MCU не допускается?
Сколько напряжения? 1.5? 3В?

И я предполагаю, что нет библиотеки?

Отсюда эта нить? : D

Я думаю, маленький гид был бы полезен... или если вы знаете о какой -либо документации, я могу прочитать еще лучше : D

Извините за тупой пост, я довольно устал и отключается от боли............ (искалечен)

Martinayotte
Солнце 26 марта 2017 г. 13:02
Упомянутые характеристики должны быть между 1.8 В и 3.6 В.
Я лично использую суперконденсатор вместо батареи.
Библиотека на GitHub работает нормально.

Ореховый
Солнце 26 марта 2017 г. 14:12
О, какой GitHub? Роджерс STM32?

Martinayotte
Солнце 26 марта 2017 г. 14:25
Да !
https: // github.com/rogerclarkmelbourne/ ... es/rtclock

Ореховый
Солнце 26 марта 2017 г. 14:53
Спасибо

Ореховый
Пн 27 марта 2017 г. 11:29
Спрашивая только так, как я не могу играть с этим в течение нескольких дней......

Работает ли встроенный RTC Unix Time? Таким образом, вы можете получить дату с номера? Или это простые 24 часа и ничего больше?

Я вижу, что функция GetTime кажется вызовом, чтобы проверить время. Но я не вижу никакой даты получения или чего -то еще...

Ахулл
Пн 27 марта 2017 г. 11:47
Черная писала:Спрашивая только так, как я не могу играть с этим в течение нескольких дней......

Работает ли встроенный RTC Unix Time? Таким образом, вы можете получить дату с номера? Или это простые 24 часа и ничего больше?

Я вижу, что функция GetTime кажется вызовом, чтобы проверить время. Но я не вижу никакой даты получения или чего -то еще...

Hutthenut
Вторник 03 апреля 2018 г. 15:54
Привет,

Имея поиск "RTC STM32L4" и чтение потока.

Мне интересно, почему ссылка для F1
https: // github.com/rogerclarkmelbourne/ ... es/rtclock

И я вообще не вижу разделения L4 по основной ссылке, только F1/F3/F4.
https: // github.com/rogerclarkmelbourne/arduino_stm32

Кто -нибудь знает, где я могу найти библиотеки L4..

С наилучшими пожеланиями,
Откровенный

victor_pv
Вторник 03 апреля 2018 г., 16:08
ViewTopic.PHP?F = 42&t = 1092

Hutthenut
Вт, 03 апреля 2018 г., 16:31
Спасибо

электрический
Пн, 09 апреля 2018 г., 18:00
[Grumpyoldpizza - Солнце 23 октября 2016 г. 14:01] - Хорошо, наконец -то обошел все это для ядра STM32L4. Может кто -нибудь рассмотреть && || Предоставьте отзыв, правильно ли я получил API и функциональность ?
[...]
Некоторые заметки. RTC.GetCalibration/SetCalibration позволяет ускорить/замедлить часы. Один использует RTC.Pinmode (output_1hz), например, для вывода сигнала 1 Гц на PC13, который можно сравнить с более точными эталонными часами. RTC.AdvitationTicks () можно использовать вместе с RTC.PinMode (input_sync), чтобы выровнять RTC с внешними часами. Скажем, подключает PPS GPS с PC13 и использует RTC.onsync (). Каждый раз, когда на PPS появляется повышающий край, будет вызван обратный вызов OnSync (), и с RTC.getSyncticks () может быть определено смещение (или коэффициент корректировки). Сам объект синхронизации также может быть использована для измерения точного времени внешнего события, скажем, нажатие кнопки (это по умолчанию для Dragonfly).
Мне просто любопытно о методе синхронизации. Я признаю, что еще не посмотрел на калибровочную схему F4, чтобы увидеть, есть ли какие -либо серьезные отличия от F1. Но на F1 требуется более одной секунды, чтобы получить измерение, равное этапам калибровки регистра, требуется не менее 32 секунд. Что я сделал, так это попробовать 32 кГц клещей дважды, как минимум на 32 секунды друг от друга. Это потому, что n -импульсы удаляются в одном интервале 32S. Затем математику, чтобы масштабировать ее на шаги калибровки. Это близко к тому, что вы делаете с методом синхронизации в вашей библиотеке RTC?

Вы также рассматривали, возможно, прерывистый характер входящего синхронизации? Например, устройство может получить PPS только тогда, когда оно находится рядом с окном, и было бы желательно автоматически сохранить полученный CAL и продолжать работать нормально, даже если все это перемещается в место, были GPS темно.

Или, если у устройства отсутствует аппаратное обеспечение GPS, и оно применяется к внешним терминалам с целью начальной или периодической калибровки.

Grumpyoldpizza
Вт 10 апреля 2018 г. 15:03
[электрический - Пн, 09 апреля 2018 г. 18:00] -
[Grumpyoldpizza - Солнце 23 октября 2016 г. 14:01] - Хорошо, наконец -то обошел все это для ядра STM32L4. Может кто -нибудь рассмотреть && || Предоставьте отзыв, правильно ли я получил API и функциональность ?
[...]
Некоторые заметки. RTC.GetCalibration/SetCalibration позволяет ускорить/замедлить часы. Один использует RTC.Pinmode (output_1hz), например, для вывода сигнала 1 Гц на PC13, который можно сравнить с более точными эталонными часами. RTC.AdvitationTicks () можно использовать вместе с RTC.PinMode (input_sync), чтобы выровнять RTC с внешними часами. Скажем, подключает PPS GPS с PC13 и использует RTC.onsync (). Каждый раз, когда на PPS появляется повышающий край, будет вызван обратный вызов OnSync (), и с RTC.getSyncticks () может быть определено смещение (или коэффициент корректировки). Сам объект синхронизации также может быть использована для измерения точного времени внешнего события, скажем, нажатие кнопки (это по умолчанию для Dragonfly).
Мне просто любопытно о методе синхронизации. Я признаю, что еще не посмотрел на калибровочную схему F4, чтобы увидеть, есть ли какие -либо серьезные отличия от F1. Но на F1 требуется более одной секунды, чтобы получить измерение, равное этапам калибровки регистра, требуется не менее 32 секунд. Что я сделал, так это попробовать 32 кГц клещей дважды, как минимум на 32 секунды друг от друга. Это потому, что n -импульсы удаляются в одном интервале 32S. Затем математику, чтобы масштабировать ее на шаги калибровки. Это близко к тому, что вы делаете с методом синхронизации в вашей библиотеке RTC?

Вы также рассматривали, возможно, прерывистый характер входящего синхронизации? Например, устройство может получить PPS только тогда, когда оно находится рядом с окном, и было бы желательно автоматически сохранить полученный CAL и продолжать работать нормально, даже если все это перемещается в место, были GPS темно.

Или, если у устройства отсутствует аппаратное обеспечение GPS, и оно применяется к внешним терминалам с целью начальной или периодической калибровки.
Загруженная тема. Сейчас я начинаю использовать немного другую технику, в основном потому, что ввод синхронизации не всегда доступен. Идея в целом состоит в том, чтобы квалифицировать ввод PPS с помощью действительного исправления. я.эн. Он вооружен только после действительного исправления (или его последовательности). Если у вас есть действительное исправление, то у вас есть все, по сути, по сути. Таким образом, вам нужно выравнивать подсекону как первый шаг. С прерыванием PPS, которое наполовину легко. Если getSubseconds () Чичено обратно, скажем, от 1 до 16383 года, то вам нужно вычесть из подразделов, я.эн. RTC.AdvateSubSeconds (-offset). Если ваши подростки находятся между 16384 и 32767, то вам нужно добавить к подсеконам. Очевидно, вы хотите применить фильтр, так что шаги, близкие к правильному выравниванию, меньше, чем издалеки.

Если у вас есть 2 измерения PPS Back To Back, вы также можете получить от некомпенсированных подразделов периода и, следовательно, выполните тонкую калибровку. Опять же, проблема в том, что джиттер, который требует фильтра.

Действительно рассмотрели это в отношении GNSS ...

электрический
Вт 10 апреля 2018 г. 15:39
Все хорошо. Вчера я посмотрел на руководство. У вас определенно вырубленная работа для вас, варианты калибровки F4 RTC более сложны, чем F1. Конечно, существует несколько вариантов и вариантов использования, поэтому иногда трудно решить, как расширить базовую структуру на интерфейс. Я вижу, что вы имеете в виду в отношении одного PPS-PPS, но если я правильно помню, некоторые модули предоставляют его только +/- 10US-точность. Этого было бы недостаточно для 1pps или более тонкой калибровки. Я также немного потерян о том, как вы могли бы точно измерить часы 32 кГц только за одну секунду. Но если у вас есть все в руках, это станет очевидным, когда вы публикуете.

Действительно, когда я экспериментировал с некоторыми модулями GPS, они иногда предоставляли импульсы PPS перед исправлением, и я не был слишком уверен в этом. Я внедрил ворота, основанные на предложениях NMEA, как вы предложили, подождать, пока не будет исправлено, чтобы попробовать их. Но на этот раз я был ленив и подождал 5 минут после того, как свет начнет мигать (сериал не подключен). Я также проверяю отсутствующие импульсы. Если кто -то пропущен, я останавливаю калибровку и начинаю все сначала.

У меня есть несколько плат F4 по заказу, у них есть встроенная аккумулятор.

Разгона STM32F103