TMC32_QJB/Buzzer/buzzer.c
2026-04-30 16:23:12 +08:00

122 lines
3.5 KiB
C

/**
******************************************************************************
* @file buzzer.c
* @author TMC Scan Team
* @version V1.0.0
* @date 09/12/2019
* @brief
******************************************************************************
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, TMC SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>&copy; COPYRIGHT 2016 TMC</center></h2>
******************************************************************************
**/
#include "global.h"
/**
* @function AppBuzzerInit
* @brief 音频初始化
* @return 无
*/
void AppBuzzerInit(void)
{
GPIO_InitTypeDef GPIO_Board_Init;
GPIO_Board_Init.Pin = VOICE_ENABLE_GPIO_PIN;
GPIO_Board_Init.Mode = GPIO_MODE_OUT;
GPIO_Board_Init.Pull = GPIO_NOPULL;
GPIO_Board_Init.Speed = GPIO_HIGH_SPEED;
GPIO_Board_Init.Otype = GPIO_MODE_OUTPUT_PP;
GPIO_Board_Init.SMIT = GPIO_INPUTSCHMIT_DISABLE;
GPIO_Init(VOICE_ENABLE_GPIO_PORT, &GPIO_Board_Init);
GPIO_ResetBits(VOICE_ENABLE_GPIO_PORT, VOICE_ENABLE_GPIO_PIN);//开喇叭
//PWM config Bell
RCC_APB3PeriphClockCmd(RCC_APB3Periph_PWM2, ENABLE);
RCC_PWMClockConfig(INTERFACE_PWM2, RCC_PWM_CLKSRC_HSI, 0, ENABLE);
GPIO_Board_Init.Pin = BELL_GPIO_PIN;
GPIO_Board_Init.Speed = GPIO_HIGH_SPEED;
GPIO_Board_Init.Mode = GPIO_MODE_AF;
GPIO_Board_Init.Pull = GPIO_PULLUP;
GPIO_Board_Init.Otype = GPIO_MODE_OUTPUT_PP;
GPIO_Board_Init.SMIT = GPIO_INPUTSCHMIT_DISABLE;
GPIO_Init(BELL_GPIO_PORT, &GPIO_Board_Init);
GPIO_PinAFConfig(BELL_GPIO_PORT, BELL_GPIO_PIN_NUM, GPIO_AF1_PWM2);
GPIO_Init(BELL_GPIO_PORT, &GPIO_Board_Init);
}
/**
* @function AppBuzzerPlay
* @brief 蜂鸣器播放
* @param[in] frequency蜂鸣器频率
* @param[in] ms蜂鸣器持续时间
* @return 无
*/
void AppBuzzerPlay(uint16_t frequency, uint16_t ms, uint8_t duty)
{
uint32_t HSIClock = 12000000;
PWM_InitTypeDef PWM2_Init;
if(!gConfgBuf.buzzerStatus)return;
PWM2_Init.PWM_Div = 0;
PWM2_Init.PWM_Start_Level = START_LEVEL_HIGH;
PWM2_Init.PWM_Stop_Level = STOP_LEVEL_IS_NOW;
PWM2_Init.PWM_PSC = 0;
PWM2_Init.PWM_DTY = HSIClock/frequency/100*duty;
PWM2_Init.PWM_PER = HSIClock/frequency;
PWM_Initial(PWM2, &PWM2_Init);
PWM_Cmd(PWM2, ENABLE);
TimerDelay(TIM2, ms);
while(!(PWM2->STS&0x04)){}
while((PWM2->STS&0x04)){}
PWM_Cmd(PWM2, DISABLE);
}
/**
* @function BuzzerSelect
* @brief 蜂鸣器不同场景发不同的声音
* @param[in] buzzerType 蜂鸣器播放类型(可自行添加修改)
* @return 无
*/
void BuzzerSelect(uint8_t buzzerType)
{
switch(buzzerType)
{
case SCAN_CODE_SUCCESS:
AppBuzzerPlay(1660, 100, 50);
AppBuzzerPlay(2300, 100, 50);
break;
case POWERON_BUZZER:
AppBuzzerPlay(1660, 100, 50);
AppBuzzerPlay(2300, 100, 50);
AppBuzzerPlay(2700, 100, 50);
AppBuzzerPlay(3500, 130, 50);
break;
case SET_CODE_SUCEESS:
AppBuzzerPlay(gConfgBuf.buzzerFrequency, gConfgBuf.buzzerTime, 50);
TimerDelay(TIM2, 100);
AppBuzzerPlay(gConfgBuf.buzzerFrequency, gConfgBuf.buzzerTime, 50);
break;
case SET_CODE_ERROR:
AppBuzzerPlay(gConfgBuf.buzzerFrequency, gConfgBuf.buzzerTime * 2, 50);
break;
default:
break;
}
}