122 lines
3.5 KiB
C
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>© 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;
|
|
}
|
|
}
|
|
|