蓝桥杯嵌入式——TIM输入捕获

TIM输入捕获——频率、占空比测量

配置

  1. 电路原理图
    频率信号发生器
    在这里插入图片描述
    从上图我们可以看到频率发生器分别连接了 PA15 和 PB4,通过在CubeMX中点击引脚可查看到,可以得知这两个引脚可用作以下定时器的输入捕获:
  • PA15 ----> TIM2_CH1
  • PB4 ----> TIM3_CH1

程序编写

例1:使用频率发生器产生频率,然PA15和PB4输入捕获

注:最好不要与扫描按键的定时器相同,否则按键会失效
分别配置TIM2_CH1 和 TIM3_CH1,如下:
在这里插入图片描述
在这里插入图片描述
都为直接捕获,捕获上升沿,开启定时器中断

  1. 初始化
    在 main.c 中开启输入捕获定时器
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_1);
  1. 编写输入捕获中断回调函数
    在 interrupt.c 中重新定义输入捕获的中断回调函数
unsigned int ccrl_val1 = 0, ccrl_val2 = 0;
unsigned int frq1 = 0, frq2 = 0;

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM2)
    {
        ccrl_val1 = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
        __HAL_TIM_SetCounter(htim,0);//计时器清零
        frq1 = (80000000/80)/ccrl_val1;//频率
        HAL_TIM_IC_Start_IT(htim,TIM_CHANNEL_1);
    }
    if (htim->Instance == TIM3)
    {
        ccrl_val2 = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
        __HAL_TIM_SetCounter(htim,0);//计时器清零
        frq2 = (80000000/80)/ccrl_val2;//频率
        HAL_TIM_IC_Start_IT(htim,TIM_CHANNEL_1);
    }
}

例2:用PA16输出PWM波, PA15 捕获频率和占空比

PA16的配置看之前的PWM,下面主要配置 PA15
在这里插入图片描述
在这里插入图片描述

  1. 初始化
HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1);

HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
  1. 编写中断回调函数
uint32_t ccrl_val11 = 0,ccrl_val12 = 0;
float duty1 = 0;
uint32_t frq1 = 0;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM2)
	{
		ccrl_val11 = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);     //上升沿
		ccrl_val12 = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2);     //下降沿
		if(ccrl_val11 != 0)
		{
			__HAL_TIM_SetCounter(htim,0);             
			duty1 = ((float)ccrl_val12/ccrl_val11)*100;     //占空比
			frq1 = (80000000/80)/ccrl_val11;            	//频率
		}
		HAL_TIM_IC_Start_IT(htim, TIM_CHANNEL_1);
		HAL_TIM_IC_Start_IT(htim, TIM_CHANNEL_2);
	}
}
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值