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

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

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

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

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

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


 
Опции темы
Непрочитано 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.RU
 
Регистрация: 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.RU
 
Регистрация: 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, время: 08:37.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot