使用STM32CubeMX配置工程+MDKARM编写代码实现蜂鸣器控制
一、蜂鸣器简介
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
蜂鸣器的发声原理由振动装置和谐振装置组成,而蜂鸣器又分为无源他激型与有源自激型。
无源他激型蜂鸣器的工作发声原理是:方波信号输入谐振装置转换为声音信号输出。
有源自激型蜂鸣器的工作发声原理是:直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号。
主要是要区分有源和无源的蜂鸣器,两种蜂鸣器的驱动方式是不一样的。有源蜂鸣器采用点平驱动(电平驱动又分为,高电平触发和低电平触发)、无源蜂鸣器采用PWM波驱动,频率越高音调就越高。而有源蜂鸣器的音调是固定的,因为频率是固定的。
尤其自己做东西的时候,购买元器件,一定要看清楚是有源的还是无源的蜂鸣器。
这里用的是高电平触发的有源蜂鸣器,给高电平就能响,低电平就关了。连接的引脚是PF8。
二、STM32CubeMX配置
三、代码实现
代码实现基本上就和LED灯一样。
定义宏函数
//BEEP control
#define Beep_On HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin,GPIO_PIN_SET)
#define Beep_Off HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin,GPIO_PIN_RESET)
#define Beep_Toggle HAL_GPIO_TogglePin(BEEP_GPIO_Port,BEEP_Pin)
在主函数中去写功能,验证蜂鸣器功能
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
Beep_On;//打开蜂鸣器
for(int i=0;i<10;i++)
{
HAL_Delay(1000);//延时
}
Beep_Off;//关闭蜂鸣器
for(int i=0;i<10;i++)
{
HAL_Delay(1000);//延时
}
}
/* USER CODE END 3 */
注意代码要放在 USER BEIN 和END之间,要不然重新用Cube生成工程的时候就会消失。
感谢各位的浏览。鄙人水平有限,很多地方写的感觉差强人意,如果有不对的地方欢迎指正。