单片机入门学习六 STM32单片机学习三 蜂鸣器

蜂鸣器的控制仍是GPIO的入门开发,本篇仅罗列下蜂鸣器的相关概念和蜂鸣器开发源码

1、蜂鸣器

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“ZZG”、“LB”、“JD”等)表示。

本篇学习的板子上的蜂鸣器是电磁式的有源蜂鸣器,有源蜂鸣器是指自带震荡电路而不是指自带电源。(无源蜂鸣器没有自带震荡电路,必须外部提供2~5Khz左右的方波驱动才能发声。)

所用板子的蜂鸣器的原理图如下:
单片机入门学习六 STM32单片机学习三 蜂鸣器_第1张图片
从原理图可以看出板子上的蜂鸣器接了一个三极管放大器,使用三极管的原因是stm32 IO的驱动电流不够大驱动蜂鸣器发声很吃劲,所以用一个放大器增大电流来驱动放大器。
看原理图我们会发现在R36旁还接了一个R38电阻,该电阻的作用是分流保证stm32 IO空闲状态下不会驱动蜂鸣器发声,因为stm32 IO空闲状态是浮空状态的,其输出的电压值不确定,所以旁接R38电阻目的是风流掉浮空状态下低电压产生的小电流。

从stm32原理图中,我们可以知道蜂鸣器接的IO口是PB8,如下图:
单片机入门学习六 STM32单片机学习三 蜂鸣器_第2张图片

2、程序

#include "beep.h"

//初始化PB8为输出口.并使能这个口的时钟          
//蜂鸣器初始化
void BEEP_Init(void)
{
     GPIO_InitTypeDef  GPIO_InitStructure;

     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   //使能GPIOB端口时钟

     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;               //BEEP-->PB.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,关闭蜂鸣器输出
}
#include "std32f10x.h"  
#include "beep.h" 

int main(void)
{
    delay_init();            //延时函数初始化  
    BEEP_Init();            //初始化蜂鸣器端口
    while(1)
    {
        GPIO_ResetBits(GPIOB,GPIO_Pin_8);
        delay_ms(300);//延时300ms
        GPIO_SetBits(GPIOB,GPIO_Pin_8);   
        delay_ms(300);//延时300ms
    }
}

你可能感兴趣的:(楼宇自控,单片机,单片机入门学习,stm32,单片机)