写个STM32的蜂鸣器实验代码
时间: 2023-07-09 14:20:01 浏览: 65
以下是STM32的蜂鸣器实验代码,基于HAL库编写:
```
#include "main.h"
/* 定义蜂鸣器引脚 */
#define BEEP_Pin GPIO_PIN_5
#define BEEP_GPIO_Port GPIOA
/* 定义蜂鸣器频率 */
#define BEEP_FREQ 2000
/* 定义蜂鸣器周期 */
#define BEEP_PERIOD (1000000 / BEEP_FREQ)
/* 定义蜂鸣器摆动次数 */
#define BEEP_TIMES 2
/* 定义延时函数 */
void Delay(uint32_t nCount) {
for (uint32_t i = 0; i < nCount; i++) {
for (uint32_t j = 0; j < 1000; j++);
}
}
/* 蜂鸣器初始化函数 */
void BEEP_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* 使能GPIOA时钟 */
__HAL_RCC_GPIOA_CLK_ENABLE();
/* 配置PA5引脚为推挽输出 */
GPIO_InitStruct.Pin = BEEP_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(BEEP_GPIO_Port, &GPIO_InitStruct);
}
/* 蜂鸣器鸣叫函数 */
void BEEP_Beep(void) {
for (uint32_t i = 0; i < BEEP_TIMES; i++) {
/* 鸣叫 */
HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_SET);
Delay(BEEP_PERIOD / 2);
/* 停止 */
HAL_GPIO_WritePin(BEEP_GPIO_Port, BEEP_Pin, GPIO_PIN_RESET);
Delay(BEEP_PERIOD / 2);
}
}
int main(void) {
HAL_Init();
BEEP_Init();
while (1) {
BEEP_Beep(); /* 蜂鸣器鸣叫 */
Delay(1000000); /* 延时1秒 */
}
}
```
该代码中定义了蜂鸣器引脚、频率、周期和摆动次数等参数,通过BEEP_Init()函数初始化蜂鸣器,通过BEEP_Beep()函数使蜂鸣器鸣叫,然后通过延时函数实现周期性的鸣叫效果。