Перейти к содержанию
    

2 часа назад, Dvorkin сказал:

а штатную - выкинуть.

Штатную - это какую? У МК штатная - записана в мануале. Её предлагаете выкинуть? Ну-ну. Ознакомьтесь с референс-мануалом. Всё, что запитано от домена бэкапа, то есть от батарейки, оно после сброса не изменяет своего состояния и продолжает работать. Инициализация RTC не требуется, если не нужно изменять текущее время. RTC продолжают работать с заданными настройками даже после выключения питания (при наличии "часовой" батарейки). Есть некоторые особенности синхронизации для получения текущего времени, но это не относится к инициализации.

.... Вот, даже не поленился открыть мануал и процитировать выдержку из его:

Resetting the RTC
The calendar shadow registers (RTC_SSR, RTC_TR and RTC_DR) and some bits of the
RTC status register (RTC_ISR) are reset to their default values by all available system reset
sources.
On the contrary, the following registers are reset to their default values by a Backup domain
reset and are not affected by a system reset: the RTC current calendar registers, the RTC
control register (RTC_CR), the prescaler register (RTC_PRER), the RTC calibration register
(RTC_CALR), the RTC shift register (RTC_SHIFTR), the RTC timestamp registers
(RTC_TSSSR, RTC_TSTR and RTC_TSDR), the RTC tamper configuration register
(RTC_TAMPCR), the RTC backup registers (RTC_BKPxR), the wakeup timer register
(RTC_WUTR), the Alarm A and Alarm B registers (RTC_ALRMASSR/RTC_ALRMAR and
RTC_ALRMBSSR/RTC_ALRMBR), and the Option register (RTC_OR).
In addition, when it is clocked by the LSE, the RTC keeps on running under system reset if
the reset source is different from the Backup domain reset one (refer to the RTC clock
section of the Reset and clock controller for details on the list of RTC clock sources not
affected by system reset). When a Backup domain reset occurs, the RTC is stopped and all
the RTC registers are set to their reset values.

Сброс часов реального времени
Теневые регистры календаря (RTC_SSR, RTC_TR и RTC_DR) и некоторые биты регистра состояния RTC (RTC_ISR) сбрасываются в значения по умолчанию всеми доступными источниками системного сброса.
Напротив, следующие регистры сбрасываются до значений по умолчанию при сбросе резервного домена и не затрагиваются системным сбросом: регистры текущего календаря RTC, регистр управления RTC (RTC_CR), регистр прескалера (RTC_PRER), RTC регистр калибровки (RTC_CALR), сдвиговый регистр RTC (RTC_SHIFTR), регистры меток времени RTC (RTC_TSSSR, RTC_TSTR и RTC_TSDR), регистр конфигурации тампера RTC (RTC_TAMPCR), резервные регистры RTC (RTC_BKPxR), регистр таймера пробуждения (RTC_WUTR) , регистры сигнализации A и сигнализации B (RTC_ALRMASSR/RTC_ALRMAR и RTC_ALRMBSSR/RTC_ALRMBR) и регистр опций (RTC_OR).
Кроме того, когда он тактируется LSE, RTC продолжает работать при сбросе системы, если источник сброса отличается от источника сброса резервного домена (подробную информацию о списке см. в разделе часов RTC контроллера сброса и синхронизации). Источники часов RTC, на которые не влияет сброс системы). Когда происходит сброс резервного домена, RTC останавливается, и для всех регистров RTC устанавливаются значения сброса.

Именно поэтому, инициализация уже запущенного RTC - не требуется. Её нужно выполнять только при изменении текущего времени/даты. RTFM!
Хотяяя, если вы опираетесь только на то, что написано в HAL - ну тогда тут всё ясно. Халоводы мануалов то не читают, и незнание матчасти им простительно 🙂 

 

2 часа назад, Dvorkin сказал:

И с чем же вы там разобрались?

Насколько помню, разобрали все возможные случаи, включая неверно выбранный источник тактирования, неверно выбранные предделители, кварц с ±30 ppm, несмытый флюс, и даже косяк самого МК в виде использования соседнего пина, о котором сказано в эррате. 

Изменено пользователем EdgeAligned

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 5/8/2024 at 6:14 PM, EdgeAligned said:

Штатную - это какую? У МК штатная - записана в мануале. Её предлагаете выкинуть?

Имелась в виду инициализация MX_RTC_Init(), сгенерированная CubeIDE. 

On 5/8/2024 at 6:14 PM, EdgeAligned said:

Хотяяя, если вы опираетесь только на то, что написано в HAL - ну тогда тут всё ясно. Халоводы мануалов то не читают, и незнание матчасти им простительно 🙂

Все понятно, я в религиозных войнах не участвую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что вы, никаких холиваров! Но CubeMX не отменяет чтение мануалов! Можно писать с помощью HAL, но мануальчики читать всё равно следует. А то так и будет, что "нажатие кнопки Reset портит счетчик субсекунд" 🙂 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 5/13/2024 at 12:59 PM, EdgeAligned said:

Что вы, никаких холиваров! Но CubeMX не отменяет чтение мануалов! Можно писать с помощью HAL, но мануальчики читать всё равно следует. А то так и будет, что "нажатие кнопки Reset портит счетчик субсекунд" 🙂 

