|
STM32. Функция задержки, программные задержки на таймере |
|
|
|
Jun 27 2012, 19:47
|
Частый гость
 
Группа: Свой
Сообщений: 87
Регистрация: 9-12-10
Пользователь №: 61 511

|
Написал функцию задержки на базовом таймере. В одной программе работает отлично, но вызывается правда постоянно с одним и тем же значением. В другой то ли работает криво, то ли не работает вообще: Код #define APB1_FREQ 24000000 void delay_ms (uint16_t volatile ms) { TIM7->CR1 &= ~0xFF; // Сбрасываем регистр управления таймера TIM7 if (ms != 1) { // Если значение задержки НЕ равно 1, TIM7->PSC = APB1_FREQ/1000-1; // настраиваем таймер TIM7 на период 1 мс, TIM7->ARR = ms-1; // установить конечное значение счёта с учетом импульса переполнения; } else { // иначе, TIM7->PSC = 2*APB1_FREQ/1000-1; // настраиваем таймер TIM7 на период в 2 раза меньше - 0,5 мс TIM7->ARR = 1; } // установить конечное значение счёта на 1 с учетом импульса переполнения TIM7->CR1 |= (TIM_CR1_OPM | TIM_CR1_CEN); // Установить режим "одного импульса" и включить таймер TIM7 while(!(TIM7->SR & TIM_SR_UIF)); // Дождаться конца задержки TIM7->SR &= ~TIM_SR_UIF; // Сбросить флаг прерывания }; Не пойму почему не выдерживается задержка? ЗЫ. Таймер тактирован в основной программе: Код RCC->APB1ENR |= RCC_APB1ENR_TIM7EN; // Тактируем базовый таймер TIM7
|
|
|
|
|
 |
Ответов
|
Dec 22 2012, 10:32
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(ViKo @ Dec 22 2012, 14:20)  То, что показал HHIMERA Ну какие ещё другие таймера в STM32??? ))) AN4013 Application note
STM32F1xx, STM32F2xx, STM32F4xx, STM32L1xx, STM32F30/31/37/38x timer overview
2.2 Time base generator
Отнимать единички надобно... т.к. таймер их сам доплюсовывает...
|
|
|
|
|
Dec 22 2012, 10:50
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Даете противоречивые показания.  Цитата(HHIMERA @ Dec 22 2012, 13:32)  Отнимать единички надобно... т.к. таймер их сам доплюсовывает... Противоречит Цитата the counter counts from 0 to the auto-reload value (content of the TIMx_ARR register) – 1, generates a counter overflow event Как вы представляете, что таймер считает не до ARR, а до ARR-1 (то есть, вашими словами, отминусовывает), физически? По руководству пройдитесь поиском "counter counts", найдете, какие таймеры как считают. P.S. и там не уверен, не разбирался вообще.
|
|
|
|
|
Dec 22 2012, 11:20
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(ViKo @ Dec 22 2012, 13:50)  По руководству пройдитесь поиском "counter count", найдете, какие таймеры как считают. Спасибо, мне не надо... ))) Недавно с Леонидом Ивановичем рассматривали возможность частотомера на STM32 ... В железе всё прекрасно... На STM32f100 до 90МГц (выше не пробовал)... на STM32F05X - 110МГц (больше неоткуда было взять)... P.S: Доки для STM32 писались не новичками... и не для новичков... увы... Отсюда и сжатый стиль, и "неоднозначные толкования", и пр. ... но в целом - всё достойно и понятно... Цитата(ViKo @ Dec 22 2012, 14:13)  У вас (в AN) некорректная запись. "Мопед не мой"(С) И в чём некорректность???
|
|
|
|
Сообщений в этой теме
Влад Р. STM32. Функция задержки Jun 27 2012, 19:47 skripach Ну сделайте вы по людски, что-нибуди вроде:
Кодvo... Jun 27 2012, 20:58 Влад Р. Цитата(skripach @ Jun 27 2012, 23:58) Ну ... Jun 27 2012, 21:01 Сергей Борщ QUOTE (Влад Р. @ Jun 28 2012, 00:01) что ... Jun 27 2012, 21:21 Влад Р. Цитата(Сергей Борщ @ Jun 28 2012, 00:21) ... Jun 27 2012, 21:37 AHTOXA Попробуйте после записи значений ARR и PSC сделать... Jun 27 2012, 21:57 Влад Р. Цитата(AHTOXA @ Jun 28 2012, 00:57) Попро... Jun 27 2012, 22:20 Влад Р. Проблема решилась установкой бита ARPE в управляющ... Jun 27 2012, 23:45 AHTOXA Короче, так.
Регистр PSC обновляется только при up... Jun 28 2012, 03:51  Влад Р. Цитата(AHTOXA @ Jun 28 2012, 06:51) Регис... Jun 28 2012, 11:21   AHTOXA Цитата(Влад Р. @ Jun 28 2012, 17:21) Новы... Jun 28 2012, 16:52    Влад Р. Цитата(AHTOXA @ Jun 28 2012, 19:52) Для з... Jun 28 2012, 17:51     AHTOXA Да, это я лопухнулся Значит, не надо уменьшать на ... Jun 28 2012, 18:03      ViKo Цитата(AHTOXA @ Jun 28 2012, 21:03) Да, э... Dec 22 2012, 06:53       AHTOXA Цитата(ViKo @ Dec 22 2012, 12:53) Считаю,... Dec 22 2012, 08:50        vlad_new Нодо на 1 уменьшать. Я то же практически проверял.... Dec 22 2012, 09:07         AHTOXA Цитата(vlad_new @ Dec 22 2012, 15:07) Не ... Dec 22 2012, 17:15        HHIMERA Цитата(AHTOXA @ Dec 22 2012, 11:50) А я п... Dec 22 2012, 10:09 sgs АНТОХА написал все правильно. Есть только один тон... Jun 28 2012, 04:36 scifi Странный выбор таймера для задержки, если только в... Jun 28 2012, 05:39   HHIMERA Update_event = TIM_CLK/((PSC + 1)*(ARR + 1)*(RCR +... Dec 22 2012, 11:00    ViKo Цитата(HHIMERA @ Dec 22 2012, 14:00) ...
... Dec 22 2012, 11:13    ViKo Цитата(HHIMERA @ Dec 22 2012, 14:18) Спас... Dec 22 2012, 11:46     HHIMERA Цитата(ViKo @ Dec 22 2012, 14:28) Нихрена... Dec 22 2012, 11:58      ViKo Цитата(HHIMERA @ Dec 22 2012, 14:58) Так ... Dec 22 2012, 12:02 ViKo Сочинил задержку подлиннее. Тактовая частота подра... Dec 23 2012, 14:16 ViKo Хочу продолжить. Написать универсальную задержку, ... Dec 28 2012, 06:26 NaughtyFreak Очень наворочено
Почему правда для задержки не ... Dec 28 2012, 08:17 ViKo Цитата(NaughtyFreak @ Dec 28 2012, 11:17)... Dec 28 2012, 09:10 ViKo Типа такого, но на препроцессоре.
CODE#define FT_... Dec 28 2012, 14:07 polyname ЦитатаИ усё. в зависимости от надобности кофигурир... Dec 28 2012, 17:44 sidy Поскольку в данной теме много разбирающихся в нюан... Mar 8 2013, 19:12 Mimik Всем привет, прошу вашей помощи. Устроился на нову... Jun 10 2014, 11:08
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|