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......"

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

相关推荐
六壹班班长5 分钟前
STM32 外设简介
stm32·单片机·嵌入式硬件
小殷学长23 分钟前
【单片机毕业设计12-基于stm32c8t6的智能称重系统设计】
stm32·单片机·课程设计
编程圈子1 小时前
I.MX6U 裸机开发20. DDR3 内存知识
嵌入式硬件·嵌入式linux·i.mx6u
广药门徒2 小时前
stm32内部高速晶振打开作为主时钟
单片机·嵌入式硬件
陌夏微秋2 小时前
51单片机基础 06 串口通信与串口中断
单片机·嵌入式硬件·51单片机
7yewh3 小时前
嵌入式硬件杂谈(六)充电器原理 线性电源 开关电源 反激电源原理
单片机·嵌入式硬件·mcu·物联网·硬件架构·硬件工程·pcb工艺
秋风&萧瑟3 小时前
【freertos】FreeRTOS消息队列的介绍与使用
单片机
FlechazoCLF4 小时前
小柴冲刺软考中级嵌入式系统设计师系列三、嵌入式硬件设计(1)嵌入式系统电源管理
嵌入式硬件
drinow12 小时前
【纸飞机串口调试工具】预设曲线名称
arm开发·驱动开发·单片机·mcu·dsp开发·fpga·iot
时光の尘13 小时前
C语言菜鸟入门·关键字·int的用法
c语言·开发语言·数据结构·c++·单片机·链表·c