我们将利用一个 IO 口来控制板载的无源蜂鸣器,实现蜂鸣器发声。通过本次实验,你将进一步了解 STM32 的 IO 口作为输出口使用的方法。实验目标:) r8 U' L7 V# i, Y- T 1、无源蜂鸣器发出悦耳声音。, R Q' ?. i; z% T! B 2、学会设置 STM32 的 GPIO 输出控制蜂鸣器。 ( U# U9 z4 s& P0 ]& _! u3 D0 t5 |0 A 蜂鸣器简介+ ]" d" I. J$ {+ @# O+ q* u w 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。如下图所示6 a! A+ q. O0 |7 b0 [ 1 v. F3 h9 `1 l8 S' q, F 本次实验所用的蜂鸣器是无源蜂鸣器,需要自己编写震荡部分% a( s9 D4 J2 {4 i, A$ p9 Z, I 这里的无源不是指电源的“源”,而是指有没有自带震荡电路,有源蜂鸣器带震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供2~5Khz 左右的方波驱动,才能发声。STM32 的单个 IO最大可以提供 25mA 电流,而蜂鸣器的驱动电流是 30mA 左右,算是比较接近。综合考虑可以直接驱动。1 e/ Y' g0 L+ t( N 还有一个方案就是:STM32 的 IO 不直接驱动蜂鸣器,而是通过三极管扩流后再驱动蜂鸣器,这样STM32 的 IO 只需要提供不到 1mA 的电流就足够了。# `& ]# O d$ H9 {& e2 ~+ p6 m 硬件设计从原理图中,我们可以看到蜂鸣器是接到单片机的 PB6。而驱动无源蜂鸣器的原理就是产生 2~5Khz 左右的方波驱动,才能发声。所以要使蜂鸣器发声也就是将单片机 PB6 管脚每间隔一段时间不输出一个高低电平脉冲即可。1 t' C/ V* ]0 I l0 k 1 g$ N9 R+ a4 J A6 G 蜂鸣器 IO 初始化6 U9 o& l' v# O, h# m void buzz_Init() //端口初始化: T: X9 P% y8 Y/ y1 h. ~ {1 F- J% g# t6 m2 ? GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化GPIO RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); /* 开启 GPIO时钟 */1 X" B! h& }8 h7 [( Z& G' [ /* 配置 GPIO 的模式和 IO 口 */9 E3 `: p1 O2 L4 j! @ GPIO_InitStructure.GPIO_Pin=buzz; //选择你要设置的 IO 口 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //设置推挽输出模式7 C* C4 p+ d& X- g& L( a GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //设置传输速率 GPIO_Init(GPIOB,&GPIO_InitStructure); /* 初始化 GPIO */ }) G8 C% ?' }5 @# c/ w, q0 ?% x0 o $ V1 w c( s* x 蜂鸣器管脚定义在其头文件内如下:1 G x, K2 E! W5 i: Z. X #define buzz GPIO_Pin_6 //PB6 定义端口 PB6 ' f6 P* j/ |5 `5 d8 Z 蜂鸣器发声函数 通过改变频率控制声音变化void buzz_lisen() //报警声 { u32 i=1000; while(i--) //产生一段时间的 PWM 波,使蜂鸣器发声3 j3 v% Z( s5 K( i! {' S {* S* K) e4 [+ O. G6 c9 P GPIO_SetBits(GPIOB,BZ); //IO 口输出高电平1 J( m3 F7 n- l: x delay(i);/ f& G2 A2 g8 g9 ] GPIO_ResetBits(GPIOB,BZ); //IO 口输出低电平' I& n" C9 j, r4 M: P' A delay(i--); } }! Z* H$ G2 u" [; Q 这里的蜂鸣器驱动发生没有使用stm32自带的pwm是自己模拟写的。 所有驱动代码写完了,可以使用主函数调用了。 主函 数; A) `/ @* W8 a$ l int main() { buzz_Init(); //端口初始化* s: i+ I x5 [2 }- \6 z; K while(1)0 c4 }+ m* B X( x { buzz_lisen(); } }5 J1 i6 S+ w" B9 b 有源蜂鸣器就到这里,关于无源的蜂鸣器是跟LED相似的,不在讲解,这次就到这里了。- z8 ~( K0 j2 `( @3 P8 n- i. r& R |
虚心学习 |