Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Микроконтроллеры других производителей

Микроконтроллеры других производителей Все, что касается микроконтроллеров и НЕ подошло в раздел Microchip.

Ответ
 
Опции темы Опции просмотра
Старый 31.05.2016, 10:58   #1
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,126
Вес репутации: 4071/111
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию STM32F4 RTC synchronization

Здравствуйте!

У STM32F1 модуль RTC был на основе 32-х разрядного счетчика, который считал время UTC (секунды с 1900-го года), а вот в STM32F4 модуль уже содержит полноценный календарь-часы с долями секунд, можно и тысячные доли получить. Так вот у последнего есть два вида калибровки (грубая и точная), но она для всяких там отклонений частоты задающего генератора. Допустим, что мы откалибровали часы и часы идут с точностью +/- полсекунды, а теперь нам нужно, чтобы часы шли вообще секунда в секунду, т.е. требуется синхронизация. И есть у нас только GPS-модуль который выдает время и импульсы 1PPS. И хочется этими импульсами синхронизироать время, т.к. микроконтроллер поддерживает такую синхронизацию (вычитается или прибавляется некоторое количество субсекундных импульсов с момента прихода импульса синхронизации 1PPS на вход МК (по внешнему прерыванию)). Кто-нибудь делал такое? Хотя бы две платы STM32F4DISCOVERY соединить и с одной из них подать импульсы 1Гц на вторую, а затем обоим платам широковещательным запросом задать время.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 31.05.2016, 11:48   #2
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 44
Сообщений: 3,404
Вес репутации: 5249/122
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: STM32F4 RTC synchronization

Читал? http://www.st.com/content/ccc/resour...DM00025071.pdf
dosikus вне форума   Ответить с цитированием
Старый 31.05.2016, 11:57   #3
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,126
Вес репутации: 4071/111
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: STM32F4 RTC synchronization

Цитата:
Сообщение от dosikus Посмотреть сообщение
Читал и в данный момент читаю. Понятно, что можно, но одно дело рисунок и текст, а другое как в железе сделать. Вот пока взял STM32F4DISCOVERY, на PC13 вывел сигнал 1Hz, пусть это будет эталонный сигнал 1PPS, подаю его на вход другого микроконтроллера, на свободный пин PB15, с этого пина буду обрабатывать внешние прерывания. Попробую прочитать регистр субсекунд в момент внешнего прерывания, а потом разницу записать в регистр RTC_SHIFTR. Вроде так.

Но у меня эти импульсы будут все время поступать на вход 1PPS, и я не понимаю, неужели нужно каждую секунду прерываться и корректировать (если значение чуть уходит). Не работал я еще с внешней синхронизацией.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 15.06.2016, 22:22   #4
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,126
Вес репутации: 4071/111
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: STM32F4 RTC synchronization

Кому интересно, результат пока такой: опорные часы на DS1306 формируют сигнал 1PPS с выхода 1Hz микросхемы. Этот сигнал поступает на два микроконтроллера и на вход PB15, по фронту импульса 1PPS попадаем в обработчик внешнего прерывания (EXTI), в прерывании опрашиваем регистр SSR, если он имеет не нулевое значение, то подводим часы в ту или иную сторону. Кварцы подобраны так, что часы RTC1 спешат, а RTC2 отстают относительно опорных.

Широковещательным запросом по RS485 задаем время с компьютера, до секунд, при записи нового времени регистр SSR у обоих микроконтроллеров обнуляется, но затем с течением времени появляется расхождение. Время идет с точностью в 0,001 сек на RTC1 и на RTC2. Спешащие часы всегда переводятся назад (через RTC_SHIFTR) и идут правильно, а отстающие периодически (1 раз в 8 секунд, после коррекции) показывают время в миллисекундах .000 примерно на полсекунды, а потом идут тоже с точностью 0,001 сек.

Код обработчика внешнего прерывания такой:
Код:
// *************************************************************************** //
// Для PREDIV_S равного 2048.
ssr = RTC_GetSubSecond();  // Читаем до сдвига.