Я вам про Фому, а вы мне про Ерему... Тогда вообще этот форум закрывать надо, ибо все написано в мануалах, и нефиг задавать глупые вопросы. И про уход частоты кварцевых резонаторов написано, и про технологию изготовления плат, а уж errata sheet - вообще настольная книга каждого разработчика.

Однако, как вы справедливо отметили:

On 5/8/2024 at 6:14 PM, EdgeAligned said:

Насколько помню, разобрали все возможные случаи, включая неверно выбранный источник тактирования, неверно выбранные предделители, кварц с ±30 ppm, несмытый флюс, и даже косяк самого МК в виде использования соседнего пина, о котором сказано в эррате. 

Значит, остаются вопросы у людей. Ошибаются, что-то не учитывают. Вот для того форум и нужен, чтобы делиться опытом.

И то, что я написал про особенности инициализации RTC - не все знают, и кому-то будет полезно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так тут же и было это написано, просто вы не читали.

Что касается "особенностей инициализации", то, боюсь, в этом вопросе вы не правы. Вы должны были объяснить, что после системного сброса запущенные ранее RTC продолжают работать, потому инициализацию проводить вообще не нужно, часы уже работают с заданными ранее настройками, поскольку запитаны от отдельного несбрасываемого системным сбросом домена. 

Есть еще одна "чудесная фича", которую пользователи HAL не знают в силу нечитания мануалов. LSI выключается при системном сбросе. А LSE - не выключается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, Dvorkin сказал:

И то, что я написал про особенности инициализации RTC - не все знают, и кому-то будет полезно.

Если сократить 5 страниц до одного предложения - в чем особенности? Ну или ссылку на пост прикрепите, пожалуйста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 5/23/2024 at 4:03 PM, Arlleex said:

Если сократить 5 страниц до одного предложения - в чем особенности? Ну или ссылку на пост прикрепите, пожалуйста.

и

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дворкин, перестаньте флудить 🙂 Всё тут уже разобрали, прочитайте тему от начала до конца. И прочтите мануал, в конце концов - хоть будете знать, как RTC работают.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 11.01.2024 в 11:01, RDutch сказал:

Временное решение было таким: основываясь на 10 экземплярах устройства, был вычислен калибровочный коэффициент

Возникла идея при очередной синхронизации вычислить дельту, на сколько время убежало. На эту дельту откалибровать часы. Делать эту операцию при каждой синхронизации. Таким образом каждое устройство будет калиброваться самостоятельно. И чем чаще оно катается без связи - тем точнее будет калибровка
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 15.01.2024 в 18:48, jcxz сказал:

Или скажем - многоквартирный дом, оборудованный такими счётчиками. И каждый Новый год жители неделю сидят без света, так как управляющая компания вынуждена снимать все счётчики в доме и выносить их на прожарку.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

RM0090 Reset and clock control for   STM32F405xx/07xx and STM32F415xx/17xx(RCC)

 

7.2.11 Internal/external cl ock measurement using TIM5/TIM11
It is possible to indirectly measure the frequencies of all on-board clock source generators 
by means of the input capture of TIM5 channel4 and TIM11 channel1 as shown in Figure 23 
and Figure 24.
Internal/external clock measurement using TIM5 channel4
TIM5 has an input multiplexer which allows choosing whether the input capture is triggered 
by the I/O or by an internal clock. This selection is performed through the TI4_RMP [1:0] bits 
in the TIM5_OR register.
The primary purpose of having the LSE connected to the channel4 input capture is to be 
able to precisely measure the HSI (this requires to have the HSI used as the system clock 
source). The number of HSI clock counts between consecutive edges of the LSE signal 
provides a measurement of the internal clock period. Taking advantage of the high precision 
of LSE crystals (typically a few tens of ppm) we can determine the internal clock frequency 
with the same resolution, and trim the source to compensate for manufacturing-process 
and/or temperature- and voltage-related frequency deviations.
The HSI oscillator has dedicated, user-accessible calibration bits for this purpose.

The basic concept consists in providing a relative measurement (e.g. HSI/LSE ratio): the 
precision is therefore tightly linked to the ratio between the two clock sources. The greater 
the ratio, the better the measurement.
It is also possible to measure the LSI frequency: this is useful for applications that do not 
have a crystal. The ultralow-power LSI oscillator has a large manufacturing process 
deviation: by measuring it versus the HSI clock source, it is possible to determine its 
frequency with the precision of the HSI. The measured value can be used to have more 
accurate RTC time base timeouts (when LSI is used as the RTC clock source) and/or an 
IWDG timeout with an acceptable accuracy.
Use the following procedure to measure the LSI frequency:
1. Enable the TIM5 timer and configure channel4 in Input capture mode.
2.  Set the TI4_RMP bits in the TIM5_OR register to 0x01 to connect the LSI clock 
internally to TIM5 channel4 input capture for calibration purposes.
3.  Measure the LSI clock frequency using the TIM5 capture/compare 4 event or interrupt.
4.  Use the measured LSI frequency to update the prescaler of the RTC depending on the 
desired time base and/or to compute the IWDG timeout.

 

-----------------------------

Счетчик таймера T5/ -32х битный, соответственно в него влезет очень много клоков от LSE :). Вам повезло 

 

Изменено пользователем Михась

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...