【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。
|