Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

STM32F4+таймеры+захват

Непрочитано 17.03.2016, 13:06  
TmYAG
Прохожий
 
Регистрация: 19.12.2014
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
TmYAG на пути к лучшему
По умолчанию STM32F4+таймеры+захват

Всем привет!
Изучаю таймеры.
Перешел к изучению режима захвата.
В программе дрыгаю светодиодами с задержкой 5 сек.
попутно таймером TIM3 первый канал которого находится на PA6 пытаюсь захватить сигнал со светодиода, что живет на PD12. Просто замыкаю эти две ноги.
Код:
#include "stm32f4xx.h"                  // Device header

void init_gpio(void);
void init_timer(void);
void led_blinking(void);


static volatile uint32_t TimeTick;
volatile int capture1;
volatile int capture2;

void SysTick_Handler() { 
   if(TimeTick) 
   {
      TimeTick--;
   }
}

void TIM3_IRQHandler(){
   if(TIM3-›SR&2){
   }
}


int main(){
   SysTick_Config(SystemCoreClock/1000);
   init_gpio();
   init_timer();
   while(1){
      led_blinking();
   }
   
}

void init_gpio(){
   /*Configure pins 12, 13, 14, 15 on port D*/
   RCC-›AHB1ENR |= RCC_AHB1ENR_GPIODEN;
   GPIOD-›MODER = 0x55000000;
   
   /*Cofigure TIM3, Channel 1 (PA6)*/
   RCC-›AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
   GPIOA-›MODER = GPIO_MODER_MODER6_0;
   GPIOA-›AFR[0] = 0x02000000;
}

void init_timer(){
   RCC-›APB1ENR |= RCC_APB1ENR_TIM3EN;
   TIM3-›CCMR1 |= TIM_CCMR1_CC1S_0;                           // CH1 to PA6
  TIM3-›CCMR1 |= (TIM_CCMR1_IC1F_0 | TIM_CCMR1_IC1F_1);            //
  TIM3-›CCER &= ~TIM_CCER_CC1P;
  TIM3-›CCER &= ~TIM_CCER_CC1NP;
  TIM3-›CCMR1 &= ~TIM_CCMR1_IC1PSC;                           // 
  TIM3-›CCER |= TIM_CCER_CC1E;                              // 
  TIM3-›DIER |= TIM_DIER_CC1IE;                              // 
  TIM3-›CR1 |= TIM_CR1_CEN;                                 // 
  NVIC_EnableIRQ(TIM3_IRQn);   
}


void DelaymS(uint32_t time){
   TimeTick = time;
    while(TimeTick); 
}

void led_blinking(){
   GPIOD-›BSRRH = GPIO_BSRR_BS_12 | GPIO_BSRR_BS_13 | GPIO_BSRR_BS_14 | GPIO_BSRR_BS_15; //LEDs On
   DelaymS(5000);//Delay using SysTick
   GPIOD-›BSRRL = GPIO_BSRR_BS_12 | GPIO_BSRR_BS_13 | GPIO_BSRR_BS_14 | GPIO_BSRR_BS_15; //LEDs Off
   DelaymS(5000);
}
Настроил порт Д и диоды.
Настроил порт А и для шестой ноги определил альтернативную функцию.
Настроил таймер в режиме захвата, захват по фронту.
Но почему-то не заходит в прерывание. Период изменения сигнала для светодиодов 5 сек.
Где я мог ошибиться?
Реклама:
TmYAG вне форума  
Непрочитано 17.03.2016, 22:02  
serb-radio
Гражданин KAZUS.RUN
 
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
serb-radio на пути к лучшему
По умолчанию Re: STM32F4+таймеры+захват

Отсылаю вам конфиг захвата для STM32f103vg


void T2_capt_init(void)
{
// pin capt assign to TIM2_ch2
GPIOA-›CRL &= ~GPIO_CRL_MODE1;
GPIOA-›CRL |= GPIO_CRL_CNF1_0;
GPIOA-›CRL &= ~GPIO_CRL_CNF1_1;

RCC-›APB1ENR |=RCC_APB1ENR_TIM2EN;// Timer Capt

TIM2-›PSC = 24-1;
TIM2-›ARR = 0xffff;

TIM2-›CCMR1&=~TIM_CCMR1_CC1S_0;// connect IC2 to TI1
TIM2-›CCMR1|=TIM_CCMR1_CC1S_1;
TIM2-›CCER&= ~TIM_CCER_CC1P; // capture on rising edge


TIM2-›CCMR1&=~TIM_CCMR1_CC2S_1;// connect IC2 to TI2
TIM2-›CCMR1|=TIM_CCMR1_CC2S_0;
TIM2-›CCER|=TIM_CCER_CC2P; // capture on falling edge


TIM2-›SMCR|= TIM_SMCR_TS_2 | TIM_SMCR_TS_1;
TIM2-›SMCR&= ~TIM_SMCR_TS_0;

TIM2-›SMCR|= TIM_SMCR_SMS_2; // Reset mode
TIM2-›SMCR&= ~TIM_SMCR_SMS_1;
TIM2-›SMCR&= ~TIM_SMCR_SMS_0;

TIM2-›CCER|= TIM_CCER_CC1E | TIM_CCER_CC2E;

TIM2-›DIER |= TIM_DIER_CC2IE;TIM2-›DIER |= TIM_DIER_CC1IE;

TIM2-›CR1 = TIM_CR1_CEN | TIM_CR1_ARPE;

NVIC_SetPriority(TIM2_IRQn , 3);
NVIC_EnableIRQ(TIM2_IRQn);
return;
}


void TIM2_IRQHandler (void) // capture
{
TIM2-›SR &= ~TIM_SR_CC1IF;
TIM2-›SR &= ~TIM_SR_CC2IF;

if((dmp_cond==0)|((dmp_cond!=0)&(i_pulse›1)))
{
n_phase++;
if (n_phase==1+n_phase_int)
{
TIM2-›DIER |= TIM_DIER_CC1IE | TIM_DIER_CC2IE;
//T_phase_1=T_phase_2=0;
}
if (n_phase==2+n_phase_int)
{
T_phase_1_tmp=T_phase_2_tmp=TIM2-›CCR1;
}

if (n_phase==3+n_phase_int)
{
T_phase_1_tmp=TIM2-›CCR1;
T_phase_2_tmp=TIM2-›CCR2-TIM2-›CCR1;
if (T_phase_2_tmp›4*T_phase_1_tmp) T_phase_2_tmp=T_phase_1_tmp;
}

}
return;
}
__________________
То, что нас не убивает - делает нас сильнее
serb-radio вне форума  
Непрочитано 17.03.2016, 22:03  
serb-radio
Гражданин KAZUS.RUN
 
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
serb-radio на пути к лучшему
По умолчанию Re: STM32F4+таймеры+захват

Мерит длительность первого положительной фазы сигнала и второй нулевой фазы в пачке импульсов. Думаю, разберетесь
__________________
То, что нас не убивает - делает нас сильнее
serb-radio вне форума  
Непрочитано 21.03.2016, 09:50  
TmYAG
Прохожий
 
Регистрация: 19.12.2014
Сообщений: 8
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
TmYAG на пути к лучшему
По умолчанию Re: STM32F4+таймеры+захват

Спасибо! проблема была в том, что я неверно настроил пин на альтернативную функцию.
Код:
GPIOA-›MODER = GPIO_MODER_MODER6_1;
должно быть
А вот насчет установки предделителя и значения неуверен что обязательно устанавливать. У меня что с этой правкой что без нее работает. То есть мк уходит в прерывание.

Далее решил разобраться а как же определить период сигнала.
По идее в обработчике прерывания необходимо (сбросить флаг само собой) записать в переменную значение TIM3-›CCR1, а затем вычислить разницу между предыдущим и следующим значениями.
Код:
capture1 = capture2 = 0;
	capture2 = TIM3-›CCR1;
	t = capture2 - capture1;
Верно?
Но почему-то t какая-то фигня пишется. HEX в DEC не забываю перевести.

Последний раз редактировалось TmYAG; 21.03.2016 в 11:00.
TmYAG вне форума  
 

Метки
stm32f4, stm32f4discovery, timers_capture
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы по таймерам и GPIO (STM32F4) Реостат Песочница (вопросы новичков) 6 05.02.2016 23:12
stm32f4 sqrt, возведение в степень и т.д sosedi ARM 8 09.04.2013 15:28
Не стартует stm32f4 STM32F4 Песочница (вопросы новичков) 2 04.12.2012 22:46
Таймеры ATmega8 Dimitrij Микроконтроллеры, АЦП, память и т.д 0 26.08.2011 00:06
Такие разные 555-е таймеры boor Коллекция глюков 12 24.06.2009 15:44


Часовой пояс GMT +4, время: 00:34.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.