GPIO

您所在的位置:网站首页 蜂鸣器响的代码 GPIO

GPIO

2024-07-10 19:48| 来源: 网络整理| 查看: 265

14.1关于蜂鸣器

蜂鸣器是一种常见的电子发声元器件,采用直流电压供电,广泛应用于计算机、打印机、报警器、电子玩具、汽车电子设备等产品中,常见的蜂鸣器可分为有源蜂鸣器和无源蜂鸣器。

有源蜂鸣器:内部有震荡源,只要通电即可自动发出固定频率的声音。

无源蜂鸣器:内部无震荡源,需要外部脉冲信号驱动发声,声音频率可变。

两种蜂鸣器实物如图 14.1.1 所示,从外观上来看两种蜂鸣器形状相似,有源蜂鸣器底部有黑胶密封,无源蜂鸣器底部可看到电路板(图中绿色部分),两种蜂鸣器都标注有正负极。

在这里插入图片描述

14.2硬件设计

通常蜂鸣器需要的驱动电流比较大,使用GPIO直接驱动蜂鸣器比较吃力,通常使用如图 14.2.1 所示电路。由GPIO控制三极管通断,蜂鸣器由系统电源驱动,MCU只需要很小的电流便可控制蜂鸣器。 Q1为NPN三极管,发射极(E)接地,基极(B)接单片机引脚PA8,集电极(C)接蜂鸣器到电源。 当PA8输出低电平,UBEUon,三极管导通,此时蜂鸣器工作。 在这里插入图片描述

14.3软件设计 14.3.1软件设计思路

实验目的:本实验通过控制GPIO输出指定频率,驱动蜂鸣器发声。

引脚初始化:GPIO端口时钟使能、GPIO引脚设置为输出(PA8);封装蜂鸣器函数:其中方波周期的延时,使用HAL库延时函数HAL_Delay()实现;主函数改变方波的延时时间(即改变其周期),控制蜂鸣器声音;

本实验配套代码位于“5_程序源码\7_GPIO—蜂鸣器\”。

14.3.2软件设计讲解 GPIO选择与接口定义

代码段 14.3.1 蜂鸣器引脚宏定义(driver_buzzer.h)

/********************* * 引脚宏定义 **********************/ #define Buzzer_GPIO_PIN GPIO_PIN_8 #define Buzzer_GPIO_PORT GPIOA #define Buzzer_GPIO_CLK_EN() __HAL_RCC_GPIOA_CLK_ENABLE() /********************* * 函数宏定义 **********************/ #define Buzzer(flag) HAL_GPIO_WritePin(Buzzer_GPIO_PORT, Buzzer_GPIO_PIN, flag?GPIO_PIN_SET:GPIO_PIN_RESET)

根据原理图可知蜂鸣器的控制引脚是PA8,因此引脚组和引脚号分别对应GPIOG、GPIO_PIN_8,引脚 时钟使能函数是__HAL_RCC_GPIOA_CLK_ENABLE()。对其输出函数宏定义成接口Buzzer(flag),flag为1时输出高电平,三极管导通,flag为0时输出低电平,三极管不导通。

GPIO初始化

代码段 14.3.2 蜂鸣器引脚初始化(driver_buzzer.c)

/* * 函数名:void BuzzerInit(void) * 输入参数:无 * 输出参数:无 * 返回值:无 * 函数作用:初始化蜂鸣器的引脚 */ void BuzzerInit(void) { // 定义 GPIO 的结构体变量 GPIO_InitTypeDef GPIO_InitStruct = {0}; // 使能蜂鸣器的 GPIO 对应的时钟 Buzzer_GPIO_CLK_EN(); GPIO_InitStruct.Pin = Buzzer_GPIO_PIN; // 选择蜂鸣器的引脚 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 设置为推挽输出模式 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // 引脚反转速度设置为快 // 初始化引脚配置 HAL_GPIO_Init(Buzzer_GPIO_PORT, &GPIO_InitStruct); // 关闭蜂鸣器 Buzzer(0); }

引脚初始化内容与前面LED类似,这里不再赘述。

方波输出函数

代码段 14.3.3 方波输出函数(driver_buzzer.c)

/* * 函数名:void ControlBuzzerRang(uint16_t period) * 输入参数:period-蜂鸣器发出响声的周期,f=1/(2*period) * *输出参数:无 * 返回值:无 * 函数作用:输出方波 */ void ControlBuzzerRang(uint16_t period) { Buzzer(1); HAL_Delay(period); Buzzer(0); HAL_Delay(period); }

通过HAL_Delay()延时函数来实现方波周期的变换,从而控制PA8输出方波的频率来改变蜂鸣器发声的 响度。

主函数测试

代码段 14.3.4 蜂鸣器主函数(main.c)

// 初始化蜂鸣器 BuzzerInit(); while(1) { for(i=0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3