蜂鸣器介绍
这里采用的是有源蜂鸣器,有源蜂鸣器自带了振荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供 2~5Khz 左右的方波驱动,才能发声。
STM32的单个 IO 最大可以提供 25mA 电流(来自数据手册),而蜂鸣器的驱动电流是 30mA 左右,两者十分相近。但是全盘考虑, STM32 整个芯片的电流,最大也就150mA ,如果用 IO 口直接驱动蜂鸣器,其他地方用电就得省着点了。所以,我们不用 STM32 的 IO 直接驱动蜂鸣器,而是通过三极管扩流后再驱动蜂鸣器,这样 STM32 的 IO 只需要提供不到 1mA 的电流就足够了。
蜂鸣器在硬件上是直接连好的,不需要经过任何设置。 蜂鸣器的驱动信号连接在STM32的 PB8 上。因此,这里只需要控制蜂鸣器对应的IO口进行供电即可。当 PB.8 输出高电平的时候,蜂鸣器将发声,当 PB.8 输出低电平的时候,蜂鸣器停止发声。
main.c
#include"beef.h"
int main(void)
{
BEEF_Init();
int i;
while(1)
{
for(i=0;i<1000;i++);
GPIO_SetBits(GPIOB,GPIO_Pin_8);
for(i=0;i<1000;i++);
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
}
}
beep.h
#ifndef __BEEF_H
#define __BEEF_H
#include "stm32f10x.h"
void BEEF_Init(void);
#endif
beep.c
#include"beef.h"
void BEEF_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能 GPIOB 端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //BEEP GPIOB .8 端口配置
GPIO_InitStructure. GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为 50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据参数初始化 GPIOB.8
GPIO_ResetBits(GPIOB,GPIO_Pin_8); //输出 0 ,关闭蜂鸣器输出
}