if(ssr)
  {
    if(ssr>1023) // Если часы модуля спешат (Работает правильно).
      {
        // Delay (seconds) = SUBFS / ( PREDIV_S + 1 )
        status = RTC_SynchroShiftConfig(RTC_ShiftAdd1S_Reset, 2047-ssr+1);  // Переводим время назад.
      }
    else              // Если часы модуля отстают.
      {
        // Advance (seconds) = ( 1 - ( SUBFS / ( PREDIV_S + 1 ) ) )            
        status = RTC_SynchroShiftConfig(RTC_ShiftAdd1S_Set, 2047-ssr+1);  // Переводим время вперед.
      }
  }
Кто что посоветует?

PS: Читал RM0090, AN3371, AN3133. Во всех этих документах методика отличается. Как-то плохо описан процесс. Даже я запутался.
Миниатюры
Синхронизация.JPG  
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 16.06.2016, 15:00   #5
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,126
Вес репутации: 4071/111
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Товарищи ученые, доценты с кандидатами, выручайте! Это один я такой тупой, что не понимаю Example2. И пример такой взяли в середине секунды 500 мс плюс/минус 100 мс. При переводе времени вперед на 100 мс что должно получиться?
Было: 3:25:32.511 субсекунд = 3:25:32.500 миллисекунд
Стало: 3:25:33.1433 субсекунд = как бы по AN3133 соответствует 3:25:32:600 миллисекунд
Субсекунды - это доли от PREDIV_S = 1023.
Т.к. SSR=1433 превышает PREDIV_S после сдвига вперед, то корректное время на 1 секунду меньше чем прочитано из RTC_TR.
Цитата:
Bits 15:0 SS: Sub second value
SS[15:0] is the value in the synchronous prescaler’s counter. The fraction of a second is
given by the formula below:
Second fraction = ( PREDIV_S - SS ) / ( PREDIV_S + 1 )
Note: SS can be larger than PREDIV_S only after a shift operation. In that case, the correct
time/date is one second less than as indicated by RTC_TR/RTC_DR.
Не пойму, как после сдвига получить это корректное время или оно само получится, нужно только подождать пока SSR из 1433 досчитает (считает от большего к меньшему) до 409-ти (соответствует 600 мс).

PS: Я ожидал, что после сдвига должно получиться 3:25:32.409 субсекунд = 3:25:32.600 мс.
Миниатюры
Example 2.PNG  
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 16.06.2016 в 15:16.
Pridnya вне форума   Ответить с цитированием
Старый 16.06.2016, 16:10   #6
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,126
Вес репутации: 4071/111
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Не пойму, как после сдвига вперед получить это корректное время?
Все просто: после сдвига вперед, в случае, если RTC_SSR превышает (PREDIV_S+1) нужно из RTC_SSR вычесть (PREDIV_S+1), а затем преобразовать остаток в миллисекунды. И из секунд вычесть 1 секунду. И часы синхронизируются до тысячной доли. Это как раз этот случай.
Цитата:
Note: SS can be larger than PREDIV_S only after a shift operation. In that case, the correct
time/date is one second less than as indicated by RTC_TR/RTC_DR.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 17.06.2016, 10:42   #7
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,126
Вес репутации: 4071/111
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: STM32F4 RTC synchronization

Всем доброго дня!
Заработала синхронизация времени по внешнему сигналу. Только один маленький вопрос появился: в рабочем журнале обнаружил, что перед синхронизацией и после неё время отличается примерно на 3 мс. Отладчиком измерил количество циклов, которые программа проводит в прерывании и удивился - сдвиг (или синхронизация) выполняется почти за 500000 циклов, на частоте 168 MHz это и есть те самые 3 мс. Для прерывания это очень много. И все это время уходит на выполнение функции RTC_SynchroShiftConfig() из периферийной библиотеки (SPL)
Код:
#include<stdio.h>

struct __FILE { int handle; /* Add whatever is needed */ };
FILE __stdout;
FILE __stdin;

int fputc(int ch, FILE *f) 
{
  ITM_SendChar(ch);    
  return(ch);
}

CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CYCCNT       = 0;
DWT->CTRL        |= DWT_CTRL_CYCCNTENA_Msk;                
stat = RTC_SynchroShiftConfig(RTC_ShiftAdd1S_Reset, 2048-ssr);  // Выполняется за 3 мс???
cycles=DWT->CYCCNT;
printf("cycles = %d\n",cycles);    // ~496810 циклов
printf("status = %d\n",stat);        // 1 (успешно)
Вот код этой функции
Код:
#define SHPF_TIMEOUT             ((uint32_t) 0x00001000)

ErrorStatus RTC_SynchroShiftConfig(uint32_t RTC_ShiftAdd1S, uint32_t RTC_ShiftSubFS)
{
  ErrorStatus status = ERROR;
  uint32_t shpfcount = 0;

  /* Check the parameters */
  assert_param(IS_RTC_SHIFT_ADD1S(RTC_ShiftAdd1S));
  assert_param(IS_RTC_SHIFT_SUBFS(RTC_ShiftSubFS));

  /* Disable the write protection for RTC registers */
  RTC->WPR = 0xCA;
  RTC->WPR = 0x53;
  
  /* Check if a Shift is pending*/
  if ((RTC->ISR & RTC_ISR_SHPF) != RESET)
  {
    /* Wait until the shift is completed*/ Ждем состояние бита или выходим по таймауту
    while (((RTC->ISR & RTC_ISR_SHPF) != RESET) && (shpfcount != SHPF_TIMEOUT))
    {
      shpfcount++;
    }
  }

  /* Check if the Shift pending is completed or if there is no Shift operation at all*/
  if ((RTC->ISR & RTC_ISR_SHPF) == RESET)
  {
    /* check if the reference clock detection is disabled */
    if((RTC->CR & RTC_CR_REFCKON) == RESET)
    {
      /* Configure the Shift settings */
      RTC->SHIFTR = (uint32_t)(uint32_t)(RTC_ShiftSubFS) | (uint32_t)(RTC_ShiftAdd1S);
    /*Статус успешно, поэтому эта не выполняется, внутри неё тоже таймаут есть, в два раза больше*/
      if(RTC_WaitForSynchro() == ERROR)
      {
        status = ERROR;
      }
      else
      {
        status = SUCCESS;
      }
    }
    else
    {
      status = ERROR;
    }
  }
  else
  {
    status = ERROR;
  }

  /* Enable the write protection for RTC registers */
  RTC->WPR = 0xFF;
  
  return (ErrorStatus)(status);
}
и нигде не могу найти, откуда взялся такой таймаут, почему он равен столько-то, в RM0090 есть упоминание
Цитата:
RM0090
26.3.8 RTC synchronization
...
As soon as a shift operation is initiated by a write to the RTC_SHIFTR register, the SHPF
flag is set by hardware to indicate that a shift operation is pending. This bit is cleared by
hardware as soon as the shift operation has completed.
Здесь бы вопрос задать, а почему этот таймаут есть в функции SPL, а в RM0090 про него не упоминается, в Errata тоже.
Миниатюры
Рабочий журнал.PNG   Циклов и статус.PNG  
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 17.06.2016, 12:37   #8
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,126
Вес репутации: 4071/111
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: STM32F4 RTC synchronization

Цитата:
Сообщение от Pridnya Посмотреть сообщение
/*Статус успешно, поэтому эта не выполняется, внутри неё тоже таймаут есть, в два раза больше*/
if(RTC_WaitForSynchro() == ERROR)
{
status = ERROR;
}
Она и выполняется ~500000 циклов, её кусок do-while
Цитата:
#define SYNCHRO_TIMEOUT ((uint32_t) 0x00020000)

