突击蓝桥杯嵌入式(八)——逻辑分析仪使用、同一定时器发出不同频率的两路方波

突击蓝桥杯嵌入式(八)——逻辑分析仪使用、同一定时器发出不同频率的两路方波

引言:由于当地疫情原因,笔者参加的是第十三届第二场的省赛,然后以线上形式进行,由于家里没有示波器,所以查看方波波形需要用到逻辑分析仪,这篇主要是介绍一下逻辑分析仪的使用,以及如何用同一定时器发出不同频率和占空比的PWM信号(输出比较)。

一、输出比较

不多废话,我们直接上定时器配置,需要注意以下几点:

首先,把你想要输出信号的引脚,设置为图里的输出比较模式,然后配置预分频系数,由于笔者时钟频率设置的是80MHZ,所以这里填写了80-1,建议大家尽量配置成分完频1MHZ这样子,比较方便。


然后我们配置中断

在这里插入图片描述

然后就可以生成工程,敲代码了,(时钟树我就不说了),我们进入工程,打开图里的文件

在这里插入图片描述

然后找到,右键,然后Go to Definition,
在这里插入图片描述

然后找到输出比较回调函数,继续Go to.

在这里插入图片描述
得到这个:

_weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim);

然后我们把这个,复制下来,放到main里,开始编写回调函数,简要的和大家讲以下原理,简单来说就是当定时器的值等于ARR的值的时候,他就会进入我们的回调函数,然后我们利用这个特性,可以在中断回调函数里,改变ARR的值,以及引脚的高低电平,从而达到,频率可控,占空比可调的效果,函数如下:

uint32_t time1,time2;
float duty1,duty2;
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1)			#判断通道
	{
		if(flag1 == 1)									#判断应该为高电平还是低电平
		{
			flag1^=1;									#翻转状态
			TIM3->CCR1 =  TIM3->CCR1 + time1 * duty1;	#更新ARR的值,
			__HAL_TIM_SET_CAPTUREPOLARITY(htim,TIM_CHANNEL_1,TIM_OCPOLARITY_HIGH);	#置高位电平
		}
		else if(flag1 == 0)
		{
			flag1^=1;
			TIM3->CCR1 =  TIM3->CCR1 + time1 * (1 - duty1);
			__HAL_TIM_SET_CAPTUREPOLARITY(htim,TIM_CHANNEL_1,TIM_OCPOLARITY_LOW);
		}
	}
	if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_2)								#同上
	{
			if(flag2 == 1)
			{
				flag2^=1;
				TIM3->CCR2 =  TIM3->CCR2 + time2 * duty2;
				__HAL_TIM_SET_CAPTUREPOLARITY(htim,TIM_CHANNEL_2,TIM_OCPOLARITY_HIGH);
			}
			else if(flag2 == 0)
			{
				flag2^=1;
				TIM3->CCR2 =  TIM3->CCR2 + time2 * (1 - duty2);
				__HAL_TIM_SET_CAPTUREPOLARITY(htim,TIM_CHANNEL_2,TIM_OCPOLARITY_LOW);
			}
	}
}

我们举一个例子,假如是我要配置1000HZ,占空比百分之50的PWM波,我们应该这么调节time和duty的值呢,首先我们从上面的代码里可以得到,他的周期内计数其实就是time,意思就是在一个方波周期内,定时器计数了time次,然后定时器多少秒计一个数呢?是定时器频率的倒数,如果我们之前设置时1MHZ的话,那么他的频率是不是就是1MHZ/time啊,所以我们如果要得到1000HZ频率的方波,要设置time为100 0000/1000 = 1000,然后占空比也很好理解,就是0.5代表百分之50的占空比,基于此我们可以写一个函数,方便调节。

void set_pwm_duty_pl(float duty,int HZ,int id)
{
	if(id == 1)
	{
		time1 = 1000000/HZ;				//这里的100 0000是我分完频之后的时钟频率
		duty1 = duty;
	}
	if(id == 2)
	{
		time2 = 1000000/HZ;
		duty2 = duty;
	}
}

二、逻辑分析仪

这个其实没啥好说的,就是一个流程,首先笔者买的是淘宝上最便宜的,28块钱的逻辑分析仪,然后软件是USBee Suite。

第一步,我们插上逻辑分析仪之后,然后打开软件,之后你会看到:
在这里插入图片描述

之后我们点击上面的Setup,然后选择第一个 8通道,然后我们点底下的Capture Man,连续采样,然后就可以看到波形。
在这里插入图片描述
哦对,还有接线,没啥说的,共地就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路人甲YYH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值