STM32-启用蜂鸣器

本文详细介绍了使用STM32F103系列开发板,通过C语言编程实现蜂鸣器控制的过程,包括电路构成、编写main.c和beep.c代码、初始化GPIO并设置蜂鸣器功能,以及烧录和验证代码以检验效果。
摘要由CSDN通过智能技术生成

 目录

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

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

  • 21
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值