RTC Libs.

Ахулл
Пн 18 мая 2015 г., 19:16
Одна из вещей, которые я хотел бы работать, - это RTC на STM32F103XXX - мы кратко затронули это раньше.

Большинство плат имеют генератор или кристалл 32767 Гц или кристалл, и поэтому вам нужен только аккумулятор/аккумулятор (возможно, с встроенным диодом Шоттки, вероятно, не позволяет нам получить эксплуатацию RTC.

Что я обнаружил до сих пор.

1) Есть какая -то попытка заставить это работать в ./hareware/arduino_stm32/stm32f1/библиотеки/непроверенные/rtclock/
Это неполно и несовместимо с текущими версиями RCC.C и RCC.час

Есть «новая» версия библиотек RCC в ./Adware/arduino_stm32/stm32f1/libraries/untested/rtclock/new RCC/
Это также не совместимо с текущими библиотеками RCC.

2) Мне неясно, какой RCC.[h, c] мне нужно попытаться объединить или адаптировать форму изменений «Новый RCC», так как, похоже, есть несколько кандидатов.
./hardware/Arduino_STM32/STM32F3/cores/maple/libmaple/stm32f3/include/series/rcc.h ./hardware/Arduino_STM32/STM32F3/cores/maple/libmaple/stm32f3/f3_rcc.c ./hardware/Arduino_STM32/STM32F3/cores/maple/libmaple/include/libmaple/rcc.h ./hardware/Arduino_STM32/STM32F3/cores/maple/libmaple/rcc.c ./hardware/Arduino_STM32/STM32F1/libraries/Untested/RTClock/new RCC/rcc.h.new ./hardware/Arduino_STM32/STM32F1/libraries/Untested/RTClock/new RCC/rcc.c.new ./hardware/Arduino_STM32/STM32F1/libraries/RTClock/new RCC/rcc.h.new ./hardware/Arduino_STM32/STM32F1/libraries/RTClock/new RCC/rcc.c.new ./hardware/Arduino_STM32/STM32F1/cores/maple/libmaple/rcc.c ./hardware/Arduino_STM32/STM32F1/system/libmaple/stm32f2/include/series/rcc.h ./hardware/Arduino_STM32/STM32F1/system/libmaple/include/libmaple/rcc.h ./hardware/Arduino_STM32/STM32F1/system/libmaple/stm32f1/include/series/rcc.h ./hardware/Arduino_STM32/STM32F4/cores/maple/libmaple/rcc.c ./hardware/Arduino_STM32/STM32F4/cores/maple/libmaple/rcc.h

victor_pv
Пн 18 мая 2015 г., 19:53
Я предполагаю, что вы должны начать смотреть на эти два, чтобы понять, почему у нас даже есть эти 2 файла:
./hardware/Arduino_STM32/STM32F1/system/libmaple/include/libmaple/rcc.h ./hardware/Arduino_STM32/STM32F1/system/libmaple/stm32f1/include/series/rcc.h

Zoomx
Вторник 19 мая 2015 г. 14:38
Может быть, эти источники могут быть полезными?
http: // www.Кейл.com/скачать/docs/356.аспирант

Mrburnette
Вторник 19 мая 2015 г. 14:57
РЕДАКТИРОВАТЬ 2:
Что ж, придерживаясь кристалла 32K на PC14 до ПК 15, в то время как Maple Mini находился на макете (дополнительная емкость) Время + количество прерываний: 10.457 (10, 0, 1, 1)
Время + количество прерываний: 13.20437 (13, 0, 1, 1)
Время + количество прерываний: 15.7575 (15, 0, 2, 2)
-- тревога --
Время + количество прерываний: 18.4175 (18, 0, 2, 2)
Время + количество прерываний: 21.24113 (21, 0, 2, 2)
Время + количество прерываний: 23.11238 (23, 0, 3, 3)
-- тревога --
Время + количество прерываний: 26.7796 (26, 0, 3, 3)
Время + количество прерываний: 29.27733 (29, 0, 3, 3)
Время + количество прерываний: 31.14860 (31, 0, 4, 4)
-- тревога --
Время + Подсчет прерываний: 34.11417 (34, 0, 4, 4)
Время + количество прерываний: 37.31305 (37, 0, 4, 4)
Время + количество прерываний: 39.18424 (39, 0, 5, 5)
-- тревога --
Время + количество прерываний: 42.14973 (42, 0, 5, 5)
Время + количество прерываний: 44.2090 (44, 0, 5, 5)
Время + количество прерываний: 47.22008 (47, 0, 6, 6)
-- тревога --
Время + количество прерываний: 50.18555 (50, 0, 6, 6)
Время + количество прерываний: 52.5669 (52, 0, 6, 6)
Время + количество прерываний: 55.25597 (55, 0, 7, 7)
-- тревога --
РЕДАКТИРОВАТЬ:
Выглядит как PC14 & PC15 (D13 & D12 соответственно) на Mini или D22/D23 на клене

Я просмотрел старшие, кленовые примеры для RTC. Это компилируется для меня, но у меня нет кристалла 32 тыс. На кленовом Mini, чтобы попробовать... Мне нужно найти схему и определить, могу ли я легко установить одну под увеличительным стеклом....
C: \ users \ ray \ appdata \ local \ temp \ build7347767204266594424.TMP \ RealTimeClock.CPP.корзин:
Размер раздела Addr
.Данные 16880 0
Всего 16880


