реклама на сайте
подробности

 
 
> STM32F2x, Часики
vlad_new
сообщение Feb 10 2013, 14:35
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Часики не устанавливаются. Инициализация вроде в норме. Часы тикают и читаются, но не записываются.
Записываются если только в отладчике RTC вывести на экран. Вроде как при чтении каких то регистров дебагером часики перезаписываются.
Может кто подскажет чего в супе не хватает?
Код
    RTC_TimeStructure.RTC_Hours = ((str[8]-0x30)<<4)|(str[9]-0x30);
    RTC_TimeStructure.RTC_Minutes = ((str[10]-0x30)<<4)|(str[11]-0x30);
    RTC_TimeStructure.RTC_Seconds = ((str[12]-0x30)<<4)|(str[13]-0x30);

    RTC_DateStructure.RTC_WeekDay = 0;
    RTC_DateStructure.RTC_Date = ((str[6]-0x30)<<4)|(str[7]-0x30);
    RTC_DateStructure.RTC_Month = ((str[4]-0x30)<<4)|(str[5]-0x30);
    RTC_DateStructure.RTC_Year = ((str[2]-0x30)<<4)|(str[3]-0x30);

    RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure);                    // Init Time
    RTC_SetDate(RTC_Format_BCD, &RTC_DateStructure);                    // Init Date
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Мусатов Констант...
сообщение Apr 25 2013, 20:54
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



Что-то у меня ни какими средствами не удается установить дату и время. Причем, если CMOS сброшен, то первичная инициализация проходит и назначается время и дата, но не те, что надо, а так, дефолтные. Потом приходит нужная дата и время, а назначить не удается.
Процессор SMM32F207. Компилятор GCC в среде CodeBlocks
ОС в прошивке FreeRTOS
Дата и время приходят по сети Ethernet, но обрабатываются потом в очереди.
Код
    ts.RTC_Hours     = (uint8_t) tm->hour;
    ts.RTC_Minutes     = (uint8_t) tm->min;
    ts.RTC_Seconds     = (uint8_t) tm->sec;
    ds.RTC_Year     = (uint8_t) (tm->year % 100);
    ds.RTC_Month     = (uint8_t) tm->month;
    ds.RTC_Date     = (uint8_t) tm->day;
    ds.RTC_WeekDay     = (uint8_t) tm->wday;
    portENTER_CRITICAL();
    PWR_BackupAccessCmd( ENABLE );
    // сохраняем дату и время

  //RTC_WriteProtectionCmd(DISABLE);
  //RCC_RTCCLKCmd(ENABLE);
  //RTC_WaitForSynchro();

    RTC_SetTime( RTC_Format_BIN, &ts );
    RTC_SetDate( RTC_Format_BIN, &ds );
  //RTC_WriteProtectionCmd(ENABLE);
    PWR_BackupAccessCmd( DISABLE );
    portEXIT_CRITICAL();

Сначала были только функции назначения даты и времени, потом попытки шаманства, в том числе запрета прерываний. Ничего не помогает.
Отладчик показывает, что доходим до функции RTC_EnterInitMode, там взбодряют RTC->ISR и ждут
Код
RTC->ISR = (uint32_t)RTC_INIT_MASK;

    do
    {
      initstatus = RTC->ISR & RTC_ISR_INITF;
      initcounter++;  
    } while((initcounter != INITMODE_TIMEOUT) && (initstatus == 0x00));

Но флага INITF так и не дожидаемся.
Функции чтения даты и времени работают нормально, на экран часто выводится и дата и время. Но вот назначить новое не получается.
Что не так?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 12:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01365 секунд с 7
ELECTRONIX ©2004-2016