/* ********************************************************************************************************* * * 【安富莱】STM32-V4 开发板-例程功能说明 * * 例程名称 : V4-005_无源蜂鸣器例程(硬件PWM) * * 推荐将编辑器的缩进参数和TAB设置为4 来阅读本文件 * ********************************************************************************************************* */ 【1】例程简介 本例子演示如何驱动蜂鸣器。STM32-V4开发板安装的蜂鸣器为无源蜂鸣器,使用PA8引脚。 主程序实现功能: (1) 按K1,K2,K3键分别发出不同的蜂鸣音 (2) 通过摇杆左右键可以调节蜂鸣器频率。 操作提示: 1. K1键 - 按键提示音(固定频率1.5KHz) 2. K2键 - 急促鸣叫10次 3. K3键 - 长鸣3次 4. 摇杆左键 - 蜂鸣器频率 - 100Hz 5. 摇杆右键 - 蜂鸣器频率 + 100Hz 源代码说明: (1)bsp_beep.c 是蜂鸣器驱动文件。通过宏切换是有源蜂鸣器还是无源蜂鸣器。 无源蜂鸣器需要使用TIM硬件输出 PWM波形来驱动。 //#define BEEP_HAVE_POWER /* 定义此行表示有源蜂鸣器,直接通过GPIO驱动, 无需PWM */ (2)bsp_tim_pwm.c 是定时器PWM驱动文件。SetTIMOutPWM()函数配置GPIO为输出PWM状态。 void bsp_SetTIMOutPWM(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, TIM_TypeDef* TIMx, uint8_t _ucChannel, uint32_t _ulFreq, uint32_t _ulDutyCycle); (3)bsp.c 中,需要每隔10ms调用一次BEEP_Pro()函数,该函数用来控制蜂鸣次数和时长。 void bsp_RunPer10ms(void) { bsp_KeyScan(); /* 每10ms扫描按键一次 */ BEEP_Pro(); /* 蜂鸣器定时处理 */ } (4) BEEP_KeyTone(); 是发按键提示音的函数,频率固定1.5KHz。 BEEP_Start()启动蜂鸣器开始鸣叫。该函数是非阻塞的,10ms定时中断服务程序会控制PWM的启动和停止。 BEEP_Stop() 立即终止鸣叫。 【2】执行结果 使用USB转RS232线,连接开发板的RS232接口到计算机的USB接口。运行 SecureCRT 软件。 下面是串口界面执行结果: ************************************************************* * 例程名称 : V4-005_无源蜂鸣器例程(硬件PWM) * 例程版本 : 1.0 * 发布日期 : 2015-08-30 * 固件库版本 : 3.6.1 * CMSIS版本 : 3.01 * * QQ : 1295744630 * Email : armfly@qq.com * Copyright www.armfly.com 安富莱电子 ************************************************************* 操作提示: 1. K1键 - 按键提示音(固定频率1.5KHz) 2. K2键 - 急促鸣叫10次 3. K3键 - 长鸣3次 4. 摇杆左键 - 蜂鸣器频率 - 100Hz 5. 摇杆右键 - 蜂鸣器频率 + 100Hz 蜂鸣器频率 = 1500Hz 【3】修改记录 2015-08-30 V1.0 首版