32单片机——BEEP

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

蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型,STM32F103智能火龙STM32开发板板载的蜂鸣器是电磁式的有源蜂鸣器

这里的有源不是指电源的"源",而是指有没有自带震荡电路,有源蜂鸣器自带了震荡电路, 一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供2~5Khz左右的方波驱动, 才能发声

STM32F1的单个IO最大可以提供25mA 电流(来自数据 手册),而蜂鸣器的驱动电流是30mA左右,两者十分相近,但是全盘考虑,STM32F1整个芯 片的电流,最大也就150mA,如果用 IO 口直接驱动蜂鸣器,其他地方用电就得省着点了,所以我们不用STM32F1的IO直接驱动蜂鸣器,而是通过三极管扩流后再驱动蜂鸣器,这样STM32F1的IO只需要提供不到1mA的电流就足够了

代码

蜂鸣器每隔300ms响或者停一次,LED0每隔300ms亮或者灭一次,LED0亮的时候蜂鸣器不叫,而LED0熄灭的时候,蜂鸣器叫

led.h

#ifndef _LED_H

#define _LED_H

//led初始化

void led_init(void);

#endif

led.c

#include "./BSP/LED/led.h"

#include "./SYSTEM/sys/sys.h"

//led初始化

void led_init(void){

GPIO_InitTypeDef g_gppio_struct;

__HAL_RCC_GPIOB_CLK_ENABLE(); //使能时钟--PB5

g_gppio_struct.Pin=GPIO_PIN_5;

g_gppio_struct.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出

g_gppio_struct.Pull=GPIO_NOPULL; //无上下拉

g_gppio_struct.Speed=GPIO_SPEED_FREQ_HIGH; //高速

HAL_GPIO_Init(GPIOB,&g_gppio_struct); //初始化LED0

}

beep.h

#ifndef _BEEP_H

#define _BEEP_H

#include "./SYSTEM/sys/sys.h"

//beep初始化

void beep_init(void);

void set_beep(uint8_t flag);

#endif

beep.c

#include "./BSP/BEEP/beep.h"

//beep初始化

void beep_init(void){

GPIO_InitTypeDef g_gppio_struct;

__HAL_RCC_GPIOB_CLK_ENABLE(); //使能beepIO口时钟

g_gppio_struct.Pin=GPIO_PIN_8; //引脚号

g_gppio_struct.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出

g_gppio_struct.Pull=GPIO_NOPULL; //没有上下拉

g_gppio_struct.Speed=GPIO_SPEED_FREQ_HIGH; //高速

HAL_GPIO_Init(GPIOB,&g_gppio_struct);

}

void set_beep(uint8_t flag){

if(flag){

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);

}else{

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);

}

}

main.c

#include "./SYSTEM/sys/sys.h"

#include "./SYSTEM/delay/delay.h"

#include "./BSP/LED/led.h"

#include "./BSP/BEEP/beep.h"

int main(void){

HAL_Init();

sys_stm32_clock_init(RCC_PLL_MUL9);

delay_init(72);

led_init();

beep_init();

while(1){

set_beep(1);

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET); //熄灭

HAL_Delay(2000);

set_beep(0);

HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET); //点亮

HAL_Delay(2000);

}

}

相关推荐
Be Legendary-CGK1 小时前
三极管的基极为什么需要下拉电阻
单片机·嵌入式硬件·硬件工程
点灯小铭5 小时前
基于K210的车牌识别设计
单片机·毕业设计·课程设计
我怕是好8 小时前
学习STM32 脉冲计数实验
stm32·嵌入式硬件·学习
总结所学8 小时前
电路板的GND与外壳地EARTH通过电容电阻相连
单片机·嵌入式硬件
国科安芯9 小时前
MCU外设初始化:为什么参数配置必须优先于使能
网络·单片机·嵌入式硬件·性能优化·硬件工程
腾飞的信仰17 小时前
51 单片机分层架构的模块依赖关系图
单片机·嵌入式硬件·架构
安庆平.Я20 小时前
STM32——GPIO
stm32·单片机·嵌入式硬件
唯创知音20 小时前
电风扇离线语音芯片方案设计与应用场景:基于 8 脚 MCU 与 WTK6900P 的创新融合
单片机·嵌入式硬件·离线语音芯片
酷飞飞21 小时前
基于STC8单片机的RTC时钟实现:从原理到实践
单片机·嵌入式硬件·51单片机·嵌入式
echo_pen1 天前
蓝桥杯---第六届省赛单片机组真题
单片机·蓝桥杯