嵌入式系统原理实验四蜂鸣器

  • 格式:docx
  • 大小:77.97 KB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四蜂鸣器实验

实验目的:

控制ALIENTEK战舰STM32开发板上的蜂鸣器发出:“嘀”…“嘀”…

的间隔声,进一步熟悉 STM32 IO 口的使用

内容要点:

1.硬件介绍

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、

打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电■

磁式蜂鸣器两种类型。

战舰STM32开发板板载的蜂鸣器是电磁式的有源蜂鸣器

这里的有源不是指电源的“源”,而是指有没有自带震荡电路,有源蜂鸣器自带了震荡电路,一通电就会发声

STM32的单个IO最大可以提供25mA电流(来自数据手册),而蜂鸣器的驱动电流是30mA 左右,两者十分相近,但是全盘考虑,STM32整个芯片的电流,

最大也就150mA,如果用IO 口直接驱动蜂鸣器,其他地方用电就得省着点了…所以,我们不用 STM32的IO直接驱动蜂鸣器,而是通过三极管扩流后再驱动蜂鸣

器,这样STM32的10只需要提供不到1mA的电流就足够了。 IO 口使用虽然简单,但是和外部电路的匹配设计,还是要十分讲究的,考虑越多,设计就越可靠,可能出现的问题也就越少。

蜂鸣器在硬件上也是直接连接好了的,不需要经过任何设置,直接编写代码就可

PBS 139

图1 蜂鸣器与STM32连接原理图

当PB.8输出高电平的时候,蜂鸣器将发声,当PB.8输出低电平的时候,蜂鸣器停止发声

2.软件设计

可以直接打开本实验工程,也可以按下面的步骤在实验 1的基础上新建蜂鸣器实验工程。

复制上一章的 LED 实验工程,然后打开USER 目录,把目录下面工程 LED.uvprojx 重命 名为BEEPuvprojx 。,然后在 HARDWARE 文件夹下新建一个 BEEP 文件夹,用来存放

与蜂鸣器相关的代码

将beep.h 头文件的路径加入到工程里面

一般的头文件有固定的格式, 多个地方调用头文件会重复引用, 为了避免头文件内容重

复引用,一般通过预编译的方式来写头文件。一般的格式如下:

#ifndef __BEEP_H #defi ne __BEEP_H

PB&rriM4_CH3/SDIO_D4

VCC3J

GND

R38 10KT

R FFP

BEEP SSO5O

}}

GPIO_I ni tStructure.GPIO_Pin = GPIO_P in_8; 〃BEEP-->GPIOB.8

GPIO_I ni tStructure.GPIO_Mode = GPIO_Mode_Out_PP; // GPIO_I nitStructure.GPIO_Speed = GPIO_Speed_50M Hz; // GPIO_I nit(GPIOB, &GPIO_I nitStructure); //

GPIO_ResetBits(GPIOB,GPIO_Pin_8); // 端口配置

推挽输出 速度为 50MHz

根据参数初始化 GPIOB.8 输出0,关闭蜂鸣器输出

#en dif

第一次调用时会将#define 下面这一节全部定义, 重复调用时,下面的东西就不会 被引用。 头文件里一般用来写函数声明或者宏定义,在源文件中再去定义具体的函数。

#ifndef _BEEP_H

#defi ne __BEEP_H void BEEP_I ni t(void);

#en dif

然后我们打开 USER 文件夹Template. uvprojx ,大家可以将其重命名为 BEEP

uvprojx ),按新建按钮新建一个文件,然后保存在 HARDWARE->BEEP 文件夹

F 面,保存为 beep.c 。在该文件中输入如下代码:

#i nclude "beep.h"void BEEP_I nit(void) { GPIO_I ni tTypeDef GPIO_I nitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

〃使能GPIOB 端口时钟

这段代码 仅包含 1 个函数: void BEEP_Init(void) ,该函数的作用就是使能 PORTB 的时钟,同时配置 PB8 为推挽输出。 这里的初始化内容跟跑马灯实验几乎是一样的 接下来,开始写

LED 灯灭时蜂鸣器不叫。 main.c 文件

// 蜂鸣器实验 #include "stm32f10x.h" #include "delay.h" #include "led.h" #include "beep.h" int main(void)

{

delay_init(); // 延时函数初始化

LED_Init(); // 初始化与 LED 连接的硬件接口 BEEP_Init(); // 初始化蜂鸣器端口 while(1)

{

GPIO_ResetBits(GPIOE,GPIO_Pin_5); GPIO_ResetBits(GPIOB,GPIO_Pin_8); delay_ms(500);// 延时 300ms

GPIO_SetBits(GPIOE,GPIO_Pin_5); GPIO_SetBits(GPIOB,GPIO_Pin_8); delay_ms(500);// 延时 300ms

}

}

实验现象: LED 灯亮的同时蜂鸣器在叫, 能否让两个 LED 灯和蜂鸣器配合使用?