定时器输入捕获实验

一.参考资料

  • 探索者STM32F4开发板
    《STM32F4开发指南-库函数版本》-第15章 输入捕获实验
  • STM32F4xx官方资料:
    《STM32F4中文参考手册》-第15章 通用定时器

二.通用定时器PWM概述

1.STM32 PWM工作过程

PWM工作过程

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

输入捕获工作过程

一句话总结工作过程:

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

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

输入捕获1滤波器

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

输入捕获极性

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

输入捕获映射通道

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

输入捕获分频器

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

中断使能寄存器

8.最后:看看定时器通道对应引脚,以TIM5为例

三.输入捕获关键库函数

1.输入捕获通道初始化函数:

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);

2.通道极性设置独立函数:

void TIM_OCxPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);

3.获取通道捕获值

uint32_t TIM_GetCapture1(TIM_TypeDef* TIMx);

四.输入捕获实验

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

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

  2. 初始化IO口,模式为复用:

    GPIO_Init();
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; 
  3. 设置引脚复用映射:

    GPIO_PinAFConfig();
  4. 初始化定时器ARR,PSC

    TIM_TimeBaseInit();
  5. 初始化输入捕获通道

    TIM_ICInit();
  6. 如果要开启捕获中断,

    TIM_ITConfig();
    NVIC_Init();
  7. 使能定时器:

    TIM_Cmd();
  8. 编写中断服务函数:

    TIMx_IRQHandler();

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

脉冲宽度

3.概述

最后修改:2020 年 02 月 06 日 11 : 42 AM
如果觉得我的文章对你有用,请随意赞赏