检测扩展板上的KEY1状态,控制蜂鸣器鸣笛。每按一次按键,蜂鸣器响一声。
由于每次新建工程都需要配置信息,比较麻烦,好在STM32CubeIDE提供了导入.ioc文件的功能,可以帮我们节省时间。
1.从LED的项目里导入ioc文件,并命名为BEEP。
2.根据原理图可知:蜂鸣器的控制引脚连接的是STM32芯片的PC5引脚。需要将PC5设置为GPIO_Output模式,并且修改标签(Label)为BEEP,其他配置如下图所示。
2.按键KEY1连接的是PD2引脚。需要将PD2设置为GPIO_Input模式,并且修改标签(Label)为KEY1,其他配置如下图所示。
保存并生成代码。
通过图形化配置了引脚信息,生成的代码已经包含系统初始化内容,所以不需要额外再初始化系统配置。
1.为了管理方便,我们新建一个BSP源码文件夹。在鼠标移动项目名称那里点击右键->New->Source Folder
2.将BSP添加到环境中。点击Project->Properties->C/C++ Build->settings->MCU GCC Compiler->include paths,再点击添加按钮将../BSP填入并保存。
3.新建一个bsp.h和一个bsp.c文件,右键BSP->New->Header File/Source File,然后输入对应名称即可。
这两个文件主要负责链接main.c中的部分函数,可以避免重复写代码。
4.在bsp.h增加以下内容:将LED的控制做成宏定义的方式,简单快捷。新建Bsp_Init()函数主要负责初始化,Bsp_Loop()主要负责主程序内容。Bsp_Led_Show_State_Handle()函数主要负责LED指示灯闪烁效果,用于提示系统正在运行。
5.在main.c文件中导入bsp.h头文件。
6.在main函数中调用Bsp_Init()。
7.在while(1)中调用Bsp_Loop()。
1.在BSP中新建蜂鸣器的驱动库bsp_beep.h和bsp_beep.c文件。在bsp_beep.h中增加以下内容:
其中Beep_Timeout_Close_Handle()函数需要每10毫秒调用一次,这样才可以保证Beep_On_Time()函数设置时间后按照正常的效果进行。Beep_On_Time(time)中time表示蜂鸣器开启的时间,如果time=0,则关闭蜂鸣器,如果time=1则蜂鸣器一直响,如果time>=10,则蜂鸣器响time毫秒后自动关闭(time应是10的倍数)。
2.在BSP中新建蜂鸣器的驱动库bsp_key.h和bsp_key.c文件。在bsp_key.h中增加以下内容:
其中Key1_State(mode)函数的功能是检测按键是否被下,需要每10毫秒调用一次。mode可以输入0或者1,mode=0表示按下KEY1就一直返回KEY_PRESS,松开才返回KEY_RELEASE,mode=1表示不管按下KEY1多长时间,都只返回一次KEY_PRESS,其他情况都返回KEY_RELEASE。
3.在Bsp_Init()中添加开机蜂鸣器响50毫秒,在Bsp_Loop()检测按键是否被按下,如果按下则响50毫秒后自动关闭。最下方是LED灯和蜂鸣器的控制句柄,只需要每10毫秒调用一次就可以。
按键KEY1和蜂鸣器都是板载元件,不需要手动连接。
烧录程序后,开机时蜂鸣器会先响50毫秒,LED灯每隔200毫秒闪一次,每按一次按键,蜂鸣器都会响50毫秒。