接着上篇的主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的状态就会发生翻转。
1.《labview如何指定物理通道,labview未指定物理通道》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《labview如何指定物理通道,labview未指定物理通道》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3294592.html