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

Проблемы с RTC у STM32

в интернете много тем посвещенных проблемах работы RTC у этих контроллерах при работе с LSE.

я тоже несколько раз сталкивался с этим.

виснет на опросе при инициализации кварца

 

	/* Enable the LSE OSC */
RCC_LSEConfig(RCC_LSE_ON);

/* Wait till LSE is ready */
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {	}

 

причем даже на платах от STM...

в форумах советуют ожидать готовности и переключаться на LSI

другие предлагают ставить конднсаторы 7 пФ

третьи прогреть феном доржки около кварца..

но реального окончательного решения этой проблемы я так и не нашел.

напаял батарейку к выводу BAT платки дискавери

 

601071cf40d1.png

 

заменив резистор R26 диодом.

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

у коллег такая же проблема уже с рабочими процами STM32f103

существет ли решение проблемы?

 

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


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

Посмотрите сюда:

http://electronix.ru/forum/index.php?showtopic=134920

Буквально на этой неделе я сам задавал вопрос по RTC.

Но что касается Вашей проблемы я предполагаю такую причину:

По крайней мере у меня генератор стартует устойчиво с обычным кварцем 12пФ и вообще без конденсаторов.

Цитата:

Было несколько случаев, когда LSE не стартовал при включении питания. Удалось полечить так: Функция инициализации часов проверяет, запущены ли часы.

Если нет, то перед тем, как что-то делать (настраивать регистры часов), делается задержка 10ms. После этого генератор запускается надежно. Может кому поможет.

Моя версия такая: При нарастании напряжения питания процессор стартует при достижении 2,0В. Если при этом напряжении пытаться запускать LSE, то он может не стартовать. Причём когда напряжение нарастает до нормы, это уже не помогает запуску. А если подождать пока напряжение питание нарастёт до уровня 3,3В, то LSE легко запускается.

 

Набрёл я на эту версию так: Обратил внимание, что если стартовать программу с дебагера или внешним ресетом, то кварц запускается всегда. А при подаче питания иногда бывают сбои с запуском LSE.

 

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


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

Я инициализировал так в рабочем проекте

и работало неплохо везде, (начиная с макетки) с кварцами 6 пФ и 12 пФ

правда сама точность часов (например уход за сутки) Вас очень огорчит,

но не расстраивайтесь, попробуйте откалибровать RTC,

а для утешения посмотрите на точность хода часов на Вашем компе

(выключив синхронизацию с интернетом)

]int  RtcInit  (void)
{
 //разрешить тактирование модулей управления питанием и управлением
 //резервной областью - enable APB1 clocks
 RCC->APB1ENR |= RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN;
 // disable backup domain write protection
//разрешить доступ к области резарвных данных
 PWR->CR |= PWR_CR_DBP;
 //если часы выключены - инициализировать их
//Bit 15 RTCEN: RTC clock enable
//Set and cleared by software.
//0: RTC clock disabled
//1: RTC clock enabled
if ((RCC->BDCR & RCC_BDCR_RTCEN) != RCC_BDCR_RTCEN)
{
	//выполнить сброс области резервных данных
	// reset Backup Domain
	//Bit 16 BDRST: Backup domain software reset
	//Set and cleared by software.
	//0: Reset not activated
	//1: Resets the entire Backup domain
	RCC->BDCR |= RCC_BDCR_BDRST;
	RCC->BDCR &= ~RCC_BDCR_BDRST;
	//выбрать источником тактовых импульсов внешний кварц 32768 и подать тактирование
	//Bit 15 RTCEN: RTC clock enable
	//Set and cleared by software.
	//0: RTC clock disabled
	//1: RTC clock enabled
	//Bits 9:8 RTCSEL[1:0]: RTC clock source selection
	//Set by software to select the clock source for the RTC. Once the RTC clock source has been selected,
	// it cannot be changed anymore unless the Backup domain is reset. The BDRST bit can be used to reset them.
	//00: No clock
	//01: LSE oscillator clock used as RTC clock10: LSI oscillator clock used as RTC clock
	//11: HSE oscillator clock divided by 128 used as RTC clock
	RCC->BDCR |= RCC_BDCR_RTCEN | RCC_BDCR_RTCSEL_LSE;
	//установка маски разрешения секундных прерываний
	//Bit 0 SECIE: Second interrupt enable
	//0: Second interrupt is masked.
	//1: Second interrupt is enabled.
	RTC->CRH |= RTC_CRH_SECIE;	///!!!!!!!!!!!!SECOND INTERRUPT ENABLE
	//Bit 4 CNF: Configuration flag
	//This bit must be set by software to enter in configuration mode so as to allow new values to
	//be written in the RTC_CNT, RTC_ALR or RTC_PRL registers. The write operation is only
	//executed when the CNF bit is reset by software after has been set.
	//0: Exit configuration mode (start update of RTC registers).
	//1: Enter configuration mode.
	RTC->CRL |= RTC_CRL_CNF;
	//If the input clock frequency (fRTCCLK) is 32.768 kHz, write 7FFFh in this register to get a
	//signal period of 1 second.
	RTC->PRLH = 0;
	RTC->PRLL = 0x8000;		 //тактирование от внешнего кварца

	AFIO->EVCR =0xAD; //PC13-calibration clock output enable

	BKP->RTCCR |=	BKP_RTCCR_CCO; //Setting this bit outputs the 
	//RTC clock with a frequency divided by 64 on the TAMPER pin	
BKP->RTCCR |=	BKP_RTCCR_ASOS | BKP_RTCCR_ASOE;
	//0: Exit configuration mode (start update of RTC registers).
	RTC->CRL &= ~RTC_CRL_CNF;
//установить бит разрешения работы и дождаться установки бита готовности
	RCC->BDCR |= RCC_BDCR_LSEON;
	while ((RCC->BDCR & RCC_BDCR_LSEON) != RCC_BDCR_LSEON){}

//while ((RCC->BDCR & RCC_BDCR_LSERDY) != RCC_BDCR_LSERDY);	//вариант

//Bit 3 RSF: Registers synchronized flag
//This bit is set by hardware at each time the RTC_CNT and RTC_DIV registers are updated
//and cleared by software. Before any read operation after an APB1 reset or an APB1 clock
//stop, this bit must be cleared by software, and the user application must wait until it is set to
//be sure that the RTC_CNT, RTC_ALR or RTC_PRL registers are synchronized.
//0: Registers not yet synchronized.
//1: Registers synchronized.
	RTC->CRL &= (uint16_t)~RTC_CRL_RSF;
	while((RTC->CRL & RTC_CRL_RSF) != RTC_CRL_RSF){}
	return	0;
}
  return	1;
}

 

 