Размер бинарного эскиза сообщается выше. Проверьте его на максимум 108000 байтов.
/* * test-rtc.c * * Example program that sets up the Real Time Clock and then blinks the * LED in patterns for seconds and alarm interrupts. * * Created by Rod Gilchrist on 11-12-24. * section size addr .data 16880 0 Total 16880 */ #include "wirish.h" #include "rtc.h" #include "usb.h" int globAlmCnt = 0; int globOvCnt = 0; int globSecCnt = 0; int specAlmCnt = 0; int lastGlobAlmCnt = -1; int lastSpecAlmCnt = -1; void rtc_sec_intr() { if (rtc_is_second()) globSecCnt++; } void rtc_ovf_intr() { if (rtc_is_overflow()) globOvCnt++; } void rtc_glob_alm_intr() { if (rtc_is_alarm()) globAlmCnt++; } void rtc_spec_alm_intr() { if (rtc_is_alarm()) specAlmCnt++; } void setup() { pinMode(BOARD_LED_PIN, OUTPUT); delay(5000); SerialUSB.println("begin RTC blink"); delay(1000); rtc_init(RTCSEL_LSI); rtc_set_prescaler_load(0x7fff); rtc_set_count(0); rtc_attach_interrupt(RTC_SECONDS_INTERRUPT, rtc_sec_intr); rtc_attach_interrupt(RTC_OVERFLOW_INTERRUPT, rtc_ovf_intr); // expected every 128000 seconds rtc_attach_interrupt(RTC_ALARM_GLOBAL_INTERRUPT, rtc_glob_alm_intr); rtc_attach_interrupt(RTC_ALARM_SPECIFIC_INTERRUPT, rtc_spec_alm_intr); } void loop() { int i,n; SerialUSB.print("Time + interrupt counts: "); SerialUSB.print(rtc_get_count()); SerialUSB.print("."); SerialUSB.print(rtc_get_divider()); SerialUSB.print(" ("); SerialUSB.print(globSecCnt); SerialUSB.print(", "); SerialUSB.print(globOvCnt); SerialUSB.print(", "); SerialUSB.print(globAlmCnt); SerialUSB.print(", "); SerialUSB.print(specAlmCnt); SerialUSB.println(")"); delay(1000); digitalWrite(BOARD_LED_PIN, 1); if ((lastSpecAlmCnt != specAlmCnt) || (lastGlobAlmCnt != globAlmCnt)){ lastGlobAlmCnt = globAlmCnt; lastSpecAlmCnt = specAlmCnt; SerialUSB.println(" -- alarm -- "); for (i=0;i<3;i++) { digitalWrite(BOARD_LED_PIN, 0); delay(100); digitalWrite(BOARD_LED_PIN, 1); delay(100);} n = rtc_get_count() + 5; rtc_set_alarm(n); } delay(1000); digitalWrite(BOARD_LED_PIN, 0); }

Ахулл
Вторник 19 мая 2015 г., 21:38
Это выглядит довольно интересно, я не мог получить ни одного из примеров, которые я нашел, чтобы даже скомпилировать. На одной из моих досок уже есть генератор 32 кГц на другой, у другой есть Can Style Watch Crystal. Им только отсутствует аккумулятор. Некоторая другая доска, доступная на eBay.

Mrburnette
Вторник 19 мая 2015 г., 22:43
Ахулл написал:Это выглядит довольно интересно, я не мог получить ни одного из примеров, которые я нашел, чтобы даже скомпилировать. <...>.

Mrburnette
Чт 21 мая 2015 г., 21:35
Я получаю чистую компиляцию после модификаций в пример RTC Gilchrist и изменения в RCC.H Использование Zip Roger's Github (сегодня скачать) в Windows 8.1
Sketch uses 20,268 bytes (18%) of program storage space. Maximum is 110,592 bytes. Global variables use 4,552 bytes of dynamic memory.

Рик Кимбалл
Чт 21 мая 2015 г., 21:49
Я хотел бы попробовать это..

Но каждый раз, когда вы публикуете это, я должен пройти через себя и менять все '\' в #includes на '/'

Пожалуйста, писатели библиотеки ... Используйте '/' для разделителей пути. Он работает на Windows и Linux и OS/X .. '\' работает только на Windows.

Rogerclark
Чт 21 мая 2015 г., 21:52
Но каждый раз, когда вы публикуете это, я должен пройти через себя и менять все '\' в #includes на '/'

Пожалуйста, писатели библиотеки ... Используйте '/' для разделителей пути. Он работает на Windows и Linux и OS/X .. '\' работает только на Windows.
Я уверен, что должна быть замены режима, чтобы сделать это ;-)

Но я согласен... Все libs должны быть кросс -платформой.

Ахулл
Чт 21 мая 2015 г., 22:48
Я думаю, что как только мы получим эту работу, это должно стать одним из «стандартных» либеров, включенных в Roger's Git Repo. и в свете этого должно быть "/", а не "\".

Rogerclark
Чт 21 мая 2015 г., 23:16
Я посмотрю, смогу ли я написать поиск корпорации для этого и запустить ее во всем этом, но я подозреваю.

