小白学STM32——蜂鸣器库函数版本

一.蜂鸣器简介

         蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电

        电磁式的有源蜂鸣器

         这里的有源不是指电源的“源”,而是指有没有自带震荡电路,有源蜂鸣器自带了震荡电路,
一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供 2~5Khz 左右的方波驱动,
才能发声。

        STM32F1 的单个 IO 最大可以提供 25mA 电流(来自数据手册),而蜂鸣器的驱动电流是 30mA左右,两者十分相近,但是全盘考虑,STM32F1 整个芯片的电流,最大也就 150mA,如果用IO 口直接驱动蜂鸣器,其他地方用电就得省着点了…所以,我们不用 STM32F1 的 IO 直接驱动
蜂鸣器,而是通过三极管扩流后再驱动蜂鸣器,这样 STM32F1 的 IO 只需要提供不到 1mA 的
电流就足够了。

二.蜂鸣器实现

实验步骤:①使能IO口时钟,调用RCCAPB2PeriphColckCmd();

通过 "stm32f10x_rcc.h"文件中寻找到GPIOB的使能时钟函数 为RCC_APB2

                  ②初始化IO口模式。调用BEEP_Init();

                  ③操作IO口,输出高低电平。

1.硬件设计

1)指示灯 DS0
2)蜂鸣器

        蜂鸣器的驱动信号连接在 STM32F1 的 PB8 上。原理图如下。

        图中我们用到一个 NPN 三极管(S8050)来驱动蜂鸣器,R33 主要用于防止蜂鸣器的误发
声。当 PB.8 输出高电平的时候,蜂鸣器将发声,当 PB.8 输出低电平的时候,蜂鸣器停止发声。

2.软件设计

工程搭建与库函数版本相同,这里就不多赘述。

需要新搭建:HARDWARE--->LED--->led.c和led.h文件 , 用魔术棒添加文件路径

led.h代码如下

#ifndef __BEEP_H
#define __BEEP_H	 
#include "sys.h"

#define BEEP PBout(8)	// BEEP,蜂鸣器接口	

void BEEP_Init(void); //初始化

#endif

代码分析:a.设置蜂鸣器接口为PB_8      #define BEEP PBout(8)

                  b.初始函数     void BEEP_Init(void);

led.c代码如下

#include "beep.h"
#include "stm32f10x_it.h" 
#include "sys.h"

void BEEP_Init(void)
{
	
	GPIO_InitTypeDef GPIO_InitStructure;
	
	//使能PB
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	//设置GPIO
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽输出模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;          //位8
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //50MHz
	
	GPIO_Init(GPIOB,&GPIO_InitStructure);              //初始化GPIOB
	
	GPIO_SetBits(GPIOB,GPIO_Pin_8);                    //PB.5 输出高电位,关闭蜂鸣器
	
}

与跑马灯原理一致,改换GPIO接口为GPIPB_8即可。

主函数

#include "stm32f10x.h"
#include "delay.h"
#include "beep.h"
#include "sys.h"	

 int main(void)
 {
	delay_init();	    	 //延时函数初始化	  
	BEEP_Init();         	//初始化蜂鸣器端口
	while(1)
	{
		BEEP=0;		  
		delay_ms(300);     //延时300ms
		  
		BEEP=1;  
		delay_ms(300);     //延时300ms
	}
 }
 

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值