тут еще есть

RTC Init

Изменено пользователем IgorKossak
[codebox] для длинного кода, [code] - для короткого!!!

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


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

У меня на STM32F207 LSE генератор запускается так.

/* PWR */
  PWR->CR |= PWR_CR_DBP;    // Disable Backup Domain write protection
  PWR->CSR =
    PWR_CSR_EWUP        * 0 |    // Enable WKUP pin
    PWR_CSR_BRE        * 1;    // Backup regulator enable

/* Теперь можно включить НЧ генератор */
  RCC->BDCR =
    RCC_BDCR_LSEON        * 1 |    // External low-speed oscillator enable
    // RCC_BDCR_LSERDY        * 0 |
    RCC_BDCR_LSEBYP        * 0 |    // External low-speed oscillator bypass
    RCC_BDCR_RTCSEL_0    * 1 |    // RTC clock source selection: LSE
    RCC_BDCR_RTCEN        * 1 |    // RTC clock enable
    RCC_BDCR_BDRST        * 0;    // Backup domain software reset

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

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


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

У меня серийное изделие на stm32f407. В ТУ и МП есть проверка хода. При испытаниях лично тестировал работу частов на 5 изделиях. В том числе прямым измерением на отрезках до месяца. Тестировал ход часов при низкой температуре и в печке. Справедливости ради скажу, что часы в stm32f4 абсолютно другие, чем в stm32f1.

У меня в плате контролируется питание, но я после старта инициализирую частоты, шины, пины и после этого делаю задержку. Это у меня повелось ещё с 80-тых годов. В принципе, ядро процессора работает уже начиная с 1.2V а на плате у нас 3.3, и очевидно что несвоевременная инициализация внешней периферии может приводить к нюансам. Плюс я исхожу из того, что у некоторых источников имеется разная кривая нарастания питания. Короче - исторически сложилось. ))

Теперь по работе непосредственно RTC. Работает отлично. Случаев отставания и т.п. замечено не было. Точность очень высокая. На одной плате получился уход пару сек в месяц. Высокая стабильность по температуре. По сути, для моей заявленной погрешности, абсолютно отсутствует необходимость корректировать в зависимости от температуры. При многократных включениях/ выключениях прибора никаких уходов не заметил. Не забывайте, что при инициализации требуется сначала определить, требуется ли она, или часы работают.

Заметил ещё один момент. Для контроля я вывожу частоту с часов при калибровке. Этот выход при работе используется, как выход сигнализации. Для переключение требуется определённая процедура. Если порт инициализирован как выход частоты, то при выключении питания, по свалу питания я обрабатываю прерывание и перевожу этот выход в 3-е состояние. Иначе жрёт. При включении перевожу назад. Если не верно это делать, то часы приостанавливаются и начинают отставать при вкл/ отключ.

