STM32_驱动蜂鸣器自定义库

STM32_驱动蜂鸣器自定义库

功能说明:

1、可以实现设置蜂鸣器的音调

2、可以设置蜂鸣器连续鸣响次数

3、设置连续鸣响时间间隔

main.c

c 复制代码
#include "mymain.h"
#include "dev_control.h"

int main(void)
{
	HAL_Init();
	SystemClock_Config();

	MX_GPIO_Init();
	MX_TIM2_Init();
	
	devInit();

	devBuzzerSetNum(3);		//设置鸣响次数3
	devBuzzerSetLevel(unsigned char level);	//设置音调等级
	
	while (1)
	{
		devTask();
		HAL_Delay(1);
	}
}

buzzer.c

c 复制代码
#include "dev_control.h"

#define DEV_TASK_PERIOD 1 //调用devTask的周期
devBuzzer_t devBuzzer = {0};

void devInit(void)
{
	/*************************蜂鸣器************************/
	devBuzzer.devBuzzerEnable = STATE_ENABLE;
	devBuzzer.devBuzzerPeriod = 200;				//周期200ms
	devBuzzer.devBuzzerDuty = 100;				//鸣响100ms
}

void devTask(void)
{
	if(devBuzzer.devBuzzerEnable == STATE_ENABLE)
	{
		if(devBuzzer.devBuzzerNumber > 0)
		{
			devBuzzer.devBuzzerCount += DEV_TASK_PERIOD;
			if(devBuzzer.devBuzzerCount <= devBuzzer.devBuzzerDuty)
			{
				HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_3);
			}
			else 
			{
				HAL_TIM_PWM_Stop(&htim2,TIM_CHANNEL_3);
			}
			if(devBuzzer.devBuzzerCount == devBuzzer.devBuzzerPeriod)
			{
				devBuzzer.devBuzzerCount = 0;
				devBuzzer.devBuzzerNumber--;
			}
		}
	}
}

void devBuzzerSetLevel(unsigned char level)
{
	switch(level)
	{
		case BUZZER_LEVEL_0:
			devBuzzer.devBuzzerLevel = level;
			__HAL_TIM_SET_PRESCALER(&htim2, 144-1);//设置时钟频率0.5Khz
			break;
		case BUZZER_LEVEL_1:
			devBuzzer.devBuzzerLevel = level;
			__HAL_TIM_SET_PRESCALER(&htim2, 72-1);//1Khz
			break;
		case BUZZER_LEVEL_2:
			devBuzzer.devBuzzerLevel = level;
			__HAL_TIM_SET_PRESCALER(&htim2, 36-1);//2Khz
			break;
		default:
			break;
	}
}

buzzer.h

c 复制代码
#ifndef __DEV_CONTROL_H
#define __DEV_CONTROL_H
#include "main.h"
#include "gpio.h"

enum{
	STATE_DISABLE,
	STATE_ENABLE
};

enum{
	BUZZER_LEVEL_0,
	BUZZER_LEVEL_1,
	BUZZER_LEVEL_2
};

//蜂鸣器控制结构体
typedef struct
{
	unsigned char devBuzzerEnable;		//使能
	unsigned char devBuzzerLevel;		//音调水平
	unsigned char devBuzzerNumber;		//连续鸣响次数
	unsigned int devBuzzerDuty;			//单次鸣响时长
	unsigned int devBuzzerPeriod;		//单次鸣响控制周期
	unsigned int devBuzzerCount;		//计数用于控制
} devBuzzer_t;

void devBuzzerSetNum(unsigned char num);		//设置鸣响次数
void devBuzzerSetLevel(unsigned char level);	//设置音调等级

#endif
相关推荐
玩转单片机与嵌入式7 小时前
深入浅出TinyML 16:FFT、频带能量和MFCC分别适合什么任务?
stm32·深度学习·tinyml
深圳市宝华视联14 小时前
Python 读取 IP 视频流简单 Demo
python·嵌入式硬件·opencv·网络协议·tcp/ip·实时音视频·嵌入式实时数据库
恒锐丰科技韩生14 小时前
RB6005A|晶准 单节锂电池内置 MOS 保护芯片 DFN2×3‑8
嵌入式硬件·硬件工程
youshi666814 小时前
stm32-PWR、低功耗模式
stm32·单片机·嵌入式硬件
ACP广源盛1392462567314 小时前
Qwen3.8‑2.4T 开源落地@ACP#国产 Serdes 长距离视频传输芯片 GSV5800 在私有化 AI 服务中的价值与应用场景
大数据·数据库·人工智能·嵌入式硬件·矩阵·开源·音视频
Funing715 小时前
STM32 电机动态 PI 控制:从编码器反馈、增量式 PI 到 Matlab 参数拟合与 PWM 输出
stm32·嵌入式硬件·matlab·pi控制算法
云泽80815 小时前
深入浅出 STM32(十八):时钟树、总线与寄存器的底层联动机制
stm32·单片机·嵌入式硬件
米饭不加菜16 小时前
C51 语言参考手册
经验分享·笔记·单片机·嵌入式硬件
深圳市宝华视联16 小时前
院感约束下,手术室音视频布线与设备摆放实施注意事项
嵌入式硬件·音视频·实时音视频·视频编解码·嵌入式实时数据库
科芯创展16 小时前
2.7VIN,5VOUT,360KHz,电荷泵升压芯片,XZ3120
单片机