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
相关推荐
future141217 小时前
单片机学习日记
单片机·嵌入式硬件·学习
嘿嘿嘿x319 小时前
什么是输入寄存器 什么是输出寄存器 什么是写输入寄存器 什么是读保持寄存器
单片机
hazy1k19 小时前
K230基础-获取触摸坐标
图像处理·stm32·单片机·嵌入式硬件·k230
知南x19 小时前
STM32MP157目标检测环境搭建 (3) NCNN环境安装
stm32·嵌入式硬件·目标检测
日更嵌入式的打工仔20 小时前
InitLWIP() 初始化
笔记·嵌入式硬件·学习
学生董格1 天前
[嵌入式embed]Keil5-STM32F103C8T6(江协科技)+移植RT-Thread v3.15模版
stm32·嵌入式硬件·rt-thread·keil5·江协科技
酷飞飞1 天前
掌握DMA基于GD32F407VE的天空星的配置
stm32·单片机·嵌入式硬件·arm
清风6666661 天前
基于单片机的Boost升压斩波电源电路
单片机·嵌入式硬件·毕业设计·课程设计
qiuiuiu4131 天前
正点原子RK3568学习日记-GIT
linux·c语言·开发语言·单片机
搞一搞汽车电子1 天前
单片机的堆\栈\Flash\Ram区别和联系
单片机·嵌入式硬件