Mrburnette
Чт 21 мая 2015 г., 23:17
Дежав ... Начиная звучать как старый форум: может быть?

RCC.h правильно: #include #include

Ахулл
Чт 21 мая 2015 г., 23:20
Я подозреваю (, как я, возможно, ранее), что реальная область с IDE, которая должна иметь возможность справиться с обоими и делать правильные вещи.

Mrburnette
Чт 21 мая 2015 г., 23:31
@Роджер;

Когда вы проверяете RCC.H и RCCLOCK LIB, пожалуйста, вставьте уведомление в разделе библиотеки на форуме. Я не хочу делать это преждевременно. О, в то время вы можете удалить непроверенный каталог в библиотеках.

Луча

Рик Кимбалл
Чт 21 мая 2015 г., 23:59
Я был программистом Windows/DOS с конца 1985 года, пока сейчас (к сожалению). Я думаю, потому что с 1980 года я использовал Unix, я никогда не использовал '\' для имен путей. Я также склонен избегать имен файлов верхнего регистра. Я также избегаю пробелов в именах. Я также избегаю '-' в именах. Все эти вещи Arduino - это кросс -платформ. Давайте сделаем нашу жизнь проще.

Я действительно не думаю, что IDE должен иметь какое -либо отношение к этому. Это проблемы компилятора C/C ++ и как справиться с разработкой кросс -платформы.

Rogerclark
Пт 22 мая 2015 г. 1:04
Привет, Рик,

Я согласен.

Классические проблемы есть .

1. Чувствительность случая Unix, а не Windows Systems, следовательно, всегда используйте более низкий случай
2. Не используйте пространства, где, возможно, используйте подчеркивание. (Я не уверен насчет минусного персонажа вместо подчеркивания). Afik Причина, по которой веб-сайты имеют тенденцию использовать минус, а не подчеркивание, заключается в том, что то, как Google Sane URL-адрес "" STM32 "
3. Я думаю, что одна проблема заключается в том, что некоторые части Windows заставляют вас использовать обратные черты, E.глин. Я думаю, что Path Env var нуждаются в спине, но, конечно, это полностью облажается Linux и OSX, которые рассматривают их как символ побега :-(

Рик Кимбалл
Пт 22 мая 2015 г. 1:22
Либе, кажется, работает для меня после того, как я исправил пути.

Спасибо.

Mrburnette
Пт 22 мая 2015 г. 15:08
Рик Кимбалл написал:Либе, кажется, работает для меня после того, как я исправил пути.

Спасибо.

victor_pv
Пт 22 мая 2015 г. 15:38
Помимо не распахивания файлов LIB, есть ли что -нибудь еще, что нужно сделать, чтобы использовать его?
Как изменение чего -либо в файлах ядра, или функции или любого PIN -кода...

Zoomx
Пт 22 мая 2015 г. 15:41
Rogerclark написал: Классические проблемы есть .

1. Чувствительность случая Unix, а не Windows Systems, следовательно, всегда используйте более низкий случай
2.......

Rogerclark
Пт 22 мая 2015 г., 21:24
Луча

Я постараюсь обновить RTC LIB в репо в эти выходные и переехать из непроверенных

Как немного, если история... Первоначально я решил собрать все библиотеки, которые, как утверждают

Однако вскоре я понял, что многие из них не работали, или, возможно, никогда не работали правильно правильно. Отсюда не проверенная папка

ИМХО Я думаю, что непроверенная папка, кажется, является разумным местоположением для вещей, пока кто -то не получит время, чтобы проверить, исправить и т. Д., Поскольку в некоторых случаях либера.

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

Я, конечно, могу проверить любой код, который просто использует стандартные функции в платах серии C, R, V или Z

Спасибо

Роджер

victor_pv
Сб 23 мая 2015 г. 12:10
Я проверил RTC с примером под названием Test_rtclock, и я получаю серийный выход с счетчиком, который поднимается каждую секунду.

Пример кажется очень грубым, имел лидерство переключения, которое было удалено из последнего репо, не имел сериала.begin () и ссылается на serialusb, который не работал в моем случае, не уверен, что из -за выбора платы или что.

После того, как я изменил пару вещей в примере, он работает и дал мне второй счетчик.

Ахулл
Сб 23 мая 2015 г. 12:16
Звучит хорошо, я надеюсь получить шанс проверить с аккумулятором на булавке RTC Vbatt, чтобы увидеть, смогу ли я установить RTC, и он пережил, убивая основную мощность процессора.
У меня где -то есть ячейки кнопок и держатели, поэтому все, что мне нужно сделать, это найти время, чтобы припаять несколько проводов. Надеюсь завтра.

Mrburnette
Сб 23 мая 2015 г. 12:22
Ахулл написал:Я думаю, что как только мы получим эту работу, это должно стать одним из «стандартных» либеров, включенных в Roger's Git Repo. и в свете этого должно быть "/", а не "\".

Rogerclark
Сб 23 мая 2015 г. 1:24
Привет, ребята

RTClock LIB сейчас в папке библиотек.

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

Я исправлю это позже, так как это всего лишь незначительная проблема

В любом случае, я обновил пример test_rtclock, чтобы он компилировался на общих платах (снятый Toggled и т. Д.)

И я много раз тестировал оба примера

Примечание. Я тестировал только на одной плате общий F103C8, поэтому ему нужно больше тестирования на серии V и Z и т. Д., чтобы быть уверенным, что все в порядке

Но я думаю, что это достаточно стабильно, чтобы перейти из непроверенной папки ;-)

Ваше здоровье

Роджер

victor_pv
Сб 23 мая 2015 г., 4:17
Мой тест был в ветеринарной доске, кстати.

Rogerclark
Сб 23 мая 2015 г., 6:17
Виктор

Я исправил простой пример, так как он тоже не собирался для меня ;-)

Mrburnette
Сб 23 мая 2015 г. 13:46
Rogerclark написал:Виктор

Я исправил простой пример, так как он тоже не собирался для меня ;-)

Ахулл
Сб 23 мая 2015 г. 15:21
Я добавил аккумулятор и аккумулятор на доску "синие таблетки", и похоже, что это все, что вам нужно, чтобы RTC работал, когда все остальное отключено. Я выложу несколько фотографий позже.

Mrburnette
Сб 23 мая 2015 г., 19:47
Ахулл написал:Я добавил аккумулятор и аккумулятор на доску "синие таблетки", и похоже, что это все, что вам нужно, чтобы RTC работал, когда все остальное отключено. Я выложу несколько фотографий позже.

Ахулл
Сб 23 мая 2015 г., 21:32
Фото, как и обещано.

Изображение
Держатель аккумулятора, провода и аккумулятор.

Изображение
Батарея установлена. В этом случае + vbat (aka 3vb) является фиолетовой проволокой, заземление зеленое.

Изображение
Количество секунд с момента сброса часов находится в правом верхнем углу. Это хорошо отмечало, с применением отключено от электроэнергии в течение последних нескольких часов. Количество клещей в настоящее время составляет 23533 секунды с момента установки батареи и сброса часов.

Теперь мне нужно слегка уточнить это, чтобы получить HH: MM: SS DD/MM/yyyy и выяснить, как запустить сигналы тревоги и получить STM32F103. Но тяжелый кусочек сделан.

Изображение
Слегка нечеткий выстрел держателя аккумулятора, завернутый в прозрачную ленту, и появился в коробке проекта. Подключен к GND и 3VB -булавкам. 3VB примечание, а не 3V3 !
ПРЕДУПРЕЖДЕНИЕ НЕ ПРОВЕРИТЬ БАСКАЛЬНЫЙ БАСКОНКУ через 3 -вольт линии, иначе что -то будет шипеть, и попрессоваться, вероятно, аккумулятор, возможно, регулятор напряжения, может быть, оба, : шок: Убедитесь, что вы идентифицируете правильный штифт для батареи RTC. В таблице данных STM вызывает этот PIN VBAT.

Одна интересная особенность STM32F103, которая стоит изучить, - это резервное копирование батареи «Регистры» RTC и регистры резервного копирования поставляются через переключатель, который требует питания либо при подаче VDD, когда в настоящее время или через контакт VBAT. Регистры резервного копирования представляют собой десять 16-битных регистров, используемых для хранения 20 байт данных пользовательского приложения, когда питание VDD отсутствует РЕДАКТИРОВАТЬ: Эта ссылка может дать некоторую полезную информацию об использовании RTC для функций читаемых часов человека.

Rogerclark
Сб 23 мая 2015 г., 22:57
Энди

Я посмотрел в этом документе, но ничего не видел, однако это задокументировано в главном руководстве RM0090 на странице 820.

Я не понимал, что эти регистры существовали. Использование одного из них для загрузчика может быть очень полезным, поэтому, если мы сделаем их доступными int кодом, я бы хотел зарезервировать последний для загрузчика для устройств, используя общий загрузчик, так как он позволяет нам надежно загружать. Озамоновать, не получая ложных срабатываний

Ахулл
Сб 23 мая 2015 г., 23:55
Rogerclark написал: ...
Я не понимал, что эти регистры существовали. Использование одного из них для загрузчика может быть очень полезным, поэтому, если мы сделаем их доступными int кодом, я бы хотел зарезервировать последний для загрузчика для устройств, используя общий загрузчик, так как он позволяет нам надежно загружать. Озамоновать, не получая ложных срабатываний

Rogerclark
Солнце 24 мая 2015 г. 1:55
Я прочитаю спецификацию и посмотрю, смогу ли я написать некоторые функции для чтения и написать регистры

Редактировать. Номер страницы и документ, который я цитировал ранее, были для F4, на стр. 83 в DOC F103 (Ref CD00171190.PDF)

Похоже, они начинаются с адреса 0x40006c00 + 0x04, а спецификация говорит
20-байтовые регистры данных (в устройствах средней плотности и низкой плотности) или 84-байтовые данные
Регистры (в устройствах линии высокой плотности, плотности XL и линии связи)
• Статус/реестр управления для управления обнаружением багажников с возможностью прерывания
• Регистр калибровки для хранения калибровочного значения RTC
• Возможность вывода калибровочных часов RTC, импульса тревоги RTC или второго импульса на
Funper PIN PC13 (когда этот вывод не используется для обнаружения багажника)
Первоначально я посмотрю, смогу ли я заставить их работать в качестве дополнения к RTC, но на самом деле они не являются частью RTC, они являются основной функцией процессора и действительно должны быть в ядрах, а также имеют число (размер памяти) включил IFDEF в зависимости от плотности устройства.

