/** ****************************************************************************** * @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. * *

© COPYRIGHT 2016 TMC

****************************************************************************** **/ #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; } }