|
|
|
Глобальный счетчик милисекунд. |
|
|
|
Jun 17 2018, 03:37
|
Частый гость
Группа: Участник
Сообщений: 91
Регистрация: 3-07-11
Пользователь №: 66 028
|
Раньше, тоже делал счет миллисекунд из прерывания, но последнее время стал использовать такой способ http://we.easyelectronics.ru/Soft/samyy-pr...nyy-taymer.htmlТолько максимальное значение миллисекунд, которое можно задать зависит от таймера. А для сильно большой задержки, использую RTC, настроил что бы счетчик работал по секундам и считываю его, также. (только это относиться для stm32f1x, для stm32f4x RTC совсем другая )
|
|
|
|
|
Jun 18 2018, 05:02
|
Профессионал
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075
|
Цитата(pokk @ Jun 17 2018, 08:37) Раньше, тоже делал счет миллисекунд из прерывания, но последнее время стал использовать такой способ http://we.easyelectronics.ru/Soft/samyy-pr...nyy-taymer.htmlТолько максимальное значение миллисекунд, которое можно задать зависит от таймера. А для сильно большой задержки, использую RTC, настроил что бы счетчик работал по секундам и считываю его, также. (только это относиться для stm32f1x, для stm32f4x RTC совсем другая ) у меня таймера не хватало. в Кинетесе они кривые. кроме LPTM. освободил LPTM. он 16-битный приходиться приращивать в прерывании Код void LPTMR0_IRQHandler(void) { LPTMR0_CSR |= LPTMR_CSR_TCF_MASK; ovf_count++; added_val = 0xFFFF * ovf_count; }
uint32_t SYSTIME_GetSystemTime(void) { unsigned long cnt; LPTMR0_CNR = 0; // write any value to the counter register so that it puts its present counter value into a temporary register cnt = LPTMR0_CNR; // read the value from the temporary register return (cnt + added_val); }
Сообщение отредактировал Jenya7 - Jun 18 2018, 05:03
|
|
|
|
|
Jun 21 2018, 05:12
|
Профессионал
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075
|
Цитата(adnega @ Jun 18 2018, 11:40) А почему SysTick не используете? объяснил это в первом посте. Цитата(juvf @ Jun 20 2018, 09:42) Этого мало? Это позволяет делать/контролировать задержки до 65 секунд без какого либо контроля переполнения, в лоб, без бубнов и танцев. Если нужно делать задержки измеряемые в секундах (например 1000 секунд, или 10000000 секунд), то можно отдельный таймер аппаратный завести с тактом 1 мс и переполнением после 1000 мс, в прерывании ++globalSec . Или вообще использовать RTC. у него нет пределителя - я не могу создать тик с периодом и 1 миллисекунду. Цитата(Obam @ Jun 20 2018, 23:54) В K10 4-канальный 32-битный PIT (программируемый интервальный таймер) есть - делай счётчики интервалов какие хошь то же самое - у него нет пределителя - я не могу создать тик с периодом и 1 миллисекунду. Цитата(Obam @ Jun 20 2018, 23:54) Впрочем, ТС сознался, что был не прав. долгие годы игры в покер научили меня вовремя скидывать слабую руку.
Сообщение отредактировал Jenya7 - Jun 21 2018, 05:14
|
|
|
|
|
Jun 21 2018, 05:15
|
Гуру
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702
|
Цитата(Jenya7 @ Jun 21 2018, 08:12) у него нет пределителя Вы опять за старое. У него есть период, и за счет периода вы создадите 1 мс. С периодом 1 мс у вас будет шагать не таймер, а вызываться обработчик прерывания, в котором будет to_1ms++. Для этого подойдет любой таймер, но есть же специальный SysTick. Почему его не используют некоторые?
|
|
|
|
|
Jun 21 2018, 05:24
|
Профессионал
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045
|
Цитата(adnega @ Jun 21 2018, 10:15) Вы опять за старое. У него есть период, и за счет периода вы создадите 1 мс. С периодом 1 мс у вас будет шагать не таймер, а вызываться обработчик прерывания, в котором будет to_1ms++. Писал же ТС, что у него сейчас так и есть, но он не хочет раз в 1 мс падать в прерывание, а хочет сделать аппаратный миллисекундный таймер. Цитата(Jenya7 @ Jun 21 2018, 10:12) у него нет пределителя - я не могу создать тик с периодом и 1 миллисекунду. vs Цитата 16 бит - это дает нам 65536 милисекунд до переполнения как это? 16 битный таймер дает переполнение через 65536 милисекунд, но тик у этого таймера не равен 1 мс??? Проблема решена, и слава богу!!!
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|