Ахулл
Солнце 24 мая 2015 г. 10:13
Я позволю вам решить, как лучше справиться с регистрами. Рассматривать их как область оперативной памяти может быть самым простым.

Я думал о том, чтобы разместить временную метку UNIX в некоторых регистрах, чтобы указать текущее время, начиная со времени, когда часы являются первыми, и периодически обновляются с помощью программного обеспечения с использованием ISR в секунду в секунду ISR. Другие байты могут быть использованы для одного или нескольких тревоги. Я не разбил детали. Одна идея - добавить какую -то вторую (возможно, миллисекунду) точность. Еще одним улучшением было бы хранить значение часового пояса и сохранить временную метку в UTC.

Немного легкого чтения для всех вас..
https: // en.Википедия.org/wiki/unix_time
https: // en.Википедия.org/wiki/c_date_an ... ONS#TIME_T
http: // Playground.Ардуино.CC/код/время
http: // www.PJRC.com/teensy/td_libs_time.HTML
http: // www.PJRC.com/teensy/td_libs_timealarms.HTML

Драйвер лицензированного устройства STMS использует немного другой подход, который кажется более расточительным в регистрах, но я не хотел просто клонировать их идею, так как это может быть возможно. Возможно самостоятельно калибруя. Я бы предпочел придерживаться какого-то 32-битного стандарта Time_t C, чтобы у нас была возможность использовать существующие стандартные библиотеки времени C с минимальной повторной работой.

Rogerclark
Солнце 24 мая 2015 г. 11:14
Привет, Энди,

Я больше думал о каком -то общем, легко доступном хранилище, а не обязательно просто использовать их для RTC

Насколько я могу судить из руководства, хотя некоторые из регистров BKP связаны с RTC, у меня сложилось впечатление, что они также предназначены для хранения других данных.

Вы видели записку о обнаружении тампер, я.e Вы можете хранить конфиденциальные данные в этих регистрах, и я предполагаю, что они будут стереть их, если он получит подделанный триггер.

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

Я знаю, что EEPROM можно использовать и для такого рода хранилища, но обновить гораздо сложнее, потому что вам нужно стирать и переписывать страницу каждый раз, когда вы хотите менять байт. Где, поскольку эти BKP регистрируются, хотя и ограниченные по размеру, кажется, не имеют такого накладного расхода

Mrburnette
Солнце 24 мая 2015 г. 12:21
Насколько я могу судить из руководства, хотя некоторые из регистров BKP связаны с RTC, у меня сложилось впечатление, что они также предназначены для хранения других данных. Да, это намерение, которое я ходил после долгого прочтения прошлой ночью. У домена RTC уже есть регистры, связанные со временем, но не Unix TimeStamp, но это займет только 2 16-битных регистров. Эти регистры, если кто -то читает все руководство, предназначались для хранения критических переменных памяти, когда UC отключили или перезагружается, поскольку этот домен мощности не сброшен, если прикрепленная батарея резервной батареи.

Кроме последнего регистра, который предназначен для зарезервированного для загрузчика, я бы предложил обернуть R0 - R8, чтобы можно было использовать стандартный вызов библиотеки основной библиотеки. Поскольку RTC, когда-то установленная в дату в реальном времени, имеет все необходимые данные для расчета временной метки UNIX, я не уверен, какое преимущество (кроме кодовых накладных расходов при чтении было бы одинаковым накладным расходом), так что, возможно, библиотека или Core LIB для разрешения и сохранения 9 16-битных регистров для потребностей резервного копирования приложения.

Поскольку основной код уже имеет счетчики микросекунды и миллисекунд, я действительно не вижу необходимости наличия в Unix TimeStam.


Просто думать вслух...

Луча

Ахулл
Солнце 24 мая 2015 г. 13:03
Рэй, вы, вероятно, правы, так как у нас нет возможности отслеживать второй раз, когда питание отключена, а единственное врождение от RTC не имеет смысла пытаться сохранить Millisecond Precision. Мы можем быть уверены только в том времени, до точность кристалла 32 кГц, но это достаточно для всего, что я когда -либо захочу сделать с RTC. Насколько я понимаю, RTC сохраняет 32 -битное значение (2x16 -битные регистры), поэтому, когда -то установленная на текущую временную метку Unix и предполагая, что мы можем установить это значение, а также прочитать его, это всегда позволит нам узнать время Unix, из которого Мы можем рассчитать все остальное (час, мин, секунд, день, месяц, год и т. Д.), чтобы можно было использовать оставшиеся регистры с батареи.

Однако, если регистр времени RTC всегда отстраняется от нуля при сбросе, нам понадобится резервный регистр аккумулятора 32 -бил для хранения смещения в текущее время.

Ахулл
Солнце 24 мая 2015 г. 15:04
Ну, это работает... Нет необходимости в дополнительных усилиях. Я добавил последовательную команду в PigScope (прицел все еще без свиньи... Мне нужно скоро выполнить трансплантат свиньи).
Теперь я могу установить время, отправив

