juvf 10 9 февраля, 2017 Опубликовано 9 февраля, 2017 · Жалоба процессор stm32f401. проинициализировал RTC. Работают. Вычитываю дату. При первой вычитке всё вычиталось нормально. дата 07.02.2017. часы перешли через 23:59:59, сутки увеличились. читаю дату, получаю 07.02.2017. читаю регистр RTC_DT в переменную, в переменной 0x00172207 (7-е число), останавливаюсь в дебаге после вычитки ДТ в переменную, в переменной 07, смотрю регистры часов - в ДТ 0x00172208, см рис, вотчвиндоу, из разных мест программы в массив вычитал регистр RTC_DT и сразуже остановился. тот же вотчвиндоу показывает что в регистре RTC_DT дата 08. вобщем часы идут... идут... сутки, двое трое.... при попытке вычитать дату - дата стоит мертвая, как при первом чтении. вычитываю кодом tmpreg[1] = *(uint32_t*)0x40002804; или tmpreg[1] = (uint32_t)(RTC->DR & ((uint32_t)0x00FFFF3F) ); результат одинаковый такое чувство, что этот регистр кэшируется где-то, при первой вычитке прочитывается нормально, а потом из кеша старое значение берётся. Оптимизация отключена. компилятор IAR.... что может быть? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgMB0 0 9 февраля, 2017 Опубликовано 9 февраля, 2017 · Жалоба Попробуй в регистре RTC_CR поставить бит BYPSHAD = 1. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 10 9 февраля, 2017 Опубликовано 9 февраля, 2017 · Жалоба Попробуй в регистре RTC_CR поставить бит BYPSHAD = 1.Да, то что надо, в инит добавил RTC_BypassShadowCmd(ENABLE); Спасибо. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться