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

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

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

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

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

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


 
Опции темы
Непрочитано 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
Заблокирован
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
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
Адрес: мурмурляндия
Сообщений: 10,715
Сказал спасибо: 189
Сказали Спасибо 3,199 раз(а) в 2,074 сообщении(ях)
индюк на пути к лучшему
По умолчанию 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, время: 19:33.


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