
有源蜂鸣器,高电平触发
测试使用的蜂鸣器如上图。
beep.h
#ifndef __BEEP_H
#define __BEEP_H
/************************************************************
**> File Name: beep.h
**> Description: beep GPIO - hardware driver
**> Author: xinso
**> blog: xinso.blog.csdn.net
**> Created Time: 2021.04.05
**--------------------------------------------------------
**> 本程序只供学习使用,未经作者许可,不得用于其它任何用途
*************************************************************/
#ifdef __cplusplus
extern "c"{
#endif
#include "sys.h"
/* 直接操作寄存器的方法控制IO */
#define digitalHi(p,i) {p->BSRR=i;} //输出为高电平
#define digitalLo(p,i) {p->BRR=i;} //输出低电平
#define digitalToggle(p,i) {p->ODR ^=i;} //输出反转状态
/* 蜂鸣器端口引脚定义*/
#define BEEP_GPIO_PORT GPIOB
#define BEEP_GPIO_CLK RCC_APB2Periph_GPIOB
#define BEEP_GPIO_PIN GPIO_Pin_8
/* 我买的蜂鸣器模块是高电平有效的,所以digitalHi可以让蜂鸣器响*/
#define BEEP_ON digitalHi(BEEP_GPIO_PORT, BEEP_GPIO_PIN) //开启蜂鸣器
#define BEEP_OFF digitalLo(BEEP_GPIO_PORT, BEEP_GPIO_PIN) //关闭蜂鸣器
void BEEP_GPIO_Init(void); //初始化
#ifdef __cplusplus
}
#endif
#endif
有问题需要请教的同学,添加Q裙(群: 470804974)
beep.c
#include "beep.h"
/************************************************************
**> File Name: beep.c
**> Description: beep GPIO - hardware driver
**> Author: xinso
**> blog: xinso.blog.csdn.net
**> Created Time: 2021.04.05
**--------------------------------------------------------
**> 本程序只供学习使用,未经作者许可,不得用于其它任何用途
*************************************************************/
//蜂鸣器GPIO初始化, 无需改动
void BEEP_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(BEEP_GPIO_CLK, ENABLE); //使能GPIO端口时钟
GPIO_InitStructure.GPIO_Pin = BEEP_GPIO_PIN; //引脚配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为50MHz
GPIO_Init(BEEP_GPIO_PORT, &GPIO_InitStructure); //根据配置的参数,初始化GPIO
BEEP_OFF //关闭蜂鸣器输出
}
Test程序测试示例:
#include "sys.h"
#include "delay.h"
#include "beep.h" //加入头文件
int main(void)
{
delay_init(); //延时函数初始化
BEEP_GPIO_Init(); //初始化蜂鸣器端口
while(1)
{
BEEP_ON
delay_ms(300);//延时300ms
BEEP_OFF
delay_ms(300);//延时300ms
}
}