Xeon 0 27 апреля, 2015 Опубликовано 27 апреля, 2015 · Жалоба Добрый день! Использую STM32F4DISCOVERY и Keil настраиваю таймер вот так: // Timer initialization RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // APB1 div == 4, freq == 42 MGz TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_Prescaler = 42000 - 1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_Period = 1; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //TIM_ClearITPendingBit(TIM2, TIM_IT_Update); NVIC_EnableIRQ(TIM2_IRQn); После того как отработает NVIC_EnableIRQ(TIM2_IRQn) сразу попадаю в прерывание. В регистре SR выставляется флаг UIF, пытался его сбросить используя TIM_ClearITPendingBit(TIM2, TIM_IT_Update); не помогло. Сам же таймер я включаю позже. Как правильно делать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 27 апреля, 2015 Опубликовано 27 апреля, 2015 · Жалоба В регистре SR выставляется флаг UIF, пытался его сбросить используя TIM_ClearITPendingBit(TIM2, TIM_IT_Update); не помогло. Сам же таймер я включаю позже. Как правильно делать? Включайте раньше, тогда, видимо, сбросите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xeon 0 27 апреля, 2015 Опубликовано 27 апреля, 2015 · Жалоба Включайте раньше, тогда, видимо, сбросите. Спасибо за ответ. Мне необходимо запускать таймер когда по USART принимаю пакет для того, чтобы реализовать тайминг по приёму пакета, т.е. если во время приёма пакета между байтами превышен некоторый временной интервал, то считается что пакет отвалился. Это значит что таймер мне требуется запускать в момент приёма первого байта, и останавливать после приёма всего пакета. Т.е. таймер у меня всё время не будет запущен. Думаю косяк где-то в инициализации, пока не разобрался... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 27 апреля, 2015 Опубликовано 27 апреля, 2015 · Жалоба TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //TIM_ClearITPendingBit(TIM2, TIM_IT_Update); NVIC_EnableIRQ(TIM2_IRQn); Попробуйте поднять TIM_ClearITPendingBit(TIM2, TIM_IT_Update); ещё на одну строчку выше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xeon 0 28 апреля, 2015 Опубликовано 28 апреля, 2015 · Жалоба Попробуйте поднять TIM_ClearITPendingBit(TIM2, TIM_IT_Update); ещё на одну строчку выше. Действительно помогло. Большое спасибо!) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 29 апреля, 2015 Опубликовано 29 апреля, 2015 · Жалоба Спасибо за ответ. Мне необходимо запускать таймер когда по USART принимаю пакет для того, чтобы реализовать тайминг по приёму пакета, т.е. если во время приёма пакета между байтами превышен некоторый временной интервал, то считается что пакет отвалился. Вообще-то для этой цели обычно в UART имеется флаг таймаута приёма (взводится если RX-буфер не пуст и в течение N бит подряд была тишина на RxD) и соответствующее ему прерывание. Не знаю правда если он в STM-ных UART.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 29 апреля, 2015 Опубликовано 29 апреля, 2015 · Жалоба Вообще-то для этой цели обычно в UART имеется флаг таймаута приёма (взводится если RX-буфер не пуст и в течение N бит подряд была тишина на RxD) и соответствующее ему прерывание. Не знаю правда если он в STM-ных UART.... За годы форумной войны с реализацией уарта в STM можно было б матчасть и подтянуть... Прерывание IDLE есть, срабатывает при паузе, равной одному байту (длина не настраивается). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 29 апреля, 2015 Опубликовано 29 апреля, 2015 · Жалоба Кстати, в STM32L0xx в USART добавили полноценный тайм-аут на приём (программируемой длительности) и управление сигналом DE для RS-485. Теперь USART как никогда близок к идеалу:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться