STM32-启用蜂鸣器

avatar
作者
猴君
阅读量:1

 目录

1 、电路构成及原理图 

2、编写实现代码

main.c

beep.c

beep.h

3、代码讲解

4、 烧录到开发板调试、验证代码

5、检验效果


本人使用的是朗峰 STM32F103 系列开发板,此笔记基于这款开发板记录。

1 、电路构成及原理图 

首先,通过朗峰 F1 开发板原理图看到,蜂鸣器 BEEP 是有源蜂鸣器,这样使用起来就很简单,只要给蜂鸣器接上 3.3-5v 电源,蜂鸣器就会持续的发出声音。Ok,我们看到蜂鸣器的正极端已连接到开发板的 3.3v 电源上了,另一端连接到 STM32F103RCT6 的通用输入输出端口 GPIO 的 PC5 引脚上,也就是说我们只要通过编写代码让PC5 端口输出低电平蜂鸣器就可以发出声音来了.

2、编写实现代码

大家都晓得 C 语言的源文件和头文件也就是.c .h 这种结构。其中源文件.c 主要是函数的实现,头文件.h 则是对应源文件中函数的声明。
 

main.c

#include "main.h"  /**   * @brief   0经验值动手之GPIO旅---启用蜂鸣器   * @Board   朗峰 STM32 F103RCT6系列开发板     * @author  langfeng   */ int main(void) {  /*HAL库初始化*/   HAL_Init();   /*初始化系统时钟频率为72MHz及延时函数初始化*/   SystemClock_init(RCC_PLL_MUL9); 	/*蜂鸣器IO初始化*/ 	beep_init();  		while (1) 		{ 			beep_H;           //蜂鸣器io引脚置高电平 蜂鸣器不发声 			delay_ms(500);    //延时500毫秒 			beep_L;           //蜂鸣器io引脚置低电平 蜂鸣器发"哔哔"声 			delay_ms(500);    //延时500毫秒 		} }  

beep.c

/**   * @brief   蜂鸣器驱动代码   * @file    beep.c   * @author  langfeng   * @date    2021-12-18   * @version V1.1   * @Board   朗峰 STM32 F103RCT6系列开发板     */  #include "beep.h"  /*蜂鸣器IO初始化*/ /** * @brief  蜂鸣器初始化函数        * @param  none * @retval none */ void beep_init(void) { 	GPIO_InitTypeDef GPIO_Init;                        //GPIO_Init:GPIO_InitTypeDef结构体类型的变量                                                      //使用GPIO之前必须开启GPIO端口时钟 	__HAL_RCC_GPIOC_CLK_ENABLE();                      //开启GPIOC时钟  	GPIO_Init.Pin=GPIO_PIN_5|GPIO_PIN_13;               //BEEP IO引脚PC5 PC13是LCD屏背光 	GPIO_Init.Mode=GPIO_MODE_OUTPUT_PP;  	              //输出模式选择推挽输出 	GPIO_Init.Pull=GPIO_PULLUP;          	              //激活上拉 	GPIO_Init.Speed=GPIO_SPEED_FREQ_HIGH;               //IO速度设为高速 	HAL_GPIO_Init(GPIOC,&GPIO_Init);                    //按以上设置初始化IO引脚   HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,GPIO_PIN_SET);   //默认蜂鸣器不蜂鸣   HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);//未使用LCD屏关闭背光以节电 }

beep.h

#ifndef __BEEP_H_ #define __BEEP_H_  #include "stm32f1xx_hal.h" #include "User_Settings.h"  /**   * @brief   蜂鸣器驱动代码   * @file    beep.c   * @author  langfeng   * @date    2021-12-18   * @version V1.1   * 应用开发板 朗峰 STM32 F103RCT6系列开发板     */  #define  beep_H      PCout_1(GPIO_PIN_5)   	//宏定义蜂鸣器引脚PC5输出高电平 #define  beep_L      PCout_0(GPIO_PIN_5)    //宏定义蜂鸣器引脚PC5输出低电平  void beep_init(void);                       //蜂鸣器IO初始化 #endif  

3、代码讲解

源文件 beep.c 比较简单就是蜂鸣器的初始化函数。 

函数的首行是GPIO初始化句柄:GPIO_Initure,至于GPIO_InitTypeDef,也是在 HAL 库文件 stm32f1xx_hal_gpio.h 封装好的结构体。

首先,开启GPIOC时钟,因为我们的蜂鸣器连接在端口C上( PC5)引脚上。这个也是现成的库函数也是初始化必须有的内容,记住。 

其次,设定 GPIO 引脚号是 5,至于是 A,B,C….F 哪个端口的引脚5在HAL_GPIO_Init(GPIOC,&GPIO_Initure);这行说明了是端口C。
紧接着设定这个端口的工作模式是推挽输出(因为要驱动蜂鸣器)

再下来设定引脚为上拉模式 GPIO_Initure.Pull=GPIO_PULLUP;也是视具体需要设定是上拉还是下拉亦或浮空。

GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; 此行是设置引脚的速度是高速,这个好理解,只要硬件条件允许谁不愿意快速跑啊。右键 GPIO_SPEED_FREQ_HIGH 可以打开看一下,很明了,速度.有低速、中速、高速三个选择.

 最 后 , 以 上 初 始 化 内 容 都 设 置 好 后 就 通 过 最 后 一 行
HAL_GPIO_Init(GPIOC,&GPIO_Initure); 按照设置的条件来初始化了。
 至此也就完成的蜂鸣器整个初始化的过程,也就是在主 main 函数中执行完 beep_init()蜂鸣器初始化函数后就可以使用蜂鸣器了。 

头文件 beep.h 只有两行够简单明了吧,两行还都是宏定义,

第一行宏定义:beep_H 为引脚 PC5 为输出模式并且输出高电平。 
第二行宏定义:beep_L 为引脚 PC5 为输出模式并且输出低电平。 

 4、 烧录到开发板调试、验证代码

方法是:用下载器,连接到开发板的 SWD 插针上注意引脚对应关系,不要插错了。 

然后编译一次(按),编译结果显示 0 错误 0 警告就 OK 

之后再按 将代码下载到开发板。 

5、检验效果

按下电源开关就可以听到蜂鸣器有节奏的响起了。

"BEE,BEE,BEE……"

欢迎大家留言,共同探讨,共同学习,共同进步

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!