定时器输入捕获

 借用江协科技ppt:

介绍:

 

 

检测到左边的通道123,某一个发生电平翻转(与其他通道电平不同)会通过输入滤波器,可以去到ICx->预分频器->由输入捕获/输出比较寄存器(再一定时间里计数)得到计数值返回到CNT计数器里(CNT由内部标准时钟驱动)->下一个上升沿来前CNT先清零 (配置从模式复位清零,由硬件执行清零)                 

 *(频率不要太小,频率太低计数有可能会溢出(超过计数范围65535) )

通道1和2都可以实现直连或级联,例如TI1->TI1FP1    TI1->TI1FP2                                                   通道3和4也一样。

(由上升沿开始)一个引脚可以 控制两个捕获单元,一个上升沿触发(测频率),一个下降沿触发(间接占空比),实现PWMI模式(可以测出频率和占空比)

基本结构:

先打开定时器和gpio时钟 ->gpio初始化->配置时基单元->配置IC模式(PWMI)->选择触发源->选择从模式

代码:

#include "stm32f10x.h"                  // Device header

void IC_Init()
{ //打开时钟
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	TIM_InternalClockConfig(TIM3);//*定时器一定有时钟
	//GPIO配置
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU ;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 ;  //PA6为TIM_CH1
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//配置时基单元
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1 ;
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up ;
	TIM_TimeBaseInitStruct.TIM_Period = 65536 -1 ;//要保证不会溢出
	TIM_TimeBaseInitStruct.TIM_Prescaler = 72-1 ;
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);

  //配置IC(输入捕获)	
	TIM_ICInitTypeDef TIM_ICInitStruct;
	TIM_ICInitStruct.TIM_Channel = TIM_Channel_1 ; //CH1对应通道1/2
	TIM_ICInitStruct.TIM_ICFilter = 0xF ;           //滤波
	TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising ;
	TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1 ;
	TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI;//直连
	TIM_ICInit(TIM3, &TIM_ICInitStruct);
	TIM_PWMIConfig(TIM3,&TIM_ICInitStruct);//PWMI模式,1对2,上对下,直对交
	
	TIM_SelectInputTrigger(TIM3,TIM_TS_TI1FP1);//触发源
	
	TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset);//从模式
  
	TIM_Cmd(TIM3,ENABLE);//开启定时器

}

uint32_t IC_GetFreq()
{
   return 1000000/(TIM_GetCapture1(TIM3)+1);//读取频率
}

uint32_t IC_GetDuty()
{
	return   (TIM_GetCapture2(TIM3)+1)*100/(TIM_GetCapture1(TIM3)+1);//读取占空比
}

在时基单元中的计数寄存器和预分频器,可以认为先有分频,才有计数。预分频器为72 -1 .时钟频率就为1MHz=1us,每过1us->计数器+1

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值