【STM32】GPIO之蜂鸣器
程序员文章站
2024-02-22 14:03:52
...
00. 目录
01. 蜂鸣器简介
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
探索者 STM32F4 开发板板载的蜂鸣器是电磁式的有源蜂鸣器,如图 7.1.1 所示:
这里的有源不是指电源的“源”,而是指有没有自带震荡电路,有源蜂鸣器自带了震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供 2~5Khz 左右的方波驱动,才能发声。
02. 硬件设计
蜂鸣器在硬件上也是直接连接好了的,不需要经过任何设置,直接编写代码就可以了。蜂鸣器的驱动信号连接在 STM32F4 的 PF8 上。
图中我们用到一个 NPN 三极管(S8050)来驱动蜂鸣器,R61 主要用于防止蜂鸣器的误发声。当 PF.8 输出高电平的时候,蜂鸣器将发声,当 PF.8 输出低电平的时候,蜂鸣器停止发声。
03. 程序示例一
蜂鸣器不叫
beep.h文件
#ifndef __BEEP_H__
#define __BEEP_H__
#include "sys.h"
//蜂鸣器初始化
void BEEP_Init(void);
#define BEEP PFout(8)
#endif /*__BEEP_H__*/
beep.c文件
#include "beep.h"
//蜂鸣器初始化
void BEEP_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
//使能时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
//初始化GPIO
GPIO_Init(GPIOF, &GPIO_InitStruct);
//设置默认低电平
GPIO_ResetBits(GPIOF, GPIO_Pin_8);
}
main.c文件
#include "stm32f4xx.h"
#include "delay.h"
#include "led.h"
#include "beep.h"
int main(void)
{
//初始化
delay_init(168);
LED_Init();
BEEP_Init();
//蜂鸣器不叫
GPIO_ResetBits(GPIOF, GPIO_Pin_8);
}
04. 程序示例二
蜂鸣器叫
main.c文件
#include "stm32f4xx.h"
#include "delay.h"
#include "led.h"
#include "beep.h"
int main(void)
{
//初始化
delay_init(168);
LED_Init();
BEEP_Init();
GPIO_SetBits(GPIOF, GPIO_Pin_8);
}
05. 程序实例三
蜂鸣器循环叫1秒 不叫1秒
main.c
#include "stm32f4xx.h"
#include "delay.h"
#include "led.h"
#include "beep.h"
int main(void)
{
//初始化
delay_init(168);
LED_Init();
BEEP_Init();
//蜂鸣器不叫
GPIO_ResetBits(GPIOF, GPIO_Pin_8);
GPIO_ResetBits(GPIOF, GPIO_Pin_9);
delay_ms(1000);
//蜂鸣器叫
GPIO_SetBits(GPIOF, GPIO_Pin_8);
GPIO_SetBits(GPIOF, GPIO_Pin_9);
delay_ms(1000);
}
位带操作
main.c文件
#include "stm32f4xx.h"
#include "delay.h"
#include "led.h"
#include "beep.h"
int main(void)
{
//初始化
delay_init(168);
LED_Init();
BEEP_Init();
//蜂鸣器不叫
LED2 = 0;
BEEP = 0;
delay_ms(1000);
//蜂鸣器叫
LED2 = 1;
BEEP = 1;
delay_ms(1000);
}
06. 附录
6.1 【STM32】STM32系列教程汇总
07. 声明
该教程参考了正点原子的《STM32 F4 开发指南》