• STM32_驱动蜂鸣器自定义库


    STM32_驱动蜂鸣器自定义库

    功能说明:
    1、可以实现设置蜂鸣器的音调
    2、可以设置蜂鸣器连续鸣响次数
    3、设置连续鸣响时间间隔

    main.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);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    buzzer.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;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    buzzer.h

    #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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    MySQL Row size too large (> 8126)
    基于Java+SpringBoot+Vue前后端分离游戏交易系统设计和实现
    walking机器人仿真教程-应用-使用直线路径规划器插件实现导航
    C# 修改打印机名称
    SpringBoot SpringBoot 原理篇 2 自定义starter 2.5 使用属性配置设置功能参数【2】
    【排序26:有序矩阵中第 K 小的元素】
    【Qt】对话框QDialog
    【毕业设计】基于单片机的手势检测识别系统 - arduino 物联网嵌入式
    webpack原理篇(五十八):实战开发一个简易的webpack
    GPT-5 一年半后发布?对此你有何期待?
  • 原文地址:https://blog.csdn.net/weixin_50183638/article/details/133804710