временная метка <Unix Time Stamp>

Это отвечает

# Команда времени - 1432479737 15: 2: 17 24/5/2015 (UTC)

Результат ниже.
Изображение

РЕДАКТИРОВАТЬ: Конечно, получить действительную временную метку UNIX - это другое дело. В Linux это довольно легко.

Дата -дат " +1 час" +"%s"

Дает мне UTC + 1 час - что мне нужно, так как я в британском летнем времени (UTC + 1 час).

Ахулл
Солнце 24 мая 2015 г. 15:53
Чтобы правильно отформатировать время, я использовал библиотеку Arduino Time - https: // github.com/paulstoffregen/время

Поскольку RTC STM32 - это 32 -битный int, я могу установить его прочитать, отобразить его и т. Д., Используя следующие фрагменты кода

Некоторые, где перед настройкой () включают следующее... ... // SeralCommand -> https://github.com/kroimon/Arduino-SerialCommand.git #include "RTClock.h" RTClock rt (RTCSEL_LSE); // initialise uint32 tt; // Time library - https://github.com/PaulStoffregen/Time #include "Time.h" #define TZ "UTC+1" // SeralCommand -> https://github.com/kroimon/Arduino-SerialCommand.git #include ...

Ахулл
Солнце 24 мая 2015 г., 17:03
Для записи, вот мои кнопки ячейки и источники держателя...

Кнопка ячейка <Выберите опцию CR1220

Держатель кнопки ячейки

Ахулл
Солнце 24 мая 2015 г., 21:21
На случай, если вам интересно, этот маленький CR1220 должен длиться от 2 до 3 лет с системой выключена.

Если мы предполагаем типичное потребление тока, которое STM32F103 DataSheet (стр. 45) Государства должны быть около 1.5UA на уровне от 25 до 60 C - и типичная емкость клетки CR1220 составляет от 38 мАч до 40 мАч

Поэтому наша ячейка CR1220 должна работать (худший случай) для 25333.333333333 часа, что 1055.45 дней, или 2.89 лет. Аккумулятор должен сливаться только в том случае, если оборудование не работает, поэтому оно должно длиться дольше, если оборудование получит больше использования.

Однако ячейка также будет Самостоятельный разряд в некоторой незначительной степени (около 1% в год), который немного сократит свою жизнь.

Мы также истощаем такой крошечный ток, что способность клеток будет эффективно будет больше (я.эн. это должно длиться дольше).

Допустив эти факторы, вышеупомянутое является разумной оценкой.

Rogerclark
Солнце 24 мая 2015 г., 22:49
ХОРОШО

Моя плата RCT поставляется с ячейкой кнопки, но я понятия не имею, нет ли она или нет.

Мне нужно запустить доску сегодня вечером и проверить новый код.

Ахулл
Солнце 24 мая 2015 г. 11:05
Rogerclark написал:ХОРОШО

Моя плата RCT поставляется с ячейкой кнопки, но я понятия не имею, нет ли она или нет.

Мне нужно запустить доску сегодня вечером и проверить новый код.

Rogerclark
Пн 25 мая 2015 г., 4:47
Эндрю

Вы правы, его припаянный к нижней части платы, поэтому, вероятно, будет ячейка кнопки NICAD, поэтому, вероятно, заряжается через простую схему резистора

Мне нужно будет загрузить общий загрузчик на эту плату и попробовать все, когда у меня появится шанс

Ахулл
Пн 25 мая 2015 г., 11:22
Быстрое предупреждение. Если вы решите добавить батарею, убедитесь, что штифт VBATT на вашей плате еще не подключен к 3.3V, если это так.... ХЛОПНУТЬ!

Смотрите здесь для результатов * НЕ * Проверка сначала : oops:

Если vbatt на 3.3V Вам нужно будет поставить диод Шоттки или какую -то другую защиту в зависимости от вашего типа батареи в серии с аккумулятором, чтобы защитить его от непреднамеренной зарядки (I.эн. взрыв).

Ахулл
Пн 25 мая 2015 г., 13:11
Исправление в случае платы, которую я использовал.

Изображение

С удалением резистора с нулевым ом, без дыма, без громких шумов и RTC работает, как и ожидалось. Теперь, какова логика укорочения, что я не имею представления. Возможно, оригинальная схема, призванная к диоду, но ссылки на ноль ом дешевле... Я бы предложил перемычку, а не ссылку, был бы более умным звонком.

victor_pv
Пн 25 мая 2015 г. 14:14
Из таблицы данных я понимаю, что MCU имеет внутренний переключатель, чтобы обеспечить питание для RTC от VCC, когда в нем есть питание, поэтому я думаю, что ничего не должно подключить VBAT к VCC для правильной работы, даже диода.
В другом примечании я понял, что в посте Энди хотел получить миллисекунды от RTC, я думаю, что это возможно путем чтения текущего значения предопределения, в Registers RTC_DIVH / RTC_DIVL и разделении на соответствующее число. Страница 481 таблицы, хотя, как указал Роджер, у нас уже есть другие источники миллисекундов.
Если библиотека времени в Arduino предоставит способ получить из нее миллисекунды, то эти регистры могут быть использованы, чтобы получить их здесь.

Ахулл
Пн 25 мая 2015 г., 17:42
victor_pv написал:Из таблицы данных я понимаю, что MCU имеет внутренний переключатель, чтобы обеспечить питание для RTC от VCC, когда в нем есть питание, поэтому я думаю, что ничего не должно подключить VBAT к VCC для правильной работы, даже диода.

Rogerclark
Вторник 26 мая 2015 г. 11:15
Энди,

Можете ли вы попробовать этот код в системе ;-)
#include "RTClock.h" #define BKP_REG_BASE (uint32_t *)(0x40006C00 +0x04) static inline int readBKP(int registerNumber) { if (register>9) { register+=5;// skip over BKP_RTCCR,BKP_CR,BKP_CSR and 2 x Reserved registers } return *(BKP_REG_BASE+registerNumber)&0xffff; } static inline void writeBKP(int registerNumber,int value) { if (register>9) { register+=5;// skip over BKP_RTCCR,BKP_CR,BKP_CSR and 2 x Reserved registers } *(BKP_REG_BASE+registerNumber)=value&0xffff; } //#define TEST_WRITE #define REG1 0 #define REG2 1 void setup() { Serial.begin(115200); rtc_init(RTCSEL_LSI); #ifdef TEST_WRITE writeBKP(REG1,0x1234); writeBKP(REG2,0x5678); #endif } void loop() { Serial.print("reg 1 ");Serial.println(readBKP(REG1),HEX); Serial.print("reg 2 ");Serial.println(readBKP(REG2),HEX); delay(1000); }

Ахулл
Вторник 26 мая 2015 г., 11:45
Хороший.. Я попробую «Уродливая доска».

Ахулл
Вторник 26 мая 2015 г. 12:18
Да, это работает.

Я исправил ошибку, когда вы сослались на регистрацию на одном этапе, и зарегистрируйтесь в другом, и я изменил, чтобы позволить мне использовать USB Serial.
#include "RTClock.h" #define BKP_REG_BASE (uint32_t *)(0x40006C00 +0x04) // Create USB serial port USBSerial serial_debug; static inline int readBKP(int registerNumber) { if (registerNumber > 9) { registerNumber += 5; // skip over BKP_RTCCR,BKP_CR,BKP_CSR and 2 x Reserved registers } return *(BKP_REG_BASE + registerNumber) & 0xffff; } static inline void writeBKP(int registerNumber, int value) { if (registerNumber > 9) { registerNumber += 5; // skip over BKP_RTCCR,BKP_CR,BKP_CSR and 2 x Reserved registers } *(BKP_REG_BASE + registerNumber) = value & 0xffff; } // #define TEST_WRITE #define REG1 0 #define REG2 1 void setup() { serial_debug.begin(); //Serial.begin(115200); rtc_init(RTCSEL_LSI); #ifdef TEST_WRITE writeBKP(REG1, 0x1234); writeBKP(REG2, 0x5678); #endif } void loop() { serial_debug.print("reg 1 "); Serial.println(readBKP(REG1), HEX); serial_debug.print("reg 2 "); Serial.println(readBKP(REG2), HEX); delay(1000); }

Mrburnette
Вторник 26 мая 2015 г. 12:54
.. Так что это работает, данные переживают удаление власти : D

Насколько я понимаю, эти регистры - CMOS RAM, я полагаю, что это состояние нуля ожидания, поэтому у них есть все преимущества RAM и ни один из недостатков Flash.
Это тоже мое понимание. Силикон разложен с различными доменами мощности, поэтому резервная батарея приводит к тому, что домен RTC, и эти регистры находятся в этом домене мощности.

Луча

