龙空技术网

STM32之蜂鸣器实验

南山府嵌入式 1808

前言:

此时大家对“c语言矩阵按键代码”大致比较关怀,同学们都想要知道一些“c语言矩阵按键代码”的相关资讯。那么小编在网摘上搜集了一些有关“c语言矩阵按键代码””的相关文章,希望小伙伴们能喜欢,大家快快来学习一下吧!

本章知识点

STM32GPIO的应用

蜂鸣器的原理(最好网上看看)

蜂鸣器概述

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

蜂鸣器又可分为有源蜂鸣器和无源蜂鸣器。

有源蜂鸣器原理

压电式蜂鸣器压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。

多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出100~500Hz的音频信号,阻抗匹配器推动压电蜂鸣片发声。

压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。

电磁式蜂鸣器电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。

接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互缠绕

无源蜂鸣器

无源蜂鸣器是没有振荡器,因此直接使用直流是不响的,必须外加电路进行驱动。

硬件设计

本实验采用的是有源蜂鸣器

STM32 PB8引脚与蜂鸣器连接

STM32与蜂鸣器连接图:

图中用到了NPN三极管驱动蜂鸣器,当PB8为高电平时,蜂鸣器鸣响。

代码设计

分别建立.c文件和.h文件,

建立完成后添加进工程中,添加步骤如下:

然后把头文件加入进去,步骤如下:

引脚配置

//定义BEEP连接gpio引脚的宏/*******************************LED1***********************************/#define BEEP_GPIO_CLK RCC_APB2Periph_GPIOB/* GPIO端口时钟 */#define BEEP_GPIO_PORT GPIOB /* GPIO端口 */#define BEEP_GPIO_PIN GPIO_Pin_8 /* 连接到SCL时钟线的GPIO */void BEEP_Config(void){//BEEP//定义一个GPIO_InitTypedef类型的结构体GPIO_InitTypeDef GPIO_InitStructure;//开启LED用到的GPIO有关时钟(这步很重要,所有的外设在配置之前都要开启外设时钟)RCC_APB2PeriphClockCmd(BEEP_GPIO_CLK, ENABLE);//选择要控制的GPIO引脚端GPIO_InitStructure.GPIO_Pin = BEEP_GPIO_PIN;//设置引脚模式设置为推挽输出GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//设置引脚速率GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//初始化GPIOGPIO_Init(BEEP_GPIO_PORT, &GPIO_InitStructure);//关闭所有的BEEPGPIO_ResetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN);}
功能代码
typedef enum{BEEP_ON=0,BEEP_OFF} BEEP_SW;void BEEP_Drive(uint8_t BEEP_SW){switch (BEEP_SW){case BEEP_ON:GPIO_SetBits(BEEP_GPIO_PORT,BEEP_GPIO_PIN);break;case BEEP_OFF:GPIO_ResetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN);break;default:break;}}
主函数
int main(void){// 来到这里的时候,系统的时钟已经被配置成72M。LED_Config();BEEP_Config();while(1){// LED_Drive(LED1_ON);// LED_Drive(LED2_ON);BEEP_Drive(BEEP_ON);}}

到这里就完成了,大家可以尝试加入延时,间断的使蜂鸣器响,同时配合LED等进行应用,比如当灯亮时,蜂鸣器响等

头文件

#ifndef __BSP_BEEP_H#define __BSP_BEEP_H#ifdef __cplusplusextern "C"{#endif/*******************************************************************************| Other Header File Inclusion|******************************************************************************/#include "stm32f10x.h"//头文件/*******************************************************************************| Compile Option or configuration Section (for test/debug)|******************************************************************************//*******************************************************************************| Macro Definition|******************************************************************************///定义BEEP连接gpio引脚的宏/*******************************LED1***********************************/#define BEEP_GPIO_CLK RCC_APB2Periph_GPIOB/* GPIO端口时钟 */#define BEEP_GPIO_PORT GPIOB /* GPIO端口 */#define BEEP_GPIO_PIN GPIO_Pin_8 /* 连接到SCL时钟线的GPIO *//*******************************************************************************| Enum Definition|******************************************************************************/typedef enum{BEEP_ON=0,BEEP_OFF} BEEP_SW;/*******************************************************************************| Typedef Definition|******************************************************************************//*******************************************************************************| Table Definition|******************************************************************************//*******************************************************************************| Global Function Prototypes|******************************************************************************/void BEEP_Config(void);void BEEP_Drive(uint8_t BEEP_SW);#ifdef __cplusplus}#endif#endif/*__BSP_BEEP_H*//*******************************************************************************END FILE*******************************************************************************/
c文件
/********************************************************************************* @file bsp_beep.c* @autho* @version V1.0* @date 2022-07-21* @brief 蜂鸣器驱动* @注明 : ******************************************************************************* @attention** 实验平台:无* CSDN:*******************************************************************************/#include "bsp_beep.h"#include "include.h"void BEEP_Config(void){//BEEP//定义一个GPIO_InitTypedef类型的结构体GPIO_InitTypeDef GPIO_InitStructure;//开启LED用到的GPIO有关时钟(这步很重要,所有的外设在配置之前都要开启外设时钟)RCC_APB2PeriphClockCmd(BEEP_GPIO_CLK, ENABLE);//选择要控制的GPIO引脚端GPIO_InitStructure.GPIO_Pin = BEEP_GPIO_PIN;//设置引脚模式设置为推挽输出GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//设置引脚速率GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//初始化GPIOGPIO_Init(BEEP_GPIO_PORT, &GPIO_InitStructure);//关闭所有的BEEPGPIO_ResetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN);}void BEEP_Drive(uint8_t BEEP_SW){switch (BEEP_SW){case BEEP_ON:GPIO_SetBits(BEEP_GPIO_PORT,BEEP_GPIO_PIN);break;case BEEP_OFF:GPIO_ResetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN);break;default:break;}}

自己加个延时,间隔响起,也可以使用PWM试试,和LED灯联合起来,还有前面讲到的按键以及矩阵按键,就矩阵按键来说,按下1按键灯亮,按下2按键蜂鸣器响,灯亮等。可以多尝试才有结果。

喜欢就点个赞或者关注一下也可以哦。

标签: #c语言矩阵按键代码