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
相关推荐
小雪崩10 分钟前
嵌入式学习 day49:ARM基础
嵌入式硬件·学习
田径他爸来了15 分钟前
嵌入式学习第38天——裸机imx6ull(uart接口;配置波特率为115200,8位数据位,无校验,一位停止位)
嵌入式硬件·学习
女神下凡37 分钟前
带NPU的电脑 和不带NPU的电脑 在使用上有什么不样
arm开发·单片机·pcm
smartpi_ai1 小时前
CI-73T 的三个串口怎么分?下载口固定的引脚账本、词条 150 条的“词数“口径与硬 PWM 控舵机的性能边界
单片机·嵌入式硬件·语音识别
艾芯微科技1 小时前
ESDUNL24VC1 单向 ESD 静电保护二极管参数、电路设计与 PCB 防护布局
网络·单片机·嵌入式硬件·集成测试·51单片机
Kuakewei8881 小时前
OVP/OCP过压过流保护芯片设计指南:过压关断、限流与短路保护
嵌入式硬件
佳児素花痴╮1 小时前
STM32(中断)
stm32·单片机·嵌入式硬件
ZLG_zhiyuan3 小时前
示波器探头选型指南:5大分类,3步正确适配(附避坑清单)
单片机·嵌入式硬件
M78佐菲10 小时前
51单片机学习笔记:ds18b20要点整理
linux·笔记·嵌入式硬件·学习·51单片机
洪核单片机12 小时前
DPJ-96基于STM32单片机wifi远程监控智慧教室 温湿度光照粉尘人数考勤
stm32·单片机·嵌入式硬件·智慧教室·教室人数考勤