Рабочий процесс захвата ввода STM32 (например, канал 1)
Одно предложение суммирует рабочий процесс: путем обнаружения сигнала фронта на TIMx_CHx , при переходе сигнала фронта (например, нарастающий фронт / спадающий фронт), текущее значение таймера ( TIMx_CNT ) сохраняется в соответствующем регистре захвата / сравнения ( TIMx_CCRx ) , завершить захват.
Шаг 1. Установите входной фильтр захвата (например, канал 1).
Шаг 2. Установите полярность захвата входного сигнала (например, канал 1).
Шаг 3. Установите канал сопоставления входного захвата (например, канал 1).
Шаг 4. Установите делитель входного захвата (например, канал 1).
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: