上一章,我们介绍了 STM32 的 IO 口作为输出的使用,这一章,我们将通过另外一个例子讲述 STM32 的 IO 口作为输出的使用。在本章中,我们将利用一个 IO 口来控制板载的无源蜂鸣器,实现蜂鸣器发声。通过本章的学习,你将进一步了解 STM32 的 IO 口作为输出口使用的方法。 本章分为以下学习目标:
1、使无源蜂鸣器发出声音。
2、怎么学会设置 STM32 的 GPIO 输出控制蜂鸣器。
1.1 蜂鸣器简介
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。STM32 开发板上的蜂鸣器是电磁式的无源蜂鸣器,如下图所示:
无源蜂鸣器
这里的无源不是指电源的“源”,而是指有没有自带震荡电路,有源蜂鸣器带震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供2~5Khz 左右的方波驱动,才能发声。前面我们已经对 STM32 的 IO 做了简单介绍,上一章,我们就是利用 STM32 的 IO 口直接驱动 LED 的,本章的蜂鸣器,我们能否直接用 STM32 的 IO 口驱动呢? 让我们来分析下:STM32 的单个 I/O最大可以提供 25mA 电流(来自数据手册),而蜂鸣器的驱动电流是 30mA 左右,两者十分相近,但是全盘考虑, STM32 整个芯片的电流,最大也就 150mA,如果用 IO 口直接驱动蜂鸣器,其他地方用电就得省着点了…所以,我们不用STM32 的 IO 直接驱动蜂鸣器,而是通过三极管扩流后再驱动蜂鸣器,这样STM32 的 IO 只需要提供不到 1mA 的电流就足够了。IO 口使用虽然简单,但是和外部电路的匹配设计,还是要十分讲究的,考虑越多,设计就越可靠,可能出现的问题也就越少。本章将要实现的是控制普中科技 STM32 开发板上的蜂鸣器发出急促的报警声,进一步熟悉 STM32 IO 口的使用。
1.2 硬件设计
首先我们来看一下我们开发板上面蜂鸣器的接线图:
蜂鸣器接线图
从上面的图,我们可以看到蜂鸣器是接到单片机的 PB 口的 PB5。而驱动无
源蜂鸣器的原理就是产生 2~5Khz 左右的方波驱动,才能发声。所以要使蜂鸣器
发声也就是将单片机 PB5 管脚每间隔一段时间不输出一个高低电平脉冲即可。
1.2:蜂鸣器例程程序 1) 主函数
int main()
{
BEEP_Init(); //端口初始化
while(1)
{
sound2();
}
}
这个主程序其实跟 LED 的主程序是差不多的,只是对应换成了蜂鸣器端口的初始化和驱动子函数。
2) 蜂鸣器初始化 IO 初始化函数
/********************************************************************
***********
* 函 数 名 : BEEP_Init
* 函数功能
: 蜂鸣器端口初始化函数
通过改变频率控制声音变化
* 输 入 : 无
* 输 出 : 无
*********************************************************************
**********/
void BEEP_Init() //端口初始化
{
GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化GPIO
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); /* 开启 GPIO时钟 */
/* 配置 GPIO 的模式和 IO 口 */
GPIO_InitStructure.GPIO_Pin=BZ;
//选择你要设置的 IO 口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
//设置推挽输出模式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //设置传输速率
GPIO_Init(GPIOB,&GPIO_InitStructure); /* 初始化 GPIO */
}
蜂鸣器管脚定义在其头文件内如下:
#define BZ GPIO_Pin_5 //PB5 定义端口 PB5
3) 蜂鸣器发声函数/******************************************************************************
*
* 函 数 名 : sound2
* 函数功能
: 蜂鸣器报警函数 通过改变频率控制声音变化
* 输 入 : 无
* 输 出 : 无
*******************************************************************************
/
void sound2() //电动车报警
{
u32 i=1000;
while(i–)
//产生一段时间的 PWM 波,使蜂鸣器发声
{
GPIO_SetBits(GPIOB,BZ);
//IO 口输出高电平
delay(i);
GPIO_ResetBits(GPIOB,BZ); //IO 口输出低电平
delay(i–);
}
}
本文来自投稿,不代表商川网立场,如若转载,请注明出处:http://www.sclgvs.com/zhishi/56716.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。