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

 
 
> прерывание по таймеру, stm32f4xx
xheli
сообщение Jan 24 2012, 15:25
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 24-01-12
Пользователь №: 69 851



Пробую сделать обычный таймер, вроде работает, но вот первое прерывание вызывается сразу же после старта.
Т.е. настраиваю таймер на 5 секунд, делаю TIM_Cmd(TIM7, ENABLE), запускаю, микропроцессор стартует и сразу же срабатывает прерывание, затем все как надо, каждые пять секунд или сколько задам.
Как сделать, чтобы не было первого "ложного" срабатывания? Запустил проц и только через N сек сработало.
Вот код:
CODE

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd ( RCC_APB1Periph_TIM7, ENABLE );

NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

TIM_TimeBaseStructure.TIM_Period = ms * 2;
TIM_TimeBaseStructure.TIM_Prescaler = ( uint16_t ) ( SystemCoreClock / APB1_PRESCALER * 2 / 2000 ) - 1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit ( TIM7, &TIM_TimeBaseStructure );

TIM_ITConfig ( TIM7, TIM_IT_Update, ENABLE );
TIM_Cmd ( TIM7, ENABLE );


и обработчик прерывания:

CODE

void TIM7_IRQHandler ( void )
{
if ( TIM_GetITStatus ( TIM7, TIM_IT_Update ) != RESET )
{
TIM_ClearITPendingBit ( TIM7, TIM_IT_Update );
}

...
}


Микропроцессор stm32f417

Сообщение отредактировал xheli - Jan 24 2012, 15:26


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Sanya_kv
сообщение Feb 22 2012, 05:31
Сообщение #2


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

Группа: Свой
Сообщений: 185
Регистрация: 25-02-09
Из: Россия
Пользователь №: 45 369



Цитата
Вопрос по таймерам в stm32. Не могу понять, почему преывание срабатывает через половину заданного интервала, то есть в 2 раза быстрее. Прерывания от таймера настроено на 1 сек, а срабатывает чрез 30 секунд.

У меня была подобная проблема на STM32F2
Код
void TIM7_IRQHandler(void)
{
    if (TIM7->SR& TIM_SR_UIF)
    {
        ...
        //Почему-то не всегда сбрасывается, примерно через рас, иногда не регулярно.
        TIM7->SR = ~(uint16_t)TIM_SR_UIF;
        //if (TIM7->SR& TIM_SR_UIF)//Проверка. В системе только таймер, больше не чего.
        //    while(1);//ОСТОРОЖНО Ж

        //решил этим
        while (TIM7->SR& TIM_SR_UIF)
            TIM7->SR = ~(uint16_t)TIM_SR_UIF;
    }

}
Go to the top of the page
 
+Quote Post
Vichkins
сообщение Feb 23 2012, 08:37
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 11-02-09
Пользователь №: 44 714



Цитата(Sanya_kv @ Feb 22 2012, 08:31) *
У меня была подобная проблема на STM32F2
Код
void TIM7_IRQHandler(void)
{
    if (TIM7->SR& TIM_SR_UIF)
    {
        ...
        //Почему-то не всегда сбрасывается, примерно через рас, иногда не регулярно.
        TIM7->SR = ~(uint16_t)TIM_SR_UIF;
        //if (TIM7->SR& TIM_SR_UIF)//Проверка. В системе только таймер, больше не чего.
        //    while(1);//ОСТОРОЖНО Ж

        //решил этим
        while (TIM7->SR& TIM_SR_UIF)
            TIM7->SR = ~(uint16_t)TIM_SR_UIF;
    }

}


правильнее будет wink.gif
TIM7->SR &=~TIM_SR_UIF;

Сообщение отредактировал Vichkins - Feb 23 2012, 08:38
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 23 2012, 10:03
Сообщение #4


Универсальный солдатик
******

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



Цитата(Vichkins @ Feb 23 2012, 11:37) *
правильнее будет wink.gif
TIM7->SR &=~TIM_SR_UIF;

Если посмотрите на состав регистра SR в базовых таймерах, то увидите, что достаточно будет
TIM7->SR = 0;
Аналогично, для проверки достаточно
while (!TIM7->SR)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 22:28
Рейтинг@Mail.ru


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