一、有源蜂鸣器原理图

在这里插入图片描述
元器件提示
电阻:res
蜂鸣器:buzzer
在这里插入图片描述

1.PNP接法

在这里插入图片描述
看VCC和地哪一个直接接在蜂鸣器上
PNP接法:低电平触发

2.NPN接法

在这里插入图片描述
看VCC和地哪一个直接接在蜂鸣器上
NPN接法:高电平触发

二、有源蜂鸣器代码

和LED灯一样,驱动GPIO引脚变成指定电平即可触发
buzzer.c文件

#include "buzzer.h"
#include "stm32f10x.h"
void BUZZER_Init(void)
{
	//声明一个结构体,名字是GPIO_InitStructure
	GPIO_InitTypeDef GPIO_InitStructure;
	//使能GPIOC的时钟,ENABLE代表使能
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//GPIOC
	//设置引脚为推挽输出Out_PP
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	//定义引脚为哪一号引脚,GPIO_Pin_13就是13号引脚
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_15; 
	 //设置引脚的速度50MHz
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; 
	 //初始化GPIO,初始化哪个引脚就对应哪个
	GPIO_Init(GPIOC,&GPIO_InitStructure);//初始化GPIOC,所以引脚对应PC13和PC15
	GPIO_SetBits(GPIOC,GPIO_Pin_13|GPIO_Pin_15); //PC13和PC15引脚拉高电平
}

buzzer.h头文件

#ifndef __BUZZER_H
#define __BUZZER_H
	void LED_Init(void);
#endif

main.c文件
PNP接法:低电平触发

#include "stm32f10x.h"
#include  "buzzer.h"
#include "delay.h"
int main(void) 
{ 
	delay_init();
	LED_Init();		
	while(1){ 		//pnp接法
		GPIO_ResetBits(GPIOC,GPIO_Pin_13); // 低电平触发
		delay_ms(100); //响100ms
		GPIO_SetBits(GPIOC,GPIO_Pin_13);
		delay_ms(500);   //停500ms
	}
}

NPN接法:高电平触发

#include "stm32f10x.h"
#include  "buzzer.h"
#include "delay.h"
int main(void) 
{ 
	delay_init();
	LED_Init();		
	while(1){ 		//npn接法
		GPIO_SetBits(GPIOC,GPIO_Pin_15); // 高电平触发
		delay_ms(200);   //响200ms
		GPIO_ResetBits(GPIOC,GPIO_Pin_15); 
		delay_ms(400); //停400ms
	}
}

三、项目(代码+仿真)分享链接

百度网盘
链接:https://pan.baidu.com/s/1pcVtAcER2mAwnQnyRL3aXQ
提取码:p8q4

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