战舰开发板V4——蜂鸣器



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);