ErrorStatus RTC_WaitForSynchro(void)
{
...
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CYCCNT = 0;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
/* Wait the registers to be synchronised */
do
{
synchrostatus = RTC->ISR & RTC_ISR_RSF;
synchrocounter++;
} while((synchrocounter != SYNCHRO_TIMEOUT) && (synchrostatus == 0x00));
cycles=DWT->CYCCNT;
printf("cycles = %d\n",cycles); //
printf("synchrocounter = %d\n",synchrocounter); //

cycles = 489938
synchrocounter = 13609
cycles = 491270
synchrocounter = 13646
cycles = 491558
synchrocounter = 13654
cycles = 496634
synchrocounter = 13795
Причем выходит из do-while не по таймауту, а по состоянию флага RSF, таймаут равен 0x20000=131072, а натикало 13654 (в 10 раз меньше). Откуда такой интервал ожидания RSF?неужели синхронизация регистров так долго выполняется?
Цитата:
Bit 5 RSF: Registers synchronization flag
This bit is set by hardware each time the calendar registers are copied into the shadow
registers (RTC_SSRx, RTC_TRx and RTC_DRx). This bit is cleared by hardware in
initialization mode, while a shift operation is pending (SHPF=1), or when in bypass shadow
register mode (BYPSHAD=1). This bit can also be cleared by software.
0: Calendar shadow registers not yet synchronized
1: Calendar shadow registers synchronized
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 17.06.2016, 12:38   #9
dosikus
Senior Member
 
Аватар для dosikus
 
Регистрация: 05.06.2007
Возраст: 44
Сообщений: 3,404
Вес репутации: 5249/122
dosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond reputedosikus has a reputation beyond repute
По умолчанию Re: STM32F4 RTC synchronization

а мыши плакали, кололись, но продолжали юзать SPL...
dosikus вне форума   Ответить с цитированием
Старый 17.06.2016, 12:40   #10
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,126
Вес репутации: 4071/111
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: STM32F4 RTC synchronization

Цитата:
Сообщение от dosikus Посмотреть сообщение
а мыши плакали, кололись, но продолжали юзать SPL...
Я понимаю, что что-то не то, но не до такой же степени. Так не должно быть, но как должно, я пока не понял. И про этот таймаут в RM0090 не упоминается (он в два раза больше предыдущего). Это ж бред какой-то. Откуда эти таймауты? Почему так долго?
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 17.06.2016, 14:34   #11
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,126
Вес репутации: 4071/111
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: STM32F4 RTC synchronization

#define SYNCHRO_TIMEOUT ((uint32_t) 0x00020000)
Чтобы не ждать RSF нужно установить BYPSHAD=1, для этого вызываем
Код:
RTC_BypassShadowCmd(ENABLE);    // BYPSHAD=1, прямой доступ к регистрам RTC (теневые регистры не используются).
, а после этого внутри RTC_SynchroShiftConfig() вызывается RTC_WaitForSynchro(), в которой в цикле do-while проверяется этот RSF. И т.к. RSF не меняется, он равен единице, то ждем весь таймаут, и выходим после таймаута. Так же не должно быть. Ожидать синхронизацию с теневыми регистрами нужно в случае, если эти теневые регистры используются.
Код:
ErrorStatus RTC_WaitForSynchro(void)
{
...
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CYCCNT       = 0;
DWT->CTRL        |= DWT_CTRL_CYCCNTENA_Msk;            
  /* Wait the registers to be synchronised */
  do
  {
    synchrostatus = RTC->ISR & RTC_ISR_RSF;
    synchrocounter++;  
  } while((synchrocounter != SYNCHRO_TIMEOUT) && (synchrostatus == 0x00));
cycles=DWT->CYCCNT;
printf("cycles = %d\n",cycles); // cycles = 4718605 
printf("synchrocounter = %d\n",synchrocounter); // synchrocounter = 131072
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 23.06.2016, 15:24   #12
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,126
Вес репутации: 4071/111
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: STM32 для чайников

STM32F407 SPL
Не понятно, зачем писать в регистр все единицы. Уже и так этот файл правил. Снова что ли ошибка?
Код:
// stm32f4xx_rtc.c

#define RTC_INIT_MASK           ((uint32_t)0xFFFFFFFF)  

ErrorStatus RTC_EnterInitMode(void)
{
  __IO uint32_t initcounter = 0x00;
  ErrorStatus status = ERROR;
  uint32_t initstatus = 0x00;
     
  /* Check if the Initialization mode is set */
  if ((RTC->ISR & RTC_ISR_INITF) == (uint32_t)RESET)
  {
    /* Set the Initialization mode */
    RTC->ISR = (uint32_t)RTC_INIT_MASK;
...
}
PS: read/clear (rc_w0) Software can read as well as clear this bit by writing 0. Writing ‘1’ has
no effect on the bit value.
Миниатюры
RTC_ISR.PNG  
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 23.06.2016 в 15:34.
Pridnya вне форума   Ответить с цитированием
Старый 23.06.2016, 16:00   #13
Рак
Senior Member
 
Регистрация: 02.04.2008
Адрес: Кременчуг
Возраст: 31
Сообщений: 1,239
Вес репутации: 2022/65
Рак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от Pridnya Посмотреть сообщение
STM32F407 SPL
Не понятно, зачем писать в регистр все единицы. Уже и так этот файл правил. Снова что ли ошибка?
Код:
// stm32f4xx_rtc.c

#define RTC_INIT_MASK           ((uint32_t)0xFFFFFFFF)  

ErrorStatus RTC_EnterInitMode(void)
{
  __IO uint32_t initcounter = 0x00;
  ErrorStatus status = ERROR;
  uint32_t initstatus = 0x00;
     
  /* Check if the Initialization mode is set */
  if ((RTC->ISR & RTC_ISR_INITF) == (uint32_t)RESET)
  {
    /* Set the Initialization mode */
    RTC->ISR = (uint32_t)RTC_INIT_MASK;
...
}
PS: read/clear (rc_w0) Software can read as well as clear this bit by writing 0. Writing ‘1’ has
no effect on the bit value.
А если убрать запись, то перестает работать что-то?
Рак вне форума   Ответить с цитированием
Старый 23.06.2016, 16:22   #14
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,126
Вес репутации: 4071/111
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: STM32 для чайников

Цитата:
Сообщение от Рак Посмотреть сообщение
А если убрать запись, то перестает работать что-то?
Оно и с этой строкой работает, но очень странно, если RTC не запитывался, то глючит первый раз, а потом нормально работает.
Со стороны наблюдается как: дрыг-дрыг-заработало (дрыг - это сторожевой таймер на 100 мс). В этом файле stm32f4xx_rtc.c много странностей. Вообще случайно обнаружил это, когда ионистор разрядился.

PS: Вообще, не понятные таймауты и действия надоедают уже. Мне еще важно время выполнения функций, потому и проверяю.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 24.06.2016, 11:09   #15
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,126
Вес репутации: 4071/111
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: STM32 для чайников

STM32F407, c момента включения внешнего генератора (LSEON=1) до его готовности к работе (LSERDY=1, появился сигнал 32768 Гц) проходит 125 мс. Думал, многовато, а в DataSheet прочитал:
Цитата:
t SU(LSE) (2)
2. t SU(LSE) is the startup time measured from the moment it is enabled (by software) to a stabilized
32.768 kHz oscillation is reached. This value is measured for a standard crystal resonator and it can vary
significantly with the crystal manufacturer
startup time V DD is stabilized 2s
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Калибровка RTC. Как и в каких условиях? FlashBack Продукция MICROCHIP 28 24.06.2012 20:48
Есть ли пик со встроенными RTC, eeprom >=512, пит. =3В, АЦП в идеале 10 каналов, не меньше 8, дискр. вх/вых >=17 a856mm Продукция MICROCHIP 41 17.12.2011 14:19
Как при производстве сотнями шт. проверить правильность RTC? a856mm Общетехнические вопросы 20 14.11.2011 16:46
Замена CR2032 для RTC Romantic Общетехнические вопросы 20 15.03.2010 11:03
Подскажите пож-та тех. решение Yura333 Продукция MICROCHIP 4 16.08.2007 13:41


Часовой пояс GMT +3, время: 08:53.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot