Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Зависает МК при установке RTC

Непрочитано 08.03.2017, 23:56  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Зависает МК при установке RTC

stm32f100ret6b 24мгц

Никто не сталкивался с зависанием мк при установке времени в RTC?

Ставлю вот так
Код:
RTC_Date_Time.RTC_Hours = hour;
RTC_Date_Time.RTC_Minutes = minute;
RTC_Date_Time.RTC_Seconds = 0;
RTC_Date_Time.RTC_Date = day;
RTC_Date_Time.RTC_Month = month;
RTC_Date_Time.RTC_Year = year;
Delay_ms(500);
test = RTC_Date_To_Counter(&RTC_Date_Time);	
RTC_Set_Counter(test);
LCD_Send(0, "ok");
mode = 2;
flag_back = 1;
Код:
void RTC_Set_Counter(uint32_t Counter){
  RTC-›CRL |= RTC_CRL_CNF; //Входим в режим конфигурации
  RTC-›CNTH = Counter ›› 16; //Установка старшего регистра
  RTC-›CNTL = Counter; //Установка младшего регистра
  RTC-›CRL &= ~RTC_CRL_CNF; //Выходим из режима конфигурации
}
Код:
uint32_t RTC_Date_To_Counter(RTC_Struct* RTC_Date_Time){
    uint8_t a;
    uint16_t y;
    uint8_t m;
    uint32_t JDN;
    a=(14-RTC_Date_Time-›RTC_Month)/12;
    y=RTC_Date_Time-›RTC_Year+4800-a;
    m=RTC_Date_Time-›RTC_Month+(12*a)-3;
    JDN=RTC_Date_Time-›RTC_Date;
    JDN+=(153*m+2)/5;
    JDN+=365*y;
    JDN+=y/4;
    JDN+=-y/100;
    JDN+=y/400;
    JDN = JDN -32045;
    JDN = JDN - JULIAN_DATE_BASE;
    JDN*=86400;
    JDN+=(RTC_Date_Time-›RTC_Hours*3600);
    JDN+=(RTC_Date_Time-›RTC_Minutes*60);
    JDN+=(RTC_Date_Time-›RTC_Seconds);
    return JDN;
}
Короче после выхода из ф-ии RTC_Set_Counter выполняется команда на дисплей и зависает. То есть mode и flag_back уже не ставятся. Если убрать строчки
Код:
  RTC-›CNTH = Counter ›› 16; //Установка старшего регистра
  RTC-›CNTL = Counter; //Установка младшего регистра
то всё работает. Просто не установится время. И что странное, отладчиком прохожу, и вот эти регистры счётчиков - не устанавливаются. Даже CNF устанавливает, потом сбрасывает. А вот счётчики игнорирует.
Хотя только один раз у меня при прохождении отладчиком построчно получилось установить время.
Реклама:
supercelt вне форума  
Непрочитано 09.03.2017, 08:30  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Зависает МК при установке RTC

Перед записью RTC вначале надо включить бэкап модуль и снять блокировку записи. последовательность действий описана в референс-мануале.
NewWriter вне форума  
Непрочитано 09.03.2017, 08:35  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Re: Зависает МК при установке RTC

Может я что-то упустил... Но в мануале написано, что бы записать эти регистры нужно что бы флаг RTOF был 1. И один раз же у меня как-то записалось время
supercelt вне форума  
Непрочитано 09.03.2017, 21:13  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Re: Зависает МК при установке RTC

Вобщем переписал немного, вроде заработало
Инициализация
Код:
void RTC_INI(void){
RCC-›APB1ENR |= RCC_APB1ENR_PWREN | RCC_APB1ENR_BKPEN;
PWR-›CR |= PWR_CR_DBP;
//if((RCC-›BDCR & RCC_BDCR_RTCEN) != RCC_BDCR_RTCEN){
RCC-›BDCR |=  RCC_BDCR_BDRST;
RCC-›BDCR &= ~RCC_BDCR_BDRST;
RCC-›BDCR |=  RCC_BDCR_RTCEN | RCC_BDCR_RTCSEL_LSI;
RTC-›CRL  |=  RTC_CRL_CNF;
RTC-›PRLL  = 0x7FFF; // записать в регистр деления 32768
RTC-›CRH  =  RTC_CRH_SECIE;//разрешить прерывание от секундных импульсов	
RTC-›CRL  &=  ~RTC_CRL_CNF;
RCC-›CSR |= RCC_CSR_LSION;
while ((RCC-›CSR & RCC_CSR_LSIRDY) != RCC_CSR_LSIRDY) {}
RTC-›CRL &= (uint16_t)~RTC_CRL_RSF;
while((RTC-›CRL & RTC_CRL_RSF) != RTC_CRL_RSF) {}
//}
NVIC_EnableIRQ(RTC_IRQn);
}
Запись

Код:
void RTC_Set_Counter(uint32_t Counter){
while((RTC-›CRL & RTC_CRL_RTOFF) == 0){}
RTC-›CRL |= RTC_CRL_CNF; //Входим в режим конфигурации
RTC-›CNTH = Counter ›› 16; //Установка старшего регистра
RTC-›CNTL = Counter; //Установка младшего регистра
RTC-›CRL &= ~RTC_CRL_CNF; //Выходим из режима конфигурации
while((RTC-›CRL & RTC_CRL_RTOFF) == 0){}
}
А теперь немного другая проблема. Инициализация у меня такая же как практически во всех примерах. Но, почему я закомментил проверку RTCEN. Объясняю. Авторы этой инициализации, делают проверку, включены ли часы, если включены, то зачем инициализировать, они запускаются и всё. У меня не так. Когда я включаю плату, то бит RTCEN = установлен, но не установлены никакие другие, например как LSI. Если убрать эту проверку, то часы работают нормально. Но стартуют с нуля, так как у меня нет батарейки. Вот странно, что бит RTCEN после включения/ресета установлен. Разве так должно быть?
supercelt вне форума  
Непрочитано 09.03.2017, 21:52  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,131
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Зависает МК при установке RTC

Сообщение от supercelt Посмотреть сообщение
Вот странно, что бит RTCEN после включения/ресета установлен. Разве так должно быть?
6.3.9 Backup domain control register (RCC_BDCR)
Address offset: 0x20
Reset value: 0x0000 0000, reset by Backup domain Reset.

ктото его еще значит включает просто. эх спльщики........
__________________
кагмаподэ магмаподэ

Последний раз редактировалось индюк; 09.03.2017 в 21:58.
индюк вне форума  
Непрочитано 11.03.2017, 22:09  
supercelt
Прописка
 
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
supercelt на пути к лучшему
По умолчанию Re: Зависает МК при установке RTC

Никто его не включает. В отладке делаю первый шаг и смотрю регистр. RTCEN уже установлен
supercelt вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RTC - уход мене минуты в год picavr STM8 9 26.07.2015 19:46
Точность RTC STM32F407VG в режиме LSE (внешний кварц 32.768) vvv998 ARM 38 04.12.2014 12:48
Помогите запустить RTC в LPC1768 Chudilo Микроконтроллеры, АЦП, память и т.д 3 28.05.2012 02:24
Вопросик по RTC в LPC23xx serb-radio Микроконтроллеры, АЦП, память и т.д 15 25.05.2011 19:49
Компьютер зависает . dosikus Ремонт оргтехники 35 07.05.2008 15:27


Часовой пояс GMT +4, время: 14:33.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.