战舰开发板V4——蜂鸣器
战舰开发板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 */
// 用户代码区 2
Beep_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);

浙公网安备 33010602011771号