STM32-启用蜂鸣器

目录

[1 、电路构成及原理图](#1 、电路构成及原理图)

2、编写实现代码

main.c

beep.c

beep.h

3、代码讲解

[4、 烧录到开发板调试、验证代码](#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......"

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

相关推荐
Mortal_hhh1 小时前
VScode的C/C++点击转到定义,不是跳转定义而是跳转声明怎么办?(内附详细做法)
ide·vscode·stm32·编辑器
深圳市青牛科技实业有限公司1 小时前
【青牛科技】应用方案|D2587A高压大电流DC-DC
人工智能·科技·单片机·嵌入式硬件·机器人·安防监控
Mr.谢尔比2 小时前
电赛入门之软件stm32keil+cubemx
stm32·单片机·嵌入式硬件·mcu·信息与通信·信号处理
LightningJie2 小时前
STM32中ARR(自动重装寄存器)为什么要减1
stm32·单片机·嵌入式硬件
鹿屿二向箔2 小时前
STM32外设之SPI的介绍
stm32
西瓜籽@3 小时前
STM32——毕设基于单片机的多功能节能窗控制系统
stm32·单片机·课程设计
远翔调光芯片^138287988725 小时前
远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!
科技·单片机·智能家居·能源
极客小张6 小时前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩
m0_739312879 小时前
【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)
stm32·单片机·嵌入式硬件
嵌入式小章9 小时前
基于STM32的实时时钟(RTC)教学
stm32·嵌入式硬件·实时音视频