蓝桥杯stm32g431国赛备赛日记

今天我们来看国赛是怎么考输入捕获频率的:

当然看过我写的省赛的小伙伴们,这个东西还是算比较简单的。

先补充几个知识点吧:

看到我标上了红色的箭头这样连上之后才能进行输入捕获哟,记得连山哈。

先介绍一下变量(我命名感觉不太规范,各位伙伴别学我)

//PA1捕获所用到变量:
uint count_2 = 0; //次数
uint cnt_2_1 = 0; //第一次捕获的计数值
uint cnt_2_2 = 0; //第二次捕获的计数值
uint freq_2 = 0;  //频率
//PA2捕获所用到变量:
uint count_3 = 0; //次数
uint cnt_3_1 = 0; //第一次捕获的计数值
uint cnt_3_2 = 0; //第二次捕获的计数值
uint freq_3 = 0;  //频率

在看看捕获计算频率代码部分:

先解释一下,蓝桥杯的板子它的输出的最多也就溢出一次,所以我考虑溢出情况的时候也就是只考虑了一次的情况:

//输入捕获的回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if( htim ->Instance  == TIM2 )
	{
		if( htim ->Channel == HAL_TIM_ACTIVE_CHANNEL_2 ) //PA1捕获 
		{
			if( count_2 == 0)          //第一次捕获到
			{
				
				count_2 = 1;           //第二次捕获的标志
				cnt_2_1 = TIM2->CCR2;  //读一下此时计数值 
				
			}
			else if( count_2 == 1)     //第二次捕获到
			{
				count_2 = 0;           //将标志位置零
				cnt_2_2 = TIM2->CCR2;  //读出第二次计数值
				if( cnt_2_2 > cnt_2_1 )//此时没有溢出 
				{
					freq_2 = 1000000/(cnt_2_2 - cnt_2_1); //直接计算 
				}
				else if( cnt_2_2 < cnt_2_1 ) //溢出后
				{
					freq_2 = 1000000/( 0xffff - cnt_2_1 + cnt_2_2 + 1 ); //计算
				}
			}
		}
		
		
		
		if( htim ->Instance  == TIM2 )
		{
			if( htim ->Channel == HAL_TIM_ACTIVE_CHANNEL_3 )
			{
				if( count_3 == 0)
				{
					
					count_3 = 1;
					cnt_3_1 = TIM2->CCR3;
					
				}
				else if( count_3 == 1)
				{
					count_3 = 0;
					cnt_3_2 = TIM2->CCR3;
					if( cnt_3_2 > cnt_3_1 )
					{
						freq_3 = 1000000/(cnt_3_2 - cnt_3_1);
					}
					else if( cnt_3_2 < cnt_3_1 )
					{
						freq_3 = 1000000/( 0xffff - cnt_3_1 + cnt_3_2 + 1 );
					}
				}
			}
		}
	}
}

最后当然是要在主函数开启输入捕获的中断:

  HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
  HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_3);

看看结果是可以的

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值