STM32F407定时器输入捕获

STM32F407定时器输入捕获_第1张图片STM32F407定时器一共有14个。其中分为基本定时器、通用定时器、高级定时器。具体功能如上图所示。下面介绍下输入捕获模式。
输入捕获:通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变的时候,将当前的定时器的值(TIMx_CNT)存放到对应的捕获/比较寄存器里面,完成一次捕获.
下图是定时器原理图的输入捕获部分
STM32F407定时器输入捕获_第2张图片
第一部分:设置输入捕获滤波器,用来滤波的。信号从TI1输入,通过滤波,TI1F输出此信号,正常情况信号没有抖动,TI1F信号就等于TI1输入信号。
ICF[3:0]用来设置输入采样频率的数字滤波器长度,如ICF=0011;会在捕获到上升沿时,以fCK_INT的频率连续采样八次通道1的电平,若都为高电平,则说明这是一个有效的触发,就会触发捕获中断,这样就可以滤除那些高电平脉宽低于八个采样周期的脉冲信号,达到滤波得效果,若不做滤波处理,设置ICF=0000,只要检测到跳边沿,就触发捕获。
STM32F407定时器输入捕获_第3张图片
fDTS频率根据TIMx_CR1的CKD[1:0]设置。
STM32F407定时器输入捕获_第4张图片
第二部分:设置输入捕获极性:配置边沿检测器检测上升沿还是下降沿。
STM32F407定时器输入捕获_第5张图片 第三部分:设置输入捕获映射通道:通道一信号也可以映射在通道二上,同理通道二信号也可以映射到通道一上。
STM32F407定时器输入捕获_第6张图片
第四部分:设置输入捕获分频器,就是设置检测到几次跳变沿之后触发捕获。
STM32F407定时器输入捕获_第7张图片
第五部分:捕获到有效信号开启中断。
STM32F407定时器输入捕获_第8张图片
下面是标准库中的结构体和初始化函数。

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;  把通道一和TI1映射在一起
TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; 设置分频系数1分频
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_AF;
③设置引脚复用映射:
GPIO_PinAFConfig();
④初始化定时器ARR,PSC
TIM_TimeBaseInit();
⑤初始化输入捕获通道
TIM_ICInit();
⑥如果要开启捕获中断,
TIM_ITConfig();
NVIC_Init();
⑦使能定时器:TIM_Cmd();
⑧编写中断服务函数:TIMx_IRQHandler();

你可能感兴趣的:(闲散文章,stm32,单片机,arm)