Labview实验十四:脉冲测量模拟(二)

接着上篇的主VI程序。

现在开始编写定时器中断服务子VI。

一,打开Timer_ISR_F4.vi

(一)编写编写定时器5的通道1触发中断服务子VI。

切换到TIM5_Channel_1分支

1,编写第1帧

(1)LED_1状态切换

(2)切换边沿检测方式:

当上升沿到来时:立即对定时器计数值和更新溢出中断次数清0,同时将捕获通道检测方式切换为下降沿。当松开KEY_UP按键时,产生的下降沿才能被STM32准确有效地捕获到。

当下降沿到来时(标记有效的脉冲检测):立即将捕获通道检测方式切换为上升沿,为检测下一个脉冲作准备;同时将获取定时器当前的计数值并保存到全局变量Counter_Edge中;最后将Complete_Flag置为真,表示通知主VI,中断程序已经检测到一个完整的脉冲信号,可以计算脉冲电平时间,并驱动BEEP发声。

2,编写第2帧

清除中断标志位,以便下一个脉冲能够正常触发

完整的定时器5通道触发中断服务子VI

(二)编写编写定时器5的更新溢出中断服务子VI。

切换到TIM5_Update(Overflow)分支

1,编写第1帧

每当产生一次更新溢出中断的时候,让LED_2反转状态,提示按键时间已超过出了自动重装值50000(5S=50000*100us)

(1)溢出次数累加:在脉冲高电平期间,对产生的所有溢出中断次数进行求和

LED_2状态提示:每当更新中断产生时,驱动LED_2进行状态翻转,这样就可以很直观地看到脉冲高电平期间发生的溢出中断次数,以便于估算脉冲的大致宽度。

2,编写第2帧

清除TIM5_Update(Overflow)中断标志位,以便于下一个更新溢出中断能够正常产生。

到此完成了本次实验的程序。

按照上次实验的方法进行编译下载。

发现按下KEY_UP时,LED_1未发生动作,与设想不符,表明定时器中断不起作用。经检查上篇的主VI程序有两处错误,请修正。

定时器输入通道映射函数要增加Group_Length常量1,表明用了多少个引脚。(本例使了PA0引脚)

(2)while循环里面的for循环等待函数的值改为100;

如下图:

再重新编译下载。

实验效果如下:

按下KEY_UP,LED_1就会点亮;松开LEY_UP,LED_1就好熄灭,同时BEEP就会发声,其声音时间长度等于之前LED_1点亮维持时间的长度。如果按下KEY_UP时间超过自动装数,LED_2的状态就会发生翻转。

举报
评论 0