参考的教程:杨桃电子《STM32入门100步》
目录
蜂鸣器的介绍
蜂鸣器分为无源蜂鸣器和有源蜂鸣器,这个源,不是电源的意思,而是振荡源。
有源蜂鸣器
有源蜂鸣器内部有一简单的振荡电路,能将恒定的直流电转化成一定频率的脉冲信号,程序控制方便但频率固定,单片机一个高低电平就可以让其发出声音。
无源蜂鸣器
无源蜂鸣器和电磁扬声器一样没有内部驱动电路需要接在音频输出电路中才能发声。如果给直流信号是不响的,因为磁路恒定,必须用2K~5K的方波去驱动它。声音频率可控,可以做出“多来米发索拉西”的效果。在一些特例中,可以和LED复用一个控制口。
我买的是无源蜂鸣器模块 ,是低电平触发。
这是原理图,可见,连接十分简单。只需要一个I/O端口。
3V3-5V供电。
我使用的是PB12端口。
蜂鸣器配置程序
/*buzzer.h*/
#ifndef __BUZZER_H
#define __BUZZER_H
#include "stm32f10x.h"
#define BUZZER_PORT GPIOB
#define BUZZER_PIN GPIO_Pin_12
void BUZZER_Init(void);
void BUZZER_BEEP1(void);
void BUZZER_BEEP2(void);
void MIDI_PLAY(void);
#endif /*__BUZZER_H*/
/*buzzer.c*/
#include "buzzer.h"
#include "Delay.h"
void BUZZER_Init(void)
{ //LED灯的接口初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = BUZZER_PIN; //选择端口号(0~15或all)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)
GPIO_Init(BUZZER_PORT, &GPIO_InitStructure);
GPIO_WriteBit(BUZZER_PORT,BUZZER_PIN,(BitAction)(1)); /*高电平才不会响*/
}
/*蜂鸣器音1*/
void BUZZER_BEEP1(void)
{
uint16_t i;
for(i=0;i<200;i++)/*产生200个频率周期,让蜂鸣器响一段时间*/
{
/*
脉冲输出
发出1KHz的声音,每秒1000个周期,每个周期1000us
*/
GPIO_WriteBit(BUZZER_PORT,BUZZER_PIN,(BitAction)(0)); /*高电平才不会响*/
Delay_us(500);
GPIO_WriteBit(BUZZER_PORT,BUZZER_PIN,(BitAction)(1)); /*高电平才不会响,以输出高电平结束*/
Delay_us(500);
}
}
看注释应该能理解
在主函数中的使用
可以作为程序初始化完成的提示音
int main(void)
{
// 来到这里的时候,系统的时钟已经被配置成72M。
BUZZER_Init();
BUZZER_BEEP1();/*完成各个初始化,响一声*/
while(1)
{
}
}