你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32 GPIO之蜂鸣器

[复制链接]
STMCU小助手 发布时间:2022-4-2 15:00
01. 蜂鸣器简介
( P% l7 L/ l2 p! o. t蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
# t* D" q  x- d; D3 a! z, N0 \/ M
, @, n9 g3 {% Z( m- P/ t) E* k探索者 STM32F4 开发板板载的蜂鸣器是电磁式的有源蜂鸣器,如图 7.1.1 所示:. Q% I9 v9 b- ~# g9 t# \+ p. ?3 w7 e6 S

1 s* G- T, E" u- h+ g3 P3 Z& B) y C3OKI2)3LIDWS[HME(]}H16.png
* i% p: Q7 F' `  x. W2 Z, \( V# j5 g
这里的有源不是指电源的“源”,而是指有没有自带震荡电路,有源蜂鸣器自带了震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供 2~5Khz 左右的方波驱动,才能发声。% B9 p+ q9 ^( f8 M

% o4 @" {+ T. U) e* t2 u% T02. 硬件设计8 r/ Z6 `8 F) U7 x3 t4 E
蜂鸣器在硬件上也是直接连接好了的,不需要经过任何设置,直接编写代码就可以了。蜂鸣器的驱动信号连接在 STM32F4 的 PF8 上。
0 ^8 W- r6 i$ K' Z$ V; v9 A1 E
- j' l- m1 e$ {! X9 R4 |5 s7 L; Q 52)353YM[OIL]N@DTOY9ETO.png
* Q# @  ?" H" j. ^0 N0 t; W& `" I3 f' L7 V' e$ B, W9 T! H
图中我们用到一个 NPN 三极管(S8050)来驱动蜂鸣器,R61 主要用于防止蜂鸣器的误发声。当 PF.8 输出高电平的时候,蜂鸣器将发声,当 PF.8 输出低电平的时候,蜂鸣器停止发声。. }& G9 @, q2 j0 [
) Z, A! b, Q+ S$ C
03. 程序示例一
) o- x+ v7 D1 R蜂鸣器不叫
. l) i) H8 Y- S- j7 ]# G. T! a. h# M7 [" t$ Q! j" J, N
beep.h文件
0 L7 e: I  C0 I. w7 l, ]! ^% H" q: F, P& P# G& ^1 o& {3 l. r) X
  1. #ifndef __BEEP_H__- w* I$ F* T7 |' h& Q
  2. #define __BEEP_H__
    ! w' ~% f5 e- Q5 e& g
  3. 1 q4 n; _6 X. X6 P* n& O

  4. : b$ y, w7 k- s0 D
  5. #include "sys.h"7 w5 ~+ K0 U+ O. P# ^

  6. 6 A" z0 g) h8 W/ ]
  7. * n. k7 `* }) \2 o% D4 b
  8. //蜂鸣器初始化
    $ D7 K6 x, }# z! A1 i; V
  9. void BEEP_Init(void);9 _! Q$ |. h- Z7 X) x
  10. 1 \5 A' G5 l- ~% [; m+ M- l$ }  V
  11. #define BEEP PFout(8); C$ D7 o& c  O" @# D3 @' Z
  12. ( q+ k" P" T8 E- O, G
  13. #endif /*__BEEP_H__*/
复制代码

# S' X9 M' D8 I" U: [- F, wbeep.c文件
# ^6 y( G- A! C4 J" G, L* ~
; {  y4 C% [4 j# e+ ~: s1 }# ~
  1. #include "beep.h"
    * `6 c6 G" _# J' U- m
  2. - c: S0 m$ x* ]. M% a) L+ u$ n" J$ r3 A
  3. //蜂鸣器初始化
    8 D0 C/ T4 Q% A
  4. void BEEP_Init(void)! F% M' H$ ~1 K; Q' B
  5. {
    ' @& N2 @  }1 p* \! E
  6.         GPIO_InitTypeDef GPIO_InitStruct;
    5 t# K5 D" F5 z
  7.         ) Z; O0 ?2 p1 o1 e4 b9 E
  8.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;7 H5 y9 O" q5 T( a
  9.         7 |$ \9 z% z) D* k
  10.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    1 h" e$ m3 ^8 Y! f. t2 W2 R* D( t
  11.         
    : i. U1 X$ Q. ^% i% V& K; i
  12.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
    . D, A2 P1 B8 o+ X% |) V
  13.         
    # R, f/ e$ J; k8 _4 `8 V# J
  14.         GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;7 u! O) r0 m' N$ P. m
  15.         
    0 \2 k, [; C0 U+ T9 H) n1 O8 \+ I
  16.         GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
    " m+ P' e% d4 r8 v- D
  17.         
    + S" h9 j8 u- `
  18.         //使能时钟7 G3 f$ D5 _! l8 m
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);! I8 L% i' `# S$ x
  20.         
    : B6 K- {) j  N
  21.         //初始化GPIO& v: m/ k) W: p" y
  22.         GPIO_Init(GPIOF, &GPIO_InitStruct);
    . J8 D7 o$ `( q9 c

  23. * {+ B: M, W6 T5 Q  j
  24.         //设置默认低电平$ V! d# d& d4 @; s
  25.         GPIO_ResetBits(GPIOF, GPIO_Pin_8);6 e9 ~/ K2 u/ M: Q# @
  26. }
复制代码

% `1 K  Y1 y) N4 x: V; b7 i0 imain.c文件& M; @1 D* m0 D0 l: q2 J1 {
0 C( ?- T# P5 o% Z' ?
  1. #include "stm32f4xx.h"
    ( ^5 R$ T( k# p5 u4 ]: C3 X
  2. $ A+ ?+ p$ I# {, k* v
  3. #include "delay.h"
    2 N, ?$ w! O1 c6 V
  4. #include "led.h"
    - e( `6 w1 k' e/ D
  5. #include "beep.h"
    + M  E; a# H& _+ \. \" O5 A) m* x

  6. ' U* @( f$ a( L- i/ H9 i0 _7 N4 w

  7. + Y: b1 X, g6 J3 O8 T
  8. int main(void)
    : {2 p) T% n& f# A: I
  9. {
    ( f6 Y; M% r7 W
  10.         //初始化
    : x  f: t! x: B% p& J3 F' A
  11.         delay_init(168);
    # o. p7 O6 k5 V; \, J
  12.         LED_Init();5 _; B: c8 N0 ~7 E  ^$ U: d
  13.         BEEP_Init();
    " r7 s/ i0 v4 K
  14.         $ W. S3 }( ~% t4 {& h
  15.         //蜂鸣器不叫: _& F3 u1 w3 c0 u- [
  16.         GPIO_ResetBits(GPIOF, GPIO_Pin_8);
    " X7 o7 e) |" {
  17. }
复制代码

* }& i3 i3 L! R5 z1 |0 @5 B& @04. 程序示例二

7 ]. R: u- v' ~: ^蜂鸣器叫
. K) K* h* w1 d+ E! A$ c, T6 k" Q! H& u! ?) Q
main.c文件
& K& C  W) B5 e; l; h2 r
0 i1 w# V$ Z1 p1 F4 G
  1. #include "stm32f4xx.h"
    & R: {/ R0 N8 M+ x  T

  2. 0 P8 t" Z! t0 Y$ w
  3. #include "delay.h"
    0 A) Q2 r3 ]" t; S% s! I( S
  4. #include "led.h"9 X) }" K# e* V- e
  5. #include "beep.h"* X+ h- b: p4 ]* P

  6. . z1 q$ @; {, j+ J
  7. ) n# W0 i6 C6 j
  8. int main(void)! \6 ~8 A& K$ |  \$ `7 n6 z) n
  9. {
    ) E" ]; ]% `( A7 ~4 N7 u6 u
  10.         //初始化
    4 W  l2 r$ `, z" E
  11.         delay_init(168);
    * t. p" q0 f$ O3 ?4 ~  x
  12.         LED_Init();- Z% Q# {" s/ m1 B& h4 n
  13.         BEEP_Init();
    $ s$ x4 m0 g: M- g
  14. 6 _9 c+ T' k& Q5 G
  15.         GPIO_SetBits(GPIOF, GPIO_Pin_8);% @+ T' b; F# r% e( e! W- A. o
  16. }
复制代码
5 h( R- b+ b& T
05. 程序实例三( M0 E! G* s  _) R$ b) X( `; F9 p
蜂鸣器循环叫1秒 不叫1秒
& Q% k4 E' c, D  G  k# Y, O- v) Z3 j4 \& E% B- k2 h  E
main.c
4 U+ I) D3 w0 D* R1 s7 N+ c+ W& n* T/ X; {0 a% n+ w2 K6 a# b
  1. #include "stm32f4xx.h", {* I) v' ^4 p4 Q
  2. 6 ?+ g- V) k! O- z/ k
  3. #include "delay.h"& ?1 U! O, D) p3 P! Y: e
  4. #include "led.h". o8 v) ^- u  g
  5. #include "beep.h"
    5 {* q4 v+ N/ o* q) m

  6. # S7 v0 h9 Z9 M: c

  7. 8 P9 x' H0 p: s: k: k
  8. int main(void)
    0 M3 X3 u5 e: _+ H5 l  V2 [5 J. W
  9. {
    ) l' Q' F3 K" {+ ?, z$ D
  10.         //初始化
    4 ~$ m. h+ u+ I9 ]
  11.         delay_init(168);0 T, b1 W' x4 h6 C" O9 _2 k) ~
  12.         LED_Init();$ @( I- M: L  M& |2 M& e
  13.         BEEP_Init();" a* n; p+ W: c' P
  14.         ; p9 M* j2 ~( @/ e
  15.         //蜂鸣器不叫' `# d! \& c, k8 n: v* d
  16.         GPIO_ResetBits(GPIOF, GPIO_Pin_8);
    : Y% I. ?. o  a7 I
  17.         GPIO_ResetBits(GPIOF, GPIO_Pin_9);        
    . X" O& _+ @+ I3 p. A3 I0 `) |$ s
  18.         delay_ms(1000);
    : p$ f/ s- x7 A6 U, q3 g* i
  19.         - o# b& d6 i$ x" O+ s% q# z( m, k
  20.         //蜂鸣器叫7 j0 r- O2 K0 S. F4 g) f
  21.         GPIO_SetBits(GPIOF, GPIO_Pin_8);
    / ^2 h! H& ^' C4 [9 I' f6 l7 m
  22.         GPIO_SetBits(GPIOF, GPIO_Pin_9);! y. v" s: d8 b- [' ]! P) T
  23.         delay_ms(1000);6 }# W& x( U# k9 F+ X0 X- _" i' n
  24.         ! M% N, a! T4 X, e& P) l' f* v( F
  25. }
    1 `3 N$ z* U3 ?( i  k
复制代码

2 e+ d5 Z: L3 b) R  ^  M4 D; H* l  r( P) `
位带操作; a6 s, J5 u/ x: N+ V

: y( j1 }# x/ g9 ]3 S* vmain.c文件
; x, T; r; y, a. E; `% ^7 D. C- B" [# C
  1. #include "stm32f4xx.h"
    0 [$ h. S, m1 j+ I) N" \
  2. / D8 f* V# Q8 F: M# d# E
  3. #include "delay.h"2 p  N+ W' T9 ^% Y+ ]4 K$ C5 W
  4. #include "led.h"
    9 [* }2 t  |$ a) ^' x8 b1 G5 C- K$ N
  5. #include "beep.h"
    / \: [9 o$ B6 q$ ?! @6 e

  6. 1 R! u6 C- [5 l. L& _8 g

  7. & A6 e6 \7 p- M' t( y3 x3 j
  8. int main(void)" M; ~0 H% |0 L
  9. {
    6 @4 r5 V$ {& Z: h, P& G
  10.         //初始化
    & d" l8 u6 t1 Z8 Z/ g
  11.         delay_init(168);7 A. N! y& `+ m8 C: {
  12.         LED_Init();
    ; N7 e8 }* X- w  Q4 R( v8 y
  13.         BEEP_Init();# `& t4 M0 p9 p, {2 r, L
  14.         % b3 Z+ B6 @' _0 U+ c# @
  15.         //蜂鸣器不叫
    ' ]. t. S$ a9 g+ K& E" d) M
  16.         LED2 = 0;
    $ R. r. d1 D9 t7 h! x5 S
  17.         BEEP = 0;
    " B4 m! @/ K( ^6 g" o3 j
  18.         delay_ms(1000);
    6 v1 [! M, T3 @8 z$ o' m
  19.         
    5 K/ ]0 e( L/ b( [
  20.         //蜂鸣器叫% M$ r& E0 y3 t+ n
  21.         LED2 = 1;
    : R1 ?4 x& c; V4 Z
  22.         BEEP = 1;
    " I* y* B; x3 _3 ]( k- [! k
  23.         delay_ms(1000);
    6 m) s6 N7 n* B; {8 _
  24. }
复制代码

5 Z( H4 B5 u; L0 \. J- C
- g1 [& d/ _( X8 v
收藏 评论0 发布时间:2022-4-2 15:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版