Ахулл
Вторник 26 мая 2015 г. 15:55
Я должен был попробовать очевидный эксперимент, основанный на том факте, что у STM32F103C8 и CB, кажется, та же вспышка, я проверил, чтобы увидеть, действительно ли у C8 больше регистров.. Кажется, нет. :( Однако я могу читать и написать все десять 16 -битных регистров (20 байтов), которые присутствуют состояния данных.

Ниже результат написания 1234 5678 C5C5 5C5C 1235 5678 и т. Д.. к первым 16 возможным регистрам... Как вы можете увидеть 16 -битные регистры от 1 до 10 работ отлично.
... reg 1 1234 reg 2 5678 reg 3 C5C5 reg 4 5C5C reg 5 1234 reg 6 5678 reg 7 C5C5 reg 8 5C5C reg 9 1234 reg 10 5678 reg 11 0 reg 12 0 reg 13 0 reg 14 0 reg 15 0 reg 16 0 reg 1 1234 reg 2 5678 reg 3 C5C5 reg 4 5C5C reg 5 1234 reg 6 5678 reg 7 C5C5 reg 8 5C5C reg 9 1234 reg 10 5678 reg 11 0 reg 12 0 reg 13 0 reg 14 0 reg 15 0 reg 16 0 ...

Rogerclark
Вторник 26 мая 2015 г. 11:06
Спасибо, Энди

Я проверил, что он пережил сброс, который удобен сам по себе.

РЖУ НЕ МОГУ.

Пока я смотрел, где мы должны поместить эти функции, я обнаружил, что в основном коде уже есть функции для них

bkp_f1.в

#include void setup() { // put your setup code here, to run once: Serial.begin(115200); bkp_init(); bkp_enable_writes(); //bkp_write(1,0x1234); } void loop() { // put your main code here, to run repeatedly: Serial.println(bkp_read(1),HEX); delay(500); }

Ахулл
Вторник 26 мая 2015 г. 11:12
Roger я предполагаю, что BKP_READ (x) позволяет читать только «Регистры». Выменяет ли это ошибку, если вы указали BKP_READ (99) или действительно BKP_READ (11) на STM32F103C8 или BKUP_READ/WRITE Эффективно позвольте вам PEEK/POKE Случайные значения, где вы хотите?

Rogerclark
Вторник 26 мая 2015 г. 11:25
Энди,

У него есть утверждения в коде, но они ничего не делают, за исключением случаев, когда отладка включена в E.глин. в платформе.текст
uint16 bkp_read(uint8 reg) { __io uint32* dr = data_register(reg); if (!dr) { ASSERT(0); /* nonexistent register */ return 0; } return (uint16)*dr; }

Mrburnette
Ср 27 мая 2015 г. 12:00
Я не уверен, есть ли причина, мы не просто запускаем bkp_init () в коде стартапа.
Я вижу преимущество не всегда называть write_enable (), но помимо того, что я всегда делаю код чуть больше
Поскольку это основная особенность, которую есть у всех ST32.
Поскольку ваше намерение состоит в том, чтобы использовать высокий регистр для загрузчика, этот регистр должен быть замаскирован от доступа к пользователям записи. Я бы продолжил и переписал функцию, замаскируйте записи в [9] для F103 ([41] для высокой плотности) и установите ошибку возврата на -1. В том числе в код стартапа кажется разумным.

Луча

Rogerclark
Ср 27 мая 2015 г. 12:16
Луча,

Я думаю, что будет проще замаскировать первый регистр, так что, когда API обращается к регистрации 1, он фактически регистрируется 2, в противном случае код, который должен пропустить 5 -х управляющих рег между двумя блоками BKP Reg, может быть немного запутанным.

Я не уверен, является ли потеря одной 16 -битной рег для загрузчика большой проблемой. Но это сделало бы загрузчик более гибким. Фактически, мы могли бы рассматривать этот один «Регистр" Остановки "как какое -то специальное хранилище, так как загрузчику потребуется только один или два бита 16 бит.


Также...
Leaflabs кодировали это с номерами регистра, начинающимися с 1, что соответствует именам оборудования, но я не совсем уверен, что люблю насмерять от 1, имеет смысл.

Возможно, мне следует изменить код так, чтобы мы замаскировали первым reg для использования с загрузчиком, а затем использовали «bkp_reg2» в качестве регистра (0) в коде

Или вы думаете, что это было бы действительно запутанно?

Я думаю, что это определенно, инициализируя это как часть обычных материалов RCC, не будет большим накладным расходом.

И я всегда мог позвонить в BKP_WRITE_ENABLE, когда вы делаете запись в коде. я.E, чтобы сохранить необходимость помнить, чтобы добавить эту линию.

В конце концов, эти функции вряд ли будут использоваться для всего, что имеет критическое время, поэтому, если написать немного больше времени, вряд ли вызовет любые проблемы.

Глядя на настоящие имена HAL для этого,

Вероятно, было бы лучше изменить их на стандарт STM

Bkp_writebackupregister (bkp_dr1, firstbackupdata);

и

Bkp_readbackupregister (bkp_dr1)

и сделать некоторые определения для BKP_DR

Mrburnette
Ср 27 мая 2015 г. 12:33
Или вы думаете, что это было бы действительно запутанно? Если обычные резервы чтения/записи [0] для обоих средних & Устройства с высокой плотностью, я не вижу путаницы. На самом деле, возможно, замаскируйте байт для загрузчика и байт для пользователя ... uint8_t

Итак, код пользователя может записаться на [0], но только как байт. [1] ... [9] на средней плотности и [1] ... [41] На высокой плотности доступны пользователь.

Я просто бродю, так как вижу только эту область, необходимую для сохранения состояний времени, в то время как UC включен.

Луча

гиперион
Чт 22 марта 2018 г., 16:44
привет. Я пробую откалибровать RTC по этому методу.
Не нашел английский ручной для этого. Только на русском языке
http: // spec-project.UCOZ.ru/index/kalib ... M32F1/0-14
Для калибровки мне нужен запись BIT 1 в BKP_RTCCR_CCO РЕГИСТРА.
Пример BKP->Rtccr | = bkp_rtccr_cco;

Я правильно понимаю, команда будет

bkp_init ();
bkp_enable_writes ();
bkp_write (bkp_rtccr_cco, 0x1);

Я пытаюсь прочитать после этого
for (uint8_t iii = 0; iii<20; iii ++) {
Сериал.print (bkp_read (iii), hex);
Сериал.print ("");
}
и читать только нули.

Что я делаю не так?

гиперион
Чт 22 марта 2018 г., 17:41
О, письмо сейчас работает нормально.
Но чтение все еще возвращает ноль.
не понимаю, что я делаю не так
Создать запрос на вытягивание для этого обновления
https: // github.com/hyperion11/arduino_stm32/pull/1

Радиотепика Bluepill

IRLIB на STM32?

DHT11/22 LIB на STM32