【例4.4】如图4.11所示为使用外部中断方式,通过按键控制LED发光二极管,当按键按下时,对应的发光二极管发光;松开后再按下按键时,发光二极管熄灭。
图4.11 外部中断方式键盘控制LED硬件原理图
电路分析如下。
由于按键一侧接地,为了使按键松开时PC5引脚有确定的高电平输入,PC5引脚使用上拉工作模式。
LED电路与例4.2相同,在4.1.3.2已讲解,在此不再赘述。
编程要点如下。
(1)初始化按键引脚PC5和LED引脚PB5。
(2)开启所用外设时钟。
(3)配置NVIC(中断优先级)。
(4)初始化外部中断。
(5)编写EXTI(外部中断)服务函数。
程序编写及分析如下。
(1)复制工程模板文件,在该文件夹下再新建Led、Exit文件夹,用于分别存放新建的led.h、led.c和exti.h、exti.c文件。(www.daowen.com)
(2)添加misc.c、stm32f10x_exti.c、led.c、exti.c及stm32f10x_it文件夹下的stm32f10x_it.c到工程中,并将对应的头文件路径添加到编译路径中。
(3)编写源程序代码。LED部分的led.h代码如下所述。
从上述程序可以看出,与例4.3中LED部分基本一样,仅仅把不用的管脚代码删除即可。同时也可看出,如果LED所连接引脚改变了,仅需要把对应的宏修改一下,其他程序都不需修改,因此本例也可直接复制上例的Led文件夹,仅作部分修改即可。要学会这种编程方法,如果把常用外设的编写做成上述结构实现,这样可以在其他工程使用到时直接复制过来,稍作修改,便可移植到其他工程中,可以大大减少编程的工作量。
中断部分的exit.h代码如下。
stm32f10x_it.c为厂家给的例程程序,包含很多服务程序的空函数,使用时只要把所使用的服务程序添加规定的功能的程序即可。
主函数很短,功能就是等待中断的发生,一旦中断发生(按键按下),就好执行中断服务程序,完成LED亮灭的转换。为了便于程序的阅读,建议在每个程序的开始加上一些必要的注释,以方便以后的阅读和使用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。