【探索STM32F303VC-EVAL开发板】系列之三 ——按键+LED Fengye5340 SM32F303VC-EVAL开发板上面带有4路LED,颜色分别是蓝色、红色、橙色和绿色,用PE8/PE9/PE10/PE11这4个IO来控制,可以进行单路、流水、信号指示等各种应用。按键资源方面,F3-EVAL还带有一个用户按键,用PE6口进行控制,一个Joystick按键,分别用PC13/PD5/PB5/PD6/PE7这5个IO进行控制。 电路原理图如下:
第一 简单LED灯控制 实现LED灯的控制是比较简单的,根据上面的原理图,只要给PE8/PE9/PE10/PE11这些IO赋值就可以。赋值1时,关闭LED, 赋值0时,点亮LED。 在进行各种LED显示时,最基本的步骤就是: A、端口初始化。包括打开时钟,端口配置,初始化和附初始值。见图
在其中,使用了一些宏定义,见附件LED_303VCT6.H文件内容。 B、实现软件延时子函数、根据需要实现硬件延时(systick or timer)。
C、C、编写各种LED灯子程序
在这里,实现了蓝/红/橙/绿LED灯的分别闪烁和翻转,左流水灯,右流水灯,全部闪烁等子程序。这些程序可以单独调试,为了增加应用性,将这些内容放在按键部分中了。 第二 用户按键和JOYSTICK 按键是最常用的输入设备,编写按键驱动程序,通常采用软件查询方式和中断方式。在F3-EVAL中,实现了用户按键PE6的软件查询方式,并利用用户按键实现多种功能。对于JOYSTICK,有5个按键,采用了外部中断方式实现。附件一工程是 用户按键程序代码。附件二是采用中断方式的程序代码(可以在里面做修改,将软件查询和中断方式集合在一块)。 下面以第一个附件内容为例,说一下配置步骤: A、端口初始化。包括PE6端口的时钟,引脚设置,上下拉设置等。
B、实现软件扫描子程序,这个程序按照通常的方式编写 C、设置systick定时,这里设置成10ms的延时,然后将按键扫描子程序,放入systick的中断服务程序中,也就是让系统每10ms检测一下按键。当然也可以采用定时器资源实现,延时时间可调。在一些例程里面,通常会把按键扫描放到主函数的while循环内,这样会浪费CPU资源。采用硬件定时扫描,不会占用CPU,可以让其执行任务。
D、在主函数中增加一个u8变量,实现按键次数的记录。 变量key_num负责用户按键次数的记录,当按用户按键的次数不同时,会用不同的LED子程序进行显示,这里实现了7个处理,如果感兴趣,可以增加更复杂的应用。 第二个附件内容是利用中断方式实现的Joystick按键。步骤如下: A、端口初始化。PC13/PD5/PB5/PD6/PE7端口的各种设置。 B、配置外部中断线 C、设置中断优先级。 D实 D、实现中断服务函数对中断线按键的识别。
E、在主函数中,做键值分支处理即可。 问题 在查阅F3-EVAL原理图时,发现PB5和PD5分别连着joystick的左键和下键,而这两个端口所在中断向量服务函数只有一个,即EXTI9_5_IRQHandler 和EXTI_Line5。通常情况下,中断线一次只能使用一个,所以在程序中,只实现了一个PD5的中断,另一个进入服务程序后,没有反应。F3-EVAL既然这样设置硬件,并且在DEMO演示中实现了左键功能,也就是说,是可以用一个中断线和中断服务程序实现两个按键的检测的。由于网上F3-EVAL资料有限,本人没有找到官网例程,所以,现在一时也无法实现这个内容。如果哪位大侠有这方面经验,可以向您学习一下。 |