硬件设计
蜂鸣器的驱动信号连接在 STM32F1 的 PB8 上。
beep.h
我们这里通过位带操作来实现某个 IO 口的输出控制, BEEP 就直接代表了 PB8 的输出状态。我们只需要令 BEEP=1,就可以让蜂鸣器发声。
#ifndef __BEEP_H
#define __BEEP_H
#include "sys.h"
#define BEEP PBout(8) // BEEP,蜂鸣器接口
void BEEP_Init(void); //初始化
#endif
beep.c
PB8 要使用高8位CRH寄存器。
#include "beep.h"
//初始化 PB8 为输出口.并使能这个口的时钟
//蜂鸣器初始化
void BEEP_Init(void)
{
RCC->APB2ENR|=1<<3; //使能 PORTB 时钟
GPIOB->CRH&=0XFFFFFFF0;
GPIOB->CRH|=0X00000003; //PB.8 推挽输出
BEEP=0; //关闭蜂鸣器输出
}
main.c
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "beep.h"
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
LED_Init(); //初始化与 LED 连接的硬件接口
BEEP_Init(); //初始化蜂鸣器端口
while(1)
{
LED0=0; //点亮 DS0
BEEP=0; //关闭蜂鸣器
delay_ms(300);
LED0=1; //关闭 DS0
BEEP=1; //打开蜂鸣器
delay_ms(300);
}
}