打印
[STM32F4]

【Nucleo-F413ZH创想】 实验七 多路中断脉冲输入实验

[复制链接]
921|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhjb1|  楼主 | 2017-1-27 20:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
【Nucleo-F413ZH创想】 实验七 多路中断脉冲输入实验
如题,要用到GPIO中断,需要打开InteruptIn.h文挡查看。实例中可以看到与前个实验六一样的需要定义1个对象类,编1个中断函数,而后写函数绑定这两者即可。
首先在对象类定义区定义中断对象,因为是输入,因此定义的是GPIO口号,为了一致,直接用口号来定义,先定义1个——PD_14:
InterruptIn plusIn14(PD_14);
PD_14为中断输入口,对象名为plusIn14。用计数中断口的数值[这是很有用的,方便**],定义一个16位的变量pj14,加在变量定义区的16位变量行中:
int16_t ip14;
在main主函数之前,写中断函数:
void plusIn14(void){wait(0.001f);if(PD_14) ip14++;}
前边的wait(0.001f)数值要小于输入的数值,本例打算用PA_5的100Hz信号输入,意即中断产生后延时0.001秒PD_14还是高,ip14增加1。
在main的循环语句前增加:
plusIn14.rise(&PlusIn14);//注意大小写不一样!
rise表示上升沿触发中断,执行中断函数PlusIn14()。如果改成fall,表示采用下降沿触发中断。
为了显示结果,在dispBase中增加:
c2l(4,0,41);c2l(4,1,48);c2l(4,2,17);c2l(4,3,20);c2l(4,4,26);//IP14:
在dispMes中增加:
c2l(4,5,16+(ip14/1000)%10);c2l(4,6,16+(ip14/100)%10);c2l(4,7,16+(ip14/10)%10);c2l(4,8,16+(ip14)%10);
显然ip14的数值超过4位就显示后4位了,可以增加的。
这也是中断执行的,主程序中没有语句。将PA_5与PD_14短路,下载运行结果见图71。
在工程中,利用IO口产生中断用途广泛,因此我们再在挨着PD_14的IO口PD_15依葫芦画瓢再定义1个中断口,其命名方法和编写函数同PD_14,而上升沿或下降沿则自己定义,增加的显示函数也自己增加,如果有问题再来网上讨论。最后的2路中断输入检测脉冲的结果见照片72。

71-1路中断脉冲检测.JPG (515.28 KB )

图71

图71

72-2路中断脉冲检测.JPG (519.07 KB )

图72

图72
沙发
hhxf1| | 2017-1-27 21:19 | 只看该作者
真有本事,太专业了,很棒!**年吉祥!

使用特权

评论回复
板凳
zhuotuzi| | 2017-1-28 09:16 | 只看该作者
输入用的什么函数发生器啊。

使用特权

评论回复
地板
zhjb1|  楼主 | 2017-1-28 21:09 | 只看该作者
zhuotuzi 发表于 2017-1-28 09:16
输入用的什么函数发生器啊。

没有用函数发生器,是自己产生的方波脉冲。由PA_5和时钟中断。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:永远好心情 [img]https://bbs.21ic.com/static/image/s

44

主题

223

帖子

1

粉丝