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
相关推荐
酷~1 小时前
单片机启动文件——数据段重定位,BSS段清零
单片机·嵌入式硬件
wotaifuzao1 小时前
单片机的RAM与ROM概念
单片机·嵌入式硬件
jz-炸芯片的zero1 小时前
【Zephyr电源与功耗专题】14_BMS电池管理算法(三重验证机制实现高精度电量估算)
单片机·物联网·算法·zephyr·bms电源管理算法
三佛科技-134163842121 小时前
蒸面器/蒸脸仪方案开发,蒸面器/蒸脸仪MCU控制方案分析
单片机·嵌入式硬件
一支闲人5 小时前
带你了解STM32:GPIO通用输入输出口
stm32·基础知识·适用于新手小白
WD137298015575 小时前
WD5030A 芯片,12V降5V,输出电流12A,电路设计
stm32·单片机·嵌入式硬件·汽车
文火冰糖的硅基工坊6 小时前
[硬件电路-194]:NPN三极管、MOS-N, IGBT比较
单片机·嵌入式硬件·系统架构·电路
ElendaLee11 小时前
第八章 矩阵按键实验
嵌入式硬件·51单片机
三佛科技-1341638421211 小时前
卷发棒/卷发梳MCU方案分析
单片机·嵌入式硬件
白掰虾11 小时前
STM32N6&AI资料汇总
人工智能·stm32·嵌入式硬件·stm32n6·stm32ai