Сейчас прибор выпускается уже 2 года. Вопросов нет. Проблем с отказами часов не было. У меня коммерческий учёт с записью архивов и выход из строя кварца часового равнозначен полному выходу из строя прибора.

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


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

Решили сделать так, ставим на плату генератор меандра 74AUP1Z125

а от кварца 32кГц его тактируем

на RTC вход IN у самого процессора STM подаем меандр с генератора.

кто нибудь делал подобным образом?

 

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


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

Решили сделать так, ставим на плату генератор меандра 74AUP1Z125

а от кварца 32кГц его тактируем

на RTC вход IN у самого процессора STM подаем меандр с генератора.

кто нибудь делал подобным образом?

Делать то наверное так можно. Но тогда этот генератор придётся питать от батарейки. И сколько лишних микроампер он сожрёт?

Вряд ли это положительно скажется на времени автономной работы часов.

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


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

Делать то наверное так можно. Но тогда этот генератор придётся питать от батарейки. И сколько лишних микроампер он сожрёт?

Вряд ли это положительно скажется на времени автономной работы часов.

походу у STM блоку RTC не хватает мощи для раскачки кварца

поэтому это единственный выход

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


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

походу у STM блоку RTC не хватает мощи для раскачки кварца

поэтому это единственный выход

То есть то что я писал - впустую? Ещё раз повторяю, отлично всё работает от -10 до +50, в условиях IP54. Не было ни единого вопроса. Вопросы с запуском возникали на LPC1765 (пока они не исправили их).

Кстати мерю напряжение на батарейке. Кое какие вещи храню в BKP памяти. Ни малейшей проблемы. Кварцы применяем JAUCH Q0.032768-MMTF32-12.5-20-T1. Кондёры ставим.

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


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

То есть то что я писал - впустую? Ещё раз повторяю, отлично всё работает от -10 до +50, в условиях IP54. Не было ни единого вопроса. Вопросы с запуском возникали на LPC1765 (пока они не исправили их).

Кстати мерю напряжение на батарейке. Кое какие вещи храню в BKP памяти. Ни малейшей проблемы. Кварцы применяем JAUCH Q0.032768-MMTF32-12.5-20-T1. Кондёры ставим.

3 вида кварца, 3 разных stm (103 107 и 407)- у ВСЕХ!!!

проблемы с RTC.

3 прибора возвратили из казахстана после работы 2-х лет

работающие без проблем генераторы засбоили.

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


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

3 вида кварца, 3 разных stm (103 107 и 407)- у ВСЕХ!!!

проблемы с RTC.

3 прибора возвратили из казахстана после работы 2-х лет

работающие без проблем генераторы засбоили.

ну и что показал анализ причин отказов?

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


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

после работы 2-х лет работающие без проблем генераторы засбоили.

 

А вы платы хорошо отмываете? Для RTC на STM весь критичны токи утечек, конкретно для F103 - устройство возвращали по гарантии, полностью рабочее, но RTC не стартует совсем. Сняли процессор, а под ним весьма приличный остаток флюса. Промыли, запаяли обратно - все работает. Было еще несколько возвратов - просто мыли в спирте и дефект устранялся. После общения с подрядчиком-монтажником выяснилось, что нарушения технологии были у них. Больше таких проблем не было.

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


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

3 вида кварца, 3 разных stm (103 107 и 407)- у ВСЕХ!!!

проблемы с RTC.

Первая версия прибора выпускалась с 2000 года. Использовался Dallas x51. Намучились с кварцами часовыми. Очень много отказов было. Пришли к волевому решению брать только JAUCH. На тот момент поставщик этих кварцев гарантировал, что проблемы уйдут. Он не обманул. С этого момента вопросы постепенно сошли на нет. Я же писал, прибор коммерческий и выход из строя часового кварца равноценен выходу из строя прибора. Я сейчас перезапускаю на LSI, но особо толку нет. Часы сбиваются, и что-то гарантировать я не могу. Выход из строя кварца иногда случается, но сейчас это крайне редкое событие.

 

С точки зрения запуска, MSP от TI похуже будет. Для уменьшения потребления там вообще амплитуда никакая ... Надо очень тщательно подходить к цепям и разводке.

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


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

Советую почитать AN2867 от ST.

Эти микроконтроллеры предпочитают часовые кварцы с маленькими нагрузочными емкостями(CL). Есть даже таблица с совместимыми моделями.

Если вы просто ставите маленькие емкости к обычным кварцам - то они просто не заводятся.

У меня с RTC и нормальными кварцами никогда проблем не было, использую практически все серии STM32.

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


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

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

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

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

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

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

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

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

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

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