突击蓝桥杯嵌入式(八)——逻辑分析仪使用、同一定时器发出不同频率的两路方波
引言:由于当地疫情原因,笔者参加的是第十三届第二场的省赛,然后以线上形式进行,由于家里没有示波器,所以查看方波波形需要用到逻辑分析仪,这篇主要是介绍一下逻辑分析仪的使用,以及如何用同一定时器发出不同频率和占空比的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,连续采样,然后就可以看到波形。
哦对,还有接线,没啥说的,共地就行。