[Запись обучения] Эксперимент по захвату входных данных STM32

Рабочий процесс захвата ввода STM32 (например, канал 1)

 Одно предложение суммирует рабочий процесс: путем обнаружения сигнала фронта на TIMx_CHx , при переходе сигнала фронта (например, нарастающий фронт / спадающий фронт), текущее значение таймера ( TIMx_CNT ) сохраняется в соответствующем регистре захвата / сравнения ( TIMx_CCRx ) , завершить захват.

Шаг 1. Установите входной фильтр захвата (например, канал 1).

 Шаг 2. Установите полярность захвата входного сигнала (например, канал 1).

Шаг 3. Установите канал сопоставления входного захвата (например, канал 1).

Шаг 4. Установите делитель входного захвата (например, канал 1).

Шаг 5: При захвате действительного сигнала прерывание можно включить.

 

Наконец: посмотрите на соответствующие контакты канала таймера (в качестве примера возьмем TIM5).

 

Функция инициализации канала захвата ввода: void TIM_ICInit ( TIM_TypeDef * TIMx , TIM_ICInitTypeDef * TIM_ICInitStruct );
typedef struct

{

  uint16_t TIM_Channel; //捕获通道1-4  

  uint16_t TIM_ICPolarity; //捕获极性

  uint16_t TIM_ICSelection; //映射关系

  uint16_t TIM_ICPrescaler; //分频系数

  uint16_t TIM_ICFilter;  //滤波器

} TIM_ICInitTypeDef;
TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; 
TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM5_ICInitStructure.TIM_ICFilter = 0x00;
TIM_ICInit(TIM5, &TIM5_ICInitStructure);
Независимая функция установки полярности канала:

void TIM_OCxPolarityConfig ( TIM_TypeDef * TIMx , uint16_t TIM_OCPolarity )

Получить значение захвата канала:

uint32_t TIM_GetCapture1( TIM_TypeDef * TIMx )

Общие шаги настройки для захвата входных данных:

① Инициализируйте таймер и часы, соответствующие вводу-выводу канала.

② Инициализация порта ввода-вывода , ввод режима: GPIO_Init ();

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD ; //PA0 — 入

③Инициализация таймера ARR , PSC

   TIM_TimeBaseInit ();

④Инициализация входного канала захвата

   TIM_ICInit ();

⑤Если вы хотите включить прерывание захвата,

    TIM_ITConfig ();

    NVIC_Init ();

⑥Включить таймер: TIM_Cmd ();

⑦ Функция обслуживания прерывания записи: TIMx_IRQHandler ();

Цель эксперимента: измерить ширину импульса сигнала.

 

Важный код:

таймер.с:

 main.c:

 

Supongo que te gusta

Origin blog.csdn.net/weixin_47723114/article/details/127700004
Recomendado
Clasificación