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);

}

}

相关推荐
XH1.34 分钟前
学习RT-thread(项目一:基于RT-thread的multi_button控制灯闪烁)
stm32·单片机·学习
Jerry丶Li43 分钟前
二十五、STM32的DMA(数据转运)
stm32·单片机·嵌入式硬件
李boyang2 小时前
I2C通信
单片机·嵌入式硬件·i2c
d111111111d3 小时前
STM32外设学习--ADC模数转换器--笔记
笔记·stm32·单片机·嵌入式硬件·学习
xiaotianyun885 小时前
NCP13992中文版手册 工作原理
单片机·嵌入式硬件·ncp13992
d111111111d5 小时前
STM32TIM定时器外设学习,输出比较模式(舵机,驱动直流电机)
笔记·stm32·单片机·嵌入式硬件·学习
zxb@hny6 小时前
stm32 的isr向量位置问题,不然跑飞了,程序跑到异常地址,main都没进去
stm32·单片机·嵌入式硬件
m0_690780526 小时前
STM32各时钟的介绍,中断
stm32·单片机·嵌入式硬件
权泽谦6 小时前
从0到1:基于STM32与FreeRTOS的智能家居中控系统设计实录
stm32·嵌入式硬件·智能家居
云山工作室6 小时前
基于单片机的智能家居窗帘控制系统设计(论文+源码)
stm32·单片机·嵌入式硬件·物联网·课程设计