本章我们通过另外一个实验来讲述 STM32 IO 口的输出。通过 STM32F1 芯片的一个 IO口控制板载有源/无源蜂鸣器,实现蜂鸣器控制。
蜂鸣器介绍
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V 直流工作电压),多谐振荡器起振,输出 1.5~5kHZ 的音频信号,阻抗匹配器推动压电蜂鸣片发声。
电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
其实一句话就可概括它们之间的区别,想要压电式蜂鸣器发声,需提供一定频率的脉冲信号;想要电磁式蜂鸣器发声,只需提供电源即可。无源蜂鸣器,属于压电式蜂鸣器类型;有源蜂鸣器,属于电磁式蜂鸣器类型。这里说的有源,并不是指电源的意思,而是指蜂鸣器内部是否含有振荡电路,有源蜂鸣器内部自带振荡电路,只需提供电源即可发声,而无源蜂鸣器则需提供一定频率的脉冲信号才能发声,频率大小通常在 1.5-5KHz 之间。

如果给有源蜂鸣器加一个 1.5-5KHz 的脉冲信号,同样也会发声,而且改变这个频率,就可以调节蜂鸣器音调,产生各种不同音色、音调的声音。如果改变输出电平的高低电平占空比,则可以改变蜂鸣器的声音大小。

硬件设计
在前面我们已经对 STM32 的 GPIO 做了简单介绍,并且还使用了其中
IO 口直接控制开发板上的 LED。对于本章要实现蜂鸣器的控制,我们能否直接使用 STM32 的 IO 口驱动呢?根据 STM32F103 芯片数据手册可知, 单个 IO 口的最大输出电流是 25mA,而蜂鸣器的驱动电流是 30mA 左右,两者非常接近,有的朋友就想直接用 IO 口来驱动,但是有没有考虑到整个芯片的输出电流,整个芯片的输出电流最大也就 150mA,如果在驱动蜂鸣器上就耗掉了 30mA,那么 STM32 其他的 IO 口及外设电流就非常拮据了。所以我们不会直接使用 IO 口驱动蜂鸣器,而是通过三极管把电流放大后再驱动蜂鸣器,这样 STM32 的 IO 口只需要提供不到1mA 的电流就可控制蜂鸣器。所以我们也经常说到 STM32 芯片是用来做控制的,而不是驱动。开发板上的无源蜂鸣器模块电路原理图如下所示。

开发板上的有源蜂鸣器模块电路原理图如下所示。

从这两个电路图可以看到, 无源蜂鸣器的控制需要给其一定频率的脉冲才能发声,仅给一个高电平或者低电平是不能发声的,因此蜂鸣器模块电路直接将STM32引脚接在NPN三极管的基极上, 然后三极管的发射极连接蜂鸣器,无需考虑外界对 PB5 脚产生的高低电平会对蜂鸣器发声干扰。如果使用的是有源蜂鸣器,它只要有电源就会发声,因此就必须考虑外界对 PB5 引脚电平的干扰问题。通过电阻 R06 和 PNP 三极管 TP6 进行电流放大,从而驱动蜂鸣器。电阻 R66 是一个上拉电阻, 用来防止蜂鸣器误发声。 当 PB5 引脚输出低电平时, PNP三极管导通,蜂鸣器发声;当 PB5 引脚输出高电平时,PNP 三极管截止,蜂鸣器停止发声。

软件设计
蜂鸣器初始化函数
打开工程中 beep.c 文件,里面代码如下:
#include “beep.h”
/****************************************************************


  • 函 数 名 : BEEP_Init
  • 函数功能 : 蜂鸣器初始化
  • 输 入 : 无
  • 输 出 : 无
    /
    void BEEP_Init() //端口初始化
    {
    GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化 GPIO
    RCC_APB2PeriphClockCmd(BEEP_PORT_RCC,ENABLE); /
    开启 GPIO 时钟 /
    /
    配置 GPIO 的模式和 IO 口 /
    GPIO_InitStructure.GPIO_Pin=BEEP_PIN; //选择你要设置的 IO口
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //设置推挽输出模式
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //设置传输速率
    GPIO_Init(BEEP_PORT,&GPIO_InitStructure); /
    初始化 GPIO
    /
    }
    BEEP_Init()函数用来初始化蜂鸣器的端口及时钟,在函数内我们看到有几个参数不是库函数内的,比如 BEEP_PIN、BEEP_PORT、BEEP_PORT_RCC,这种情况一般是我们自己定义的宏,通常放在对应的头文件内,我们打开 beep.h,可以看到如下代码:
    #ifndef _beep_H
    #define _beep_H
    #include “system.h”
    /
    蜂鸣器时钟端口、引脚定义 /
    #define BEEP_PORT GPIOB
    #define BEEP_PIN GPIO_Pin_5
    #define BEEP_PORT_RCC RCC_APB2Periph_GPIOB
    #define beep PBout(5)
    void BEEP_Init(void);
    #endif
    里面就将蜂鸣器的GPIO 端口及管脚进行了宏定义,这样做是方便大家移植程序,只需要对这个宏修改就能实现蜂鸣器的初始化修改。
    主函数
    我们打开工程中 main.c 文件,里面代码如下:
    /
    **
  • 函 数 名 : main
  • 函数功能 : 主函数
  • 输 入 : 无
  • 输 出 : 无
    ****************************************************************/
    int main()
    {
    u16 i=0;
    SysTick_Init(72);
    LED_Init();
    BEEP_Init();
    while(1)
    {
    i++;
    if(i%100)
    {
    beep=!beep;
    }
    if(i%200000)
    {
    led1=!led1;
    }
    delay_us(10);
    }
    }
    主函数实现的功能比较简单,首先将使用到的外设硬件进行初始化,然后进入 while 循环,间隔 100us 对蜂鸣器管脚电平翻转,这样就产生了一个频率为5KHz 的脉冲,因此无源蜂鸣器就会发声,当然有源蜂鸣器的控制可以更简单,只需要给它一个低电平即可,为了实现 2 块板子程序的兼容,这里就统一采用此种方式控制蜂鸣器。间隔 200ms 对 led1 管脚电平翻转,因为使用到了 delay_us延时函数,所以在 main 函数开始处就需要调用 SysTick_Init(72)初始化,这个在我们后面所有程序都会使用,后面就不重复。
    将工程程序编译下载到开发板内,可以看到 D1 指示灯间隔 200ms 闪烁,蜂鸣器发声。
    更多学习交流可以私我薇:(壹叁贰陆零伍陆贰零贰玖)

STM32实例-蜂鸣器实验相关推荐

  1. STM32之蜂鸣器实验

    本章知识点 STM32GPIO的应用 蜂鸣器的原理(最好网上看看) 蜂鸣器概述 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机.打印机.复印机.报警器.电子玩具.汽车电子设备. ...

  2. 【stm32入门】第二天环境搭建、RCC时钟、GPIO、闪烁实验与有源蜂鸣器实验

    学习参考:STM32入门教程-2022持续更新中_江科大自化协P3-1~3-3 这两天学的稀里糊涂,这里看一点那里看一点,最后什么也没搞明白,为了电赛净选件但却发现最基础的32还没搞太懂,今天难得清闲 ...

  3. 【正点原子STM32连载】第十四章 蜂鸣器实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  4. stm32蜂鸣器实验

    硬件连接: 提示:不能通过IO口直接驱动大功率器件 实验步骤: 使能IO口时钟.调用RCC_APB2PeriphColckCmd(); 初始化IO口模式.调用函数BEEP_Init(); 操作IO口, ...

  5. 使用gpio输出驱动蜂鸣器出现破音_探索者 STM32F407 开发板资料连载第七章 蜂鸣器实验...

    1)实验平台:探索者 STM32F407 开发板 2)摘自<STM32F4 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 蜂鸣器实验 上一章,我们介绍了 ...

  6. STM32 ADC转换实验

    摘自:STM32 ADC转换实验 作者:追兮兮 发布时间: 2020-10-29 09:42:24 网址:https://blog.csdn.net/weixin_44234294/article/d ...

  7. STM32超声波模块实验(定时器实现)

    实验材料准备 1个HC-SR04超声波模块 1台STM32F103ZET6开发板 若干杜邦线 HC-SR04模块简介 STM32定时器设置 实验中接收发送信号都用定时器,方便管理 上表在<STM ...

  8. 51单片机 | 蜂鸣器实验

    文章目录 一. 蜂鸣器介绍 二.硬件设计 三.软件设计 四.实验现象   通过单片机的一个 IO 口控制 板载无源蜂鸣器,实现蜂鸣器控制. 一. 蜂鸣器介绍   蜂鸣器是一种一体化结构的电子讯响器,采 ...

  9. s5p6818PWM驱动蜂鸣器实验

    s5p6818PWM驱动蜂鸣器实验 一, PWM 概念 PWM (Pulse Width Modulation ):脉冲宽度调制解调器. 阈值:就是输出的 PWM 中,高饱和保持的时间与该PWM 的时 ...

最新文章

  1. 【2】Vue项目引用Element UI(饿了么框架)菜单导航条初期配置
  2. 在Ubuntu中永久添加DNS
  3. db browser连接mysql_MyEclipse DB Browser 连接 MySQL 配置 mysql select
  4. oracle死锁trace,Oracle 学习之性能优化(十)锁
  5. Android 开发工具类 27_多线程下载大文件
  6. HDU 1492 The number of divisors(约数) about Humble Numbers(数论,简单约数)
  7. JSON.stringify(value[, replacer[, space]])
  8. 基于VS2019的Eigen库安装详解
  9. mysql数据库应用_MySQL数据库应用 从入门到精通 学习笔记
  10. 【Python成长之路】python 基础篇 -- global/nonlocal关键字使用
  11. 年底促销海报还没准备好?电商美工看这里
  12. java线程系列一:Thread类中的start()方法与run方法
  13. Java Collection小结
  14. 软件开发工具大题考点整理
  15. 3D控件Aspose.3D 18年新版V18.1发布 | 附下载
  16. Java实现网上书店管理系统(idea+MySQL+navicat)
  17. 百度地图api中文乱码
  18. 骨传导耳机损伤大脑?具有不伤耳优点的骨传导耳机了解一下
  19. ZFS case : top CPU 100%sy, when no free memory trigger it.
  20. layui中导航元素的简单使用

热门文章

  1. php从照片中抠出人脸,PS怎样将一张图片上的人脸抠取五官下来到另一张图片
  2. cmd md命令 创建文件夹
  3. 第11章组件装饰和视觉效果-DecoratedBox装饰盒子-背景图效果
  4. Hbase入门(一)
  5. 测试理论基础(重点)
  6. shell 批量 ping 多个IP地址
  7. 流形学习 manifold learning--自学小结(2)之 Isomap
  8. 相似度算法--余弦相似度
  9. R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性分析
  10. 2.3软件测试与软件开发的关系