战舰开发板V4——蜂鸣器

📅 2026/7/29 21:51:54 👁️ 阅读次数 📝 编程学习
战舰开发板V4——蜂鸣器

战舰开发板V4——蜂鸣器

image-20260729213159699

image-20260729213238156

image-20260729213254277

LED驱动代码:

#include "Led.h"  /* 蜂鸣器高电平触发 *//*** @brief   初始化LED相关IO口,并使能时钟* @param   无* @retval  无*/
void Led_Init(void)
{GPIO_InitTypeDef GPIO_Init_Struct;LED0_GPIO_CLK_ENABLE();                             /* LED0 时钟使能 */LED1_GPIO_CLK_ENABLE();                             /* LED1 时钟使能 */GPIO_Init_Struct.Pin = LED0_GPIO_PIN;               /* LED0 引脚 */GPIO_Init_Struct.Mode = GPIO_MODE_OUTPUT_PP;        /* 推挽输出 */GPIO_Init_Struct.Pull = GPIO_PULLUP;                /* 上拉 */GPIO_Init_Struct.Speed = GPIO_SPEED_FREQ_HIGH;      /* 高速 */HAL_GPIO_Init(LED0_GPIO_PORT, &GPIO_Init_Struct);   /* LED0引脚 初始化 */GPIO_Init_Struct.Pin = LED1_GPIO_PIN;               /* LED1 引脚 */HAL_GPIO_Init(LED1_GPIO_PORT, &GPIO_Init_Struct);   /* LED1引脚 初始化 */LED0(1);                                            /* 关闭 LED0 */LED1(1);                                            /* 关闭 LED1 */	
}
#ifndef __LED_H
#define __LED_H#include "main.h"/* 定义 引脚 */#define LED0_GPIO_PORT                  GPIOB
#define LED0_GPIO_PIN                   GPIO_PIN_5
#define LED0_GPIO_CLK_ENABLE()          do{ __HAL_RCC_GPIOB_CLK_ENABLE(); }while(0)   /* PB口时钟使能 */#define LED1_GPIO_PORT                  GPIOE
#define LED1_GPIO_PIN                   GPIO_PIN_5
#define LED1_GPIO_CLK_ENABLE()          do{ __HAL_RCC_GPIOE_CLK_ENABLE(); }while(0)   /* PE口时钟使能 *//* LED端口定义 */#define LED0(x)        do{x ?\HAL_GPIO_WritePin(LED0_GPIO_PORT, LED0_GPIO_PIN, GPIO_PIN_SET):\HAL_GPIO_WritePin(LED0_GPIO_PORT, LED0_GPIO_PIN, GPIO_PIN_RESET);\}while(0);   /* LED0 翻转 */#define LED1(x)        do{x ?\HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_GPIO_PIN, GPIO_PIN_SET):\HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_GPIO_PIN, GPIO_PIN_RESET);\}while(0);   /* LED1 翻转 */
/* LED取反定义 */
#define LED0_TOGGLE()  do{ HAL_GPIO_TogglePin(LED0_GPIO_PORT, LED0_GPIO_PIN)); }while(0);   /* 翻转LED0 */
#define LED1_TOGGLE()  do{ HAL_GPIO_TogglePin(LED1_GPIO_PORT, LED1_GPIO_PIN)); }while(0);   /* 翻转LED1 *//* 外部函数接口 */
void Led_Init(void);      /* 初始化 */#endif

蜂鸣器驱动代码:

#include "Beep.h"/*** @brief  初始化 BEEP 相关 IO 口,并使能时钟* @param  无* @retval 无*/// 蜂鸣器初始化函数 BEEP_Init()void Beep_Init(void)
{GPIO_InitTypeDef GPIO_Init_Struct;                /* 定义 GPIO 结构体名 */BEEP_GPIO_CLK_ENABLE();							  /* BEEP 时钟使能 */GPIO_Init_Struct.Pin = BEEP_GPIO_PIN;             /* 蜂鸣器引脚 */GPIO_Init_Struct.Mode = GPIO_MODE_OUTPUT_PP;      /* 推完输出 */GPIO_Init_Struct.Pull = GPIO_NOPULL;              /* 悬空 */GPIO_Init_Struct.Speed = GPIO_SPEED_FREQ_HIGH ;   /* 高速 */HAL_GPIO_Init(BEEP_GPIO_PORT, &GPIO_Init_Struct); /* 初始化蜂鸣器引脚 */BEEP(0);                                          /* 关闭蜂鸣器 */
}
#ifndef __BEEP_H
#define __BEEP_H#include "main.h"/* 引脚定义 */
#define BEEP_GPIO_PORT            GPIOB
#define BEEP_GPIO_PIN             GPIO_PIN_8/* PB 口时钟使能 */
#define BEEP_GPIO_CLK_ENABLE()    do{ __HAL_RCC_GPIOB_CLK_ENABLE(); }while(0)  // do { ... } while(0) 是 C 语言宏定义标准写法,专门解决宏在分支语句下的语法 BUG
// __HAL_RCC_GPIOB_CLK_ENABLE();    __内部私有接口、底层定义,不建议用户直接修改/* 蜂鸣器控制 */
#define BEEP(x)           do{ x ? \HAL_GPIO_WritePin(BEEP_GPIO_PORT, BEEP_GPIO_PIN, GPIO_PIN_SET) : \HAL_GPIO_WritePin(BEEP_GPIO_PORT, BEEP_GPIO_PIN, GPIO_PIN_RESET); \}while(0)     /* BEEP状态翻转 */
#define BEEP_TOGGLE()     do{ HAL_GPIO_TogglePin(BEEP_GPIO_PORT, BEEP_GPIO_PIN);\}while(0)/* 外部接口函数 */												
void Beep_Init(void);   #endif

主函数代码:

/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"     // 主头文件
#include "gpio.h"     // 引入 GPIO初始化文件
#include "Beep.h"     // 引入 BEEP头文件
#include "Led.h"      // 引入 LED头文件
/* Initialize all configured peripherals */
MX_GPIO_Init();  // 初始化GPIO(CubeMX生成)
/* USER CODE BEGIN 2 */// 用户代码区 2Beep_Init();     // 蜂鸣器 初始化Led_Init();      // LED 初始化
while (1)   //无限主循环,程序主体在这里循环执行
{/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///循环内部,所有业务逻辑写这里BEEP(0);LED0(0);HAL_Delay(500);BEEP(1);LED0(1);HAL_Delay(500);

image-20260729214042038