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

 
 
> Правильность отсчета времени в таймере и RTC
dimon_rub
сообщение Oct 7 2016, 08:04
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 10-09-16
Пользователь №: 93 282



Здравствуйте. Прошу помощи по следующим вопросам.
1. Во всех примерах пределитель на RTC необходимо ставить 32767 при внешнем кварце на 32768. Когда ставится данный пределитель часы считают очень медленно 1 секунда где то в 10-15мин. Начал изменять путем подбора вышел на значение пределителя где то 32. ЧТО ЭТО ЗНАЧИТ.
2. В таймере то же какой то глючек. Может ошибка общая с 1 пунктом. Частота шины 36МГц. Опрашивается через функцию RCC_GetClocksFreq. Ставлю пределитель 36000 и счет до 1000 прерывание срабатывает гораздо раньше.

Контроллер STM32F103RC. 16МГц кварц, на RTC кварц 32768.

P.S. Нет источника питания. Питание контроллера взято с ST-Link V2.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
esaulenka
сообщение Oct 7 2016, 13:42
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Код выглядит нормально.
Разве что, не очень понятно, что содержится в rcc_Clocks. Можно легко и просто испортить дефайны, чтобы там оказалось что-то не то.

Единственное замечание: у STM'ок есть кэширование регистррв таймера (в т.ч. ARR). Чтобы принудительно его обновить, надо сделать TIMx->EGR = TIM_EGR_UG;


PS дурацкий вопрос: это точно STM32F103 ? Не китаец? ;-)


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
dimon_rub
сообщение Oct 7 2016, 14:26
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 10-09-16
Пользователь №: 93 282



Цитата(esaulenka @ Oct 7 2016, 13:42) *
Код выглядит нормально.
Разве что, не очень понятно, что содержится в rcc_Clocks. Можно легко и просто испортить дефайны, чтобы там оказалось что-то не то.



Единственное замечание: у STM'ок есть кэширование регистррв таймера (в т.ч. ARR). Чтобы принудительно его обновить, надо сделать TIMx->EGR = TIM_EGR_UG;

Спасибо попробую.


PS дурацкий вопрос: это точно STM32F103 ? Не китаец? ;-)


RCC_ClocksTypeDef rcc_Clocks;

Поднял RTC на LSI. На LSE не как не хочет. Совсем начал зависать наверно действительно что то с кварцом. На SLI вроде работает но есть одно каждая десятая секунда как будто задерживается (9 в логе). Возможно неправильно выбран пределитель. По аналогии с LSE поставил 39999. ПОДСКАЖИТЕ какой нужно. Вывод лога с USART опрос каждую секунду по таймеру регистров счета:
RTC_GetCounter=00000000<0><0>; RTC_GetDivide00002783<0><0>
RTC_GetCounter=00000001<0><0>; RTC_GetDivide00006477<0><0>
RTC_GetCounter=00000002<0><0>; RTC_GetDivide00010172<0><0>
RTC_GetCounter=00000003<0><0>; RTC_GetDivide00013863<0><0>
RTC_GetCounter=00000004<0><0>; RTC_GetDivide00017553<0><0>
RTC_GetCounter=00000005<0><0>; RTC_GetDivide00021243<0><0>
RTC_GetCounter=00000006<0><0>; RTC_GetDivide00024936<0><0>
RTC_GetCounter=00000007<0><0>; RTC_GetDivide00028626<0><0>
RTC_GetCounter=00000008<0><0>; RTC_GetDivide00032316<0><0>
RTC_GetCounter=00000009<0><0>; RTC_GetDivide00036006<0><0>
RTC_GetCounter=00000009<0><0>; RTC_GetDivide00039699<0><0>
RTC_GetCounter=00000010<0><0>; RTC_GetDivide00003385<0><0>
RTC_GetCounter=00000011<0><0>; RTC_GetDivide00007073<0><0>
RTC_GetCounter=00000012<0><0>; RTC_GetDivide00010762<0><0>
RTC_GetCounter=00000013<0><0>; RTC_GetDivide00014452<0><0>
RTC_GetCounter=00000014<0><0>; RTC_GetDivide00018140<0><0>
RTC_GetCounter=00000015<0><0>; RTC_GetDivide00021827<0><0>
RTC_GetCounter=00000016<0><0>; RTC_GetDivide00025517<0><0>
RTC_GetCounter=00000017<0><0>; RTC_GetDivide00029204<0><0>
RTC_GetCounter=00000018<0><0>; RTC_GetDivide00032893<0><0>
RTC_GetCounter=00000019<0><0>; RTC_GetDivide00036582<0><0>
RTC_GetCounter=00000019<0><0>; RTC_GetDivide00000271<0><0>
RTC_GetCounter=00000020<0><0>; RTC_GetDivide00003957<0><0>
RTC_GetCounter=00000021<0><0>; RTC_GetDivide00007644<0><0>
RTC_GetCounter=00000022<0><0>; RTC_GetDivide00011330<0><0>
RTC_GetCounter=00000023<0><0>; RTC_GetDivide00015018<0><0>
RTC_GetCounter=00000024<0><0>; RTC_GetDivide00018703<0><0>
RTC_GetCounter=00000025<0><0>; RTC_GetDivide00022388<0><0>
RTC_GetCounter=00000026<0><0>; RTC_GetDivide00026073<0><0>
RTC_GetCounter=00000027<0><0>; RTC_GetDivide00029761<0><0>
RTC_GetCounter=00000028<0><0>; RTC_GetDivide00033446<0><0>
RTC_GetCounter=00000029<0><0>; RTC_GetDivide00037131<0><0>
RTC_GetCounter=00000029<0><0>; RTC_GetDivide00000813<0><0>
RTC_GetCounter=00000030<0><0>; RTC_GetDivide00004500<0><0>
RTC_GetCounter=00000031<0><0>; RTC_GetDivide00008185<0><0>
RTC_GetCounter=00000032<0><0>; RTC_GetDivide00011869<0><0>
RTC_GetCounter=00000033<0><0>; RTC_GetDivide00015554<0><0>
RTC_GetCounter=00000034<0><0>; RTC_GetDivide00019242<0><0>
RTC_GetCounter=00000035<0><0>; RTC_GetDivide00022927<0><0>
RTC_GetCounter=00000036<0><0>; RTC_GetDivide00026611<0><0>
RTC_GetCounter=00000037<0><0>; RTC_GetDivide00030294<0><0>
RTC_GetCounter=00000038<0><0>; RTC_GetDivide00033981<0><0>
RTC_GetCounter=00000039<0><0>; RTC_GetDivide00037665<0><0>
RTC_GetCounter=00000039<0><0>; RTC_GetDivide00001347<0><0>
RTC_GetCounter=00000040<0><0>; RTC_GetDivide00005032<0><0>



Go to the top of the page
 
+Quote Post
Pridnya
сообщение Oct 7 2016, 18:04
Сообщение #4


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

Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159



Цитата(dimon_rub @ Oct 7 2016, 17:26) *
RCC_ClocksTypeDef rcc_Clocks;

Поднял RTC на LSI. На LSE не как не хочет. Совсем начал зависать наверно действительно что то с кварцом. На SLI вроде работает но есть одно каждая десятая секунда как будто задерживается (9 в логе). Возможно неправильно выбран пределитель. По аналогии с LSE поставил 39999. ПОДСКАЖИТЕ какой нужно. Вывод лога с USART опрос каждую секунду по таймеру регистров счета:

LSI - это внутренний RC-генератор, менее точный, чем кварцевый (LSE), частота его отличается от 40кГц, поэтому нужно подбирать значение предделителя под конкретный образецю

Сообщение отредактировал Pridnya - Oct 7 2016, 18:05
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- dimon_rub   Правильность отсчета времени в таймере и RTC   Oct 7 2016, 08:04
- - Obam   2 в 32-ой степени ни на что не намекает?   Oct 7 2016, 08:19
- - Pridnya   Цитата(dimon_rub @ Oct 7 2016, 11:04) Здр...   Oct 7 2016, 08:32
- - dimon_rub   Код инициализации: Код RCC_APB1PeriphClockCmd...   Oct 7 2016, 08:46
- - Obam   "…вышел на значение пределителя где то 32. ЧТ...   Oct 7 2016, 09:18
- - SasaVitebsk   Цитата(dimon_rub @ Oct 7 2016, 11:04) Здр...   Oct 7 2016, 09:29
- - esaulenka   В RTC у STMа есть особенность, что они довольно кр...   Oct 7 2016, 09:52
|- - dimon_rub   Цитата(esaulenka @ Oct 7 2016, 09:52) В R...   Oct 7 2016, 10:20
- - Obam   Оп-па, вот что значит переключиться с 16-битки, не...   Oct 7 2016, 09:54
- - dimon_rub   Поднял RTC в качестве эксперимента на частоте осно...   Oct 8 2016, 05:01
- - SasaVitebsk   То ли вы не можете внятно описать что вас не устра...   Oct 10 2016, 08:26
- - bolden   А не должно быть так ? // Чтоб прерывание случалос...   Oct 10 2016, 09:08
- - SasaVitebsk   Ну да. Я же написал в первом посту. И объяснил поч...   Oct 10 2016, 19:06
- - bolden   Цитата(SasaVitebsk @ Oct 10 2016, 22:06) ...   Oct 11 2016, 04:12


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

 


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


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