Измерение длительности сигнала с помощью stm32f429i-disco

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Alex_Golubev
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

Измерение длительности сигнала с помощью stm32f429i-disco

Сообщение Alex_Golubev »

Всем привет.
Хочу померить длительность сигнала stm32f429i-disco. Как я вижу решение по заднему фронту сигнала происходит (обнуление ) запуск счетчика по переднему конец счета и вызов вектора прерывание в котором можно считать данные длительности. Из даташита понял, что данную операцию аппаратно можно решить с помощью таймера TIM9. Написал функции настройки таймера, порта, обработчика прерывания. Прошу проверить код (сам пока не могу т.к нет железа на руках). Только начал работать с stm32f429zi пока еще не знаю всех его тонкостей. Использую проект для тач панели. Вывожу данные на lcd.

Код: Выделить всё

 #include "main.h"
#include <stdio.h>

void TIM1_BRK_TIM9_IRQHandler  (void);

uint16_t result_measurement_duration; 

//static void TP_Config(void);
void TIMERInit (void);
void PORT_CAPTUR_init(void);

int main(void)
{
    char array[15]; 
  
  LCD_Init();
  LCD_LayerInit();
  TIMERInit();
  PORT_CAPTUR_init(); 
  
  LTDC_Cmd(ENABLE);

  LCD_SetLayer(LCD_FOREGROUND_LAYER);
  
  LCD_Clear(LCD_COLOR_WHITE);
  
  
  
  LCD_SetTextColor(LCD_COLOR_BLUE2);
  LCD_SetFont(&Font8x8);
  __enable_irq ();  
   
  while (1)
  {
     sprintf(array, "%s %d ", "duration=",result_measurement_duration);
     LCD_DisplayStringLine(LINE(1), (uint8_t*)"array");
  }
}

void TIMERInit (void){
  
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9, ENABLE);
   TIM_ICInitTypeDef  TIM_ICInitStructure;
   TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
   TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
   TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
   TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
   TIM_ICInitStructure.TIM_ICFilter = 0x0;
   TIM_PWMIConfig(TIM9, &TIM_ICInitStructure);  
   
   TIM_SelectInputTrigger(TIM9, TIM_TS_TI2FP2);
   
   TIM_SelectSlaveMode(TIM9, TIM_SlaveMode_Reset);
   
   TIM_SelectMasterSlaveMode(TIM9, TIM_MasterSlaveMode_Enable);
   
   TIM_ITConfig(TIM9, TIM_IT_CC1, ENABLE);
   
   NVIC_EnableIRQ( TIM1_BRK_TIM9_IRQn);
   
   TIM_Cmd(TIM9, ENABLE);
   
   NVIC_SetPriority(TIM1_BRK_TIM9_IRQn, 1);
   
}

void PORT_CAPTUR_init(void){
   GPIO_InitTypeDef  GPIO_InitStructure;
     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);

      GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6;
      GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;
      GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
      GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
      GPIO_PinAFConfig(GPIOE, GPIO_PinSource6, GPIO_AF_TIM9);
      GPIO_Init(GPIOE, &GPIO_InitStructure);
}

void TIM1_BRK_TIM9_IRQHandler  (void)
{
result_measurement_duration = TIM9->CCR1; 
} 
Реклама
Аватара пользователя
Borodach
Модератор
Сообщения: 22897
Зарегистрирован: Пн дек 08, 2008 19:28:04
Откуда: 10км от Москвы на Север

Re: Измерение длительности сигнала с помощью stm32f429i-disc

Сообщение Borodach »

Не дублируйте свою тему!
Реклама
Alex_Golubev
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс ноя 15, 2015 05:54:13

Re: Измерение длительности сигнала с помощью stm32f429i-disc

Сообщение Alex_Golubev »

Подумал, что первый раз тема не создалась. Ссылка на проект https://yadi.sk/d/6WX2lhHWkTkvs .
Ответить

Вернуться в «ARM»