Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Поомгите с прерыванияи
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
batisto4ka
Подскажите, пожалуйста, как сделать внешние перрывания по 0 на входе?
GetSmart
Вы бы хоть проц указали, с которым работаете.
sparcmaster
Цитата(batisto4ka @ Jan 18 2012, 18:59) *
Подскажите, пожалуйста, как сделать внешние перрывания по 0 на входе?

Для какого микроконтроллера и в каком компиляторе?
batisto4ka
Цитата(sparcmaster @ Jan 19 2012, 07:26) *
Для какого микроконтроллера и в каком компиляторе?

Простите, stm32f103vet, Keil
sparcmaster
Цитата(batisto4ka @ Jan 19 2012, 10:17) *
Простите, stm32f103vet, Keil

Тогда все просто, с Кейлом идут примеры же, посмотрите такой проет - Keil\ARM\Boards\Keil\MCBSTM32\EXTI
Если что-то не понятно конкретно спрашивайте.
batisto4ka
Цитата(sparcmaster @ Jan 19 2012, 09:40) *
Тогда все просто, с Кейлом идут примеры же, посмотрите такой проет - Keil\ARM\Boards\Keil\MCBSTM32\EXTI
Если что-то не понятно конкретно спрашивайте.

не понятно одно, вроде получилось натсроить перрывания. Пытаюсь подсчитать частоту сигналов на входе. Но активным уровнем является 0. Но их частота получается меньше в 2 раза, чем показывает мультиметр.
Код
void EXTI9_5_IRQHandler(void)
{
static uint16_t a;

  if (EXTI->PR&(1<<7)) // Прерывание от EXTI7?
      {
       EXTI->PR|=(1<<7);
       if (!(GPIOC->IDR&GPIO_IDR_IDR7))    
               a++;
            else if (a)
                    {
                     a=0;
                     SSQuantity++;
                    }
      }
}
void InitSpeedSensorTmr    (TIM_TypeDef* TIM,unsigned short delay)
{
TIM_TimeBaseInitTypeDef     Tim_InitStruct;
Tim_InitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
Tim_InitStruct.TIM_CounterMode=TIM_CounterMode_Up;
Tim_InitStruct.TIM_Period=delay;         //     delay on 1.5 symb=750, 3.5 symb=1750 mks for speed under 19200,
Tim_InitStruct.TIM_Prescaler=35999;     //36MHz/(35999+1)=1000
TIM_TimeBaseInit(TIM,&Tim_InitStruct);

SpeedSensorTmrOn();
}
void    TIM5_IRQHandler    (void) // если сработало прерывание на 1 sec
{
if    (TIM_GetITStatus(TIM5,TIM_IT_Update))
    {
    TIM_ClearITPendingBit(SSTIMER,TIM_IT_Update);          //
    SpeedSensorTmrOff();
    if (SSQuantity)
        {
         SSFreq=SSQuantity/1;
         HoldingRegister[SS_FREQ_CURRENT]=SSFreq;
         GetAutoSpeed();
         SSQuantity=0;
        }
        else SSFreq=0;    
    SpeedSensorTmrOn();
    }
}


Нога, на которую подается частота - PC.7. Камень stm32f103vet.
Schulz_K
А как у вас настроено прерывание EXTI7 ? Там если включить одновременно прерывание по rising trigger и по falling trigger - то на один импульс у вас и получится 2 прерывания.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.