1. 蜂鸣器硬件设计
PB8 口输出。IO口的电流很小,不足以直接驱动BEEP发出声音,所以要接三极管发大电路,将电流发大。(IO口接继电器也一样,需要接三极管)。三极管的β系数就是电流的发大倍数。
R38 10K电阻的作用: GPIO口为悬空状态,如果没有R38,IO口可能会有电压,经过三极管后被发大,导致蜂鸣器发出响声
2. 实验步骤
使能IO时钟 调用函数RCC_APB2PeriphClockCmd();
初始化IO模式。 调用BEEP_Init();
操作IO口,输出高低电平
3. 具体实现
1) BEEP.C 添加到HARDWARE文件夹下
void BEEP_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //BEEP-->PB.8 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据参数初始化GPIOB.8
GPIO_ResetBits(GPIOB,GPIO_Pin_8);//输出0,关闭蜂鸣器输出
}
注意事项:RCC_APB2PeriphClockCmd 为什么是APB2 可追查头文件,APB1一般包括time,串口等,APB2包括了IO口的时钟
2)main.c文件 添加到user文件夹下
int main(void)
{
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
BEEP_Init(); //初始化蜂鸣器端口
while(1)
{
LED0=0;
BEEP=0;
delay_ms(300);//延时300ms
LED0=1;
BEEP=1;
delay_ms(300);//延时300ms
}
}
注意点:BEEP=0 中的beep是位操作,在BEEP.H中定义,改语句也可以用库函数语句表达
GPIO_Resetbits(GPIOB,GPIO_Pin_8);