【STM32嵌入式系统设计与开发】——7有源蜂鸣器应用

这里写目录标题


STM32资料包:

百度网盘下载链接:链接:https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd=8888

提取码:8888


一、任务描述

二、任务实施

观察电路图,核心板PD14连接底板中的P2外接排针,将正负极接上直流电压即可持续发声,频率固定。LED的PA0连接底板的D1灯。

1、ActiveBeep工程文件夹创建

步骤1:复制工程模板"1_Template"重命名为"4_ActiveBeep"

步骤2:修改项目工程名,先删除projects文件夹内除了Template.uvprojx文件外的所有内容并修改为"ActiveBeep.uvprojx"。并删除output/obj和output/lst中的所有文件。

步骤3:运行"ActiveBeep.uvprojx"打开目标选项"Options for Target"中的"Output"输出文件,并修改可执行文件名称为"ActiveBeep"点击"OK"保存设置。最后点击"Rebuild"编译该工程生成ActiveBeep文件。

步骤4:复制"2_LEDTest"中的"1_LED"文件复制到hardware中。

步骤5:新建"2_ActiveBeep"文件,并在该文件夹下新建"ActiveBeep.c"和"ActiveBeep.h"两个文件。

步骤6:工程组文件中添加"led.c"和"ActiveBeep.c"文件。

步骤7:目标选项添加添加头文件路径

2、函数编辑

(1)主函数编辑

控制蜂鸣器和 LED,每次循环时蜂鸣器和 LED 的状态会交替改变,并且每次循环时延迟的时间会逐渐增加,直到 temp 达到 200,然后重新从 10 开始。这样就会产生一种周期性变化的效果,蜂鸣器和 LED 会以不同的频率闪烁。

步骤1:端口初始化准备

c 复制代码
	//函数初始化,端口准备
	delay_init(); //启动滴答定时器
	LED_Init();   //LED初始化
	BeepInit();   //有源蜂鸣器初始化

步骤2:循环时延迟的时间会逐渐增加,直到 temp 达到 200,然后重新从 10 开始。这样就会产生一种周期性变化的效果,蜂鸣器和 LED 会以不同的频率闪烁。

c 复制代码
	while(1)
	{	 										
		delay_ms(temp);// 延迟temp毫秒
		temp += 100;    // 增加延迟时间10毫秒
		
		beep = !beep;  // 切换蜂鸣器状态(取反)
		LED1 = !LED1;    // 切换LED状态(取反)
		
		if(temp == 2000)// 如果延迟时间达到200毫秒,则重置为10毫秒
				temp = 100;
	}

(2)LED IO初始化函数(LED_Init())

c 复制代码
/*********************************************************************
 @Function  : 开发板LED IO初始化
 @Parameter : N/A 
 @Return    : N/A
**********************************************************************/
void ExpLEDInit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure; // 定义 GPIO 初始化结构体变量
    
    /* 时钟使能 */	
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能 GPIOA 时钟
    
    /* 引脚配置 */	
    GPIO_InitStructure.GPIO_Pin = LED_ALL; // D1-D8->PA0-PA7 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 设置引脚为推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 设置引脚的输出速度为 50MHz
    GPIO_Init(GPIOA, &GPIO_InitStructure); // 应用以上配置到 GPIOA 上
    
    GPIO_SetBits(GPIOA, LED_ALL); // 将 GPIOA 的引脚 PA0-PA7 设置为高电平,使得开发板 LED 灭
}

(3)蜂鸣器 IO初始化(BeepInit())

初始化PD14端口,并为推挽输出。

c 复制代码
/*********************************************************************
 @Function  : 开发板蜂鸣器 IO初始化
 @Parameter : None 
 @Return    : None
**********************************************************************/
void BeepInit(void)
{
 	GPIO_InitTypeDef  GPIO_InitStructure;
	
	/*时钟使能*/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
	
	/*引脚配置*/
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;       // 将开发板四个按键连接到PE8~PE15
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置 GPIO 输出速度为 50MHz
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出		 
    GPIO_Init(GPIOD, &GPIO_InitStructure);	
	
	/*引脚初始电平设置*/
	GPIO_SetBits(GPIOD,GPIO_Pin_14);
}

3、宏定义

(1)源文件添加头文件

步骤1:按键功能文件中添加相关头文件,源文件报错消失部分

c 复制代码
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#include "ActiveBeep.h"

步骤2:主函数添加所需的led和KeyBoard头文件,主源文件部分报错消失

c 复制代码
/***********Hardweare***************/
#include "led.h"
#include "ActiveBeep.h"

(2)有源蜂鸣器头文件编辑

点击编译显示报错

步骤1:创建一个宏定义保护

c 复制代码
#ifndef _SINGLEKEY_H
#define _SINGLEKEY_H





#endif

步骤2:添加宏定义

c 复制代码
#define beep PDout(14)   // 定义了一个宏,用于操作PD14引脚的输出状态,此处假设使用的是外部定义的函数或宏

步骤3:添加led宏定义

c 复制代码
#define LED_ALL GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7

步骤3:添加函数声明

c 复制代码
void BeepInit(void);     // 函数声明,用于初始化蜂鸣器

步骤4:添加数据类型和宏的头文件

c 复制代码
#include "stdint.h"      // 包含标准的C语言头文件,用于定义标准的整数类型

4、知识链接

(1)有源蜂鸣器

蜂鸣器是一种能将音频信号转化声音信号的发音器件,在家电器上,在银行、公安的报警系统中,在电子玩具、游戏机中都得到普遍应用。蜂鸣器是一种能将音频信号转化声音信号的发音器件,在家电器上,在银行、公安的报警系统中,在电子玩具、游戏机中都得到普遍应用。蜂鸣器主要用于提示或报警,根据设计和用途的不同,能发出音乐声、汽笛声、蜂鸣声、报警声、声铃声等各种不同的声音。

   内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定。

(2)无源蜂鸣器

   内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音

5、工程测试

相关推荐
zephyr_zeng3 小时前
VsCode + EIDE + OpenOCD + STM32(野火DAP) 开发环境配置
c语言·c++·vscode·stm32·单片机·嵌入式硬件·编辑器
派阿喵搞电子7 小时前
STM32的APB1和APB2的区别
stm32·单片机·嵌入式硬件
木燚垚11 小时前
基于STM32物联网水质监测系统的设计与实现/基于STM32的水产养殖云监控系统设计
stm32·单片机·嵌入式硬件·物联网·智能家居
想要成为糕手。15 小时前
stm32-RTC时实时钟
stm32·嵌入式硬件·实时音视频
Czzzzlq16 小时前
STM32基础教程——对射式红外传感器计数实验
c语言·stm32·单片机·嵌入式硬件·mcu
集大周杰伦16 小时前
ARM Cortex-M 内存映射详解:如何基于寄存器直接读写 寄存器映射方式编码程序 直接操作硬件寄存器来控制 MCU
arm开发·stm32·单片机·内存映射·arm cortex-m·地址映射·寄存器编码
最爱是生活17 小时前
STM32之软件SPI
stm32·单片机·嵌入式硬件
触角010100011 天前
OLED屏幕开发全解析:从硬件设计到物联网显示实战 | 零基础入门STM32第五十二步
驱动开发·stm32·单片机·嵌入式硬件·物联网
傍晚冰川1 天前
【江协科技STM32】ADC数模转换器-学习笔记
笔记·科技·stm32·单片机·嵌入式硬件·学习
盐析大白兔1 天前
STM32G431RBT6--(3)片上外设及其关系
stm32·单片机·嵌入式硬件