【学习记录】STM32 输入捕获实验

STM32输入捕获工作过程(通道1为例)

 一句话总结工作过程:通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。

步骤1 设置输入捕获滤波器(通道1为例)

 步骤2:设置输入捕获极性(通道1为例)

步骤三:设置输入捕获映射通道(通道1为例)

步骤四:设置输入捕获分频器(通道1为例)

步骤五:捕获到有效信号可以开启中断

 

最后:看看定时器通道对应引脚 (以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)

输入捕获的一般配置步骤:

① 初始化定时器和通道对应IO的时钟。

② 初始化IO口,模式为输入:GPIO_Init();

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 输入

③初始化定时器ARRPSC

   TIM_TimeBaseInit();

④初始化输入捕获通道

   TIM_ICInit();

⑤如果要开启捕获中断,

    TIM_ITConfig();

    NVIC_Init();

⑥使能定时器:TIM_Cmd();

⑦编写中断服务函数:TIMx_IRQHandler();

实验目的:测量信号的脉冲宽度

重要代码:

timer.c:

 main.c:

猜你喜欢

转载自blog.csdn.net/weixin_47723114/article/details/127700004