基于CubeMX学习 驱动蜂鸣器发声

基于CubeMX学习 驱动蜂鸣器发声实验



前言

蜂鸣器广泛应用于报警器、电子玩具、汽车电子等各类电子产品中,常作为发声器件提示等领域使用。

1、蜂鸣器原理

蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型,本实验使用到的蜂鸣器是有源蜂鸣器。
这里的有源不是指电源的“源”,而是指内部有没有自带的震荡源,所以有源蜂鸣器自带了震荡电路,通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供 2~5Khz 左右的方波才能驱动发声。

2、配置过程

2.1.CubeMX部分

2.1.1 选择芯片型号

在这里插入图片描述

2.1.2 时钟源配置

在这里插入图片描述

2.1.3 启用 Debug 配置

在这里插入图片描述

2.1.4 选择外部高速时钟作为来源

在这里插入图片描述

2.1.5 GPIO引脚配置,作为输出功能。如果找不到端口,可以用搜索查找比较方便。

在这里插入图片描述
在这里插入图片描述

引脚工作模式相关配置,由于是高电平发声的,所以我初始化时用了低电平,开始就把蜂鸣器关闭了。

在这里插入图片描述

2.1.6 工程名字及路径不能有中文,否则生成工程时会报错。

在这里插入图片描述

2.1.7 生成独立的.c/.h相关头文件。

在这里插入图片描述

2.1.8 打开MDK工程

在这里插入图片描述

2.2.硬件连接部分

蜂鸣器的硬件控制引脚接到芯片的PB8引脚上,根据原理图分析,是高电平作用发声。

在这里插入图片描述
由于单片机IO口输出的电流是比较小的,所以在这里用一个NPN型三极管来驱动蜂鸣器,增加io口的的驱动能力。

在这里插入图片描述

2.3.MDK程序部分

2.3.1 打开工程后首先全局编译一下,确保工程在编写之前正常编译通过,以免后续麻烦排查。

在这里插入图片描述

2.3.2 GPIO初始化,由cubemx生成的,和之前的配置保持一致,不用自己写了,比较方便。

在这里插入图片描述

2.3.3 主要功能代码:

在这里插入图片描述

代码如下:

  while (1)
  {
      HAL_GPIO_WritePin(BEEP_GPIO_Port,GPIO_PIN_8,GPIO_PIN_SET);  /* 打开蜂鸣器 */
      HAL_Delay(500);                                             /* 延时 500ms */
      HAL_GPIO_WritePin(BEEP_GPIO_Port,GPIO_PIN_8,GPIO_PIN_RESET);/* 关闭蜂鸣器 */
      HAL_Delay(500);                                             /* 延时 500ms */
  }

2.3.4 debug配置,勾选下载后自带运行代码。
在这里插入图片描述

2.3.5 如果在编程过程中没有开启代码补全提示功能,可以根据下图所示的配置打开。
在这里插入图片描述
需要几个字符后开始提示,根据个人喜欢设置。
在这里插入图片描述

2.4.下载验证

程序编译下载到开发板后,可以听到蜂鸣器以1s为周期,500ms间隔发声。

3、总结

蜂鸣器的使用还算是比较基础的,一些简单步骤就不详细写了。主要是区分蜂鸣器的种类和驱动方式、GPIO的相关配置步骤等。

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
您好!要使用STM32定时器输出PWM波来驱动无源蜂鸣器,可以按照以下步骤进行操作: 1. 配置定时器:选择一个合适的定时器和通道,将定时器配置为PWM输出模式。 2. 初始化定时器:设置定时器的预分频值和重载值,以确定PWM波的频率和占空比。 3. 配置GPIO:将蜂鸣器连接到相应的GPIO引脚上。 4. 启动定时器:使能定时器开始产生PWM波。 下面是一个简单的示例代码,用于在STM32上配置定时器2通道1输出PWM波来驱动无源蜂鸣器: ```c #include "stm32f4xx.h" void TIM2_PWM_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; GPIO_InitTypeDef GPIO_InitStructure; // 使能定时器2和GPIOA的时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); // 配置GPIO引脚为复用功能 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置GPIO引脚与定时器2通道1的映射关系 GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_TIM2); // 配置定时器2的基本参数 TIM_TimeBaseStructure.TIM_Period = 1000 - 1; // 设置重载值,决定PWM波的频率 TIM_TimeBaseStructure.TIM_Prescaler = 84 - 1; // 设置预分频值,决定定时器的时钟频率 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // 配置定时器2通道1为PWM输出模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 500; // 设置脉冲宽度,决定PWM波的占空比 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM2, &TIM_OCInitStructure); // 启动定时器2 TIM_Cmd(TIM2, ENABLE); } ``` 以上代码假设您的无源蜂鸣器连接到了STM32的PA0引脚上,使用的是STM32F4系列芯片。您可以根据实际情况进行相应的修改。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值