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

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

[复制链接]
STMCU小助手 发布时间:2022-6-11 21:56
01. 蜂鸣器简介% q( z, M# O6 q4 v" d1 T' k, n* a
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。% j2 ]' y# s& P" f9 I

5 Y- _. T9 [8 K; o( M: [探索者 STM32F4 开发板板载的蜂鸣器是电磁式的有源蜂鸣器,如图 7.1.1 所示:4 m# N7 C, y9 r. x) O

# C) n& V- K* s. L, G4 x VNZ59C98UK)3([H5GX6U10X.png
! t' b$ M% r* f/ P
; q/ z. ]4 U5 _这里的有源不是指电源的“源”,而是指有没有自带震荡电路,有源蜂鸣器自带了震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供 2~5Khz 左右的方波驱动,才能发声。
+ m0 [9 s) |4 B9 L& f/ {+ U
+ Y" K) H2 l/ Y% I% E" @) c02. 硬件设计/ N. L' j: l$ D
蜂鸣器在硬件上也是直接连接好了的,不需要经过任何设置,直接编写代码就可以了。蜂鸣器的驱动信号连接在 STM32F4 的 PF8 上。" c$ z  _- l- i4 U
9 p* C: t9 b( x
MNFU$)6A}X74DR{~EU}]KLR.png ! W' i& j4 s3 a6 m

# d/ i3 d% s1 n图中我们用到一个 NPN 三极管(S8050)来驱动蜂鸣器,R61 主要用于防止蜂鸣器的误发声。当 PF.8 输出高电平的时候,蜂鸣器将发声,当 PF.8 输出低电平的时候,蜂鸣器停止发声。1 p. e+ `! D# ]1 C

8 c3 L9 s8 c7 X- T& `03. 程序示例一
$ q! l; W, m$ f9 B- [9 L- p蜂鸣器不叫  _3 \# o" ?3 U' ~+ L

% c* ?+ U. \" L! Abeep.h文件
* X4 f) f" w# @# N# d6 V. {! }$ G% Y, m
  1. #ifndef __BEEP_H__$ U; L. Y8 ~4 N  ~5 w
  2. #define __BEEP_H__
    ' E. t& J1 O! C% X8 o5 G0 b2 c' H
  3. % @. `, G: }8 L, v) J; Q
  4. $ P, o3 [9 G" m$ Y" L
  5. #include "sys.h"7 J4 T* F  c& a

  6. + A' o% C3 V' m$ E) W
  7. : x. e& i6 I) f# h2 `4 V$ w
  8. //蜂鸣器初始化
    9 r; u1 ]/ \) Y- r  G
  9. void BEEP_Init(void);+ B5 J6 r! {" Q) E  t

  10. , a* n2 @5 D  h3 i" s; S
  11. #define BEEP PFout(8)" X3 `$ ]1 j  `: ?9 v
  12. & F' \" H- I4 q7 P, G# o
  13. #endif /*__BEEP_H__*/
复制代码

) K. S2 Q' ~$ \* Y3 ?/ ]. w( X" z- v! f1 o# t# u, T, E
beep.c文件0 t2 f/ e2 S+ Q! x! o; V

9 l2 I3 j: G0 i! i5 o* C
  1. #include "beep.h"
    $ d9 L3 x9 Y, G6 `  D/ y( x* m
  2. ) G) w% T. x  Q/ A9 D3 }
  3. //蜂鸣器初始化  f3 b) V2 m! n: o
  4. void BEEP_Init(void)! }& M% Y+ g! I$ s
  5. {1 G( R- \8 b; f8 ~. H4 |
  6.         GPIO_InitTypeDef GPIO_InitStruct;
    0 I3 ~3 ~; T" ], h' ^3 W
  7.         & v* ~4 J) C. G3 E8 E& ^5 O0 n: o
  8.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
    & w: o, ~7 A' T0 F* q
  9.         7 ], k4 a2 h( K2 N
  10.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;) i. H0 x& A  `- t( W3 k
  11.         3 P) h: g) J6 `2 A0 b4 }
  12.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;% N" B* u5 b( @7 n5 G
  13.         , o% |. x& Z8 F; J+ N, s
  14.         GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    % J/ O/ T2 _% _
  15.         
    , V5 v, P" {# W& U' A8 a
  16.         GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;! c+ `" l4 W" P5 f
  17.         
    " H) @& t1 t: i' B2 Q7 W
  18.         //使能时钟; r. t# ]. w* J: o. P' N2 T& f
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
    : D  Y; ?- `0 l& K' K8 t
  20.         ( d+ p* {+ V! o
  21.         //初始化GPIO
    ! @% a2 I$ u% d: x" l+ T* s
  22.         GPIO_Init(GPIOF, &GPIO_InitStruct);" _& V) o3 c% x! c3 O

  23. ; E" Y/ e1 u1 M: H/ k3 M2 o/ \0 D
  24.         //设置默认低电平
    1 t' _% h9 }# {! g" E
  25.         GPIO_ResetBits(GPIOF, GPIO_Pin_8);6 M3 b0 L. A. D8 M
  26. }
复制代码
" {# ?( z9 ]7 m

/ Y+ O, I( w3 C7 W( a  T% Omain.c文件& |# N1 v2 l) G! O9 G

: f, U  w& _" r! |2 L
  1. #include "stm32f4xx.h"8 k/ W( [: c1 f- s0 s- B: o1 P

  2. ) R. H  V6 @& k& n. c7 {
  3. #include "delay.h"
    ' s3 C: A- y3 j/ m* x
  4. #include "led.h"
    ) z, U; w- [: ?
  5. #include "beep.h"7 ?+ ]0 I' X. N: ]2 S
  6. . U0 b0 Z% o5 k% ]6 k9 e
  7. " D- k6 r6 X1 C) l, X, K3 M
  8. int main(void)( k# ?  P" H( a
  9. {
    3 ^5 \" h. ?* y# z
  10.         //初始化
    . T# h1 ]1 ~$ a3 }. p
  11.         delay_init(168);
    / p* w2 {8 \$ O& \
  12.         LED_Init();4 h5 e. J9 F( T2 G" E; Y$ k
  13.         BEEP_Init();
    : J! ^- @7 u# u+ o$ s, u0 O8 L
  14.         
    9 ], n, g, B* N) G7 M) K
  15.         //蜂鸣器不叫
    # @6 o) g* g- S, p
  16.         GPIO_ResetBits(GPIOF, GPIO_Pin_8);
    % n( {# l' r" Z
  17. }7 S6 u/ t  ~( J* o9 c0 e4 |
复制代码
8 ]$ y; M+ m% k- }4 b$ x# M2 z
04. 程序示例二
) B+ N2 j' g* L+ r蜂鸣器叫) G& Q; C4 {; @+ X; o- j8 t8 l  J0 A

' g/ \1 u1 P/ ]2 O" {) F, pmain.c文件
7 S. s5 t: Z% \1 [
' \+ K& ]2 `1 K  k3 @- R8 P
  1. #include "stm32f4xx.h"# b8 b% Z/ T7 Z/ W4 v" Z' c; J1 B
  2. 2 L6 T- v! n# H& A
  3. #include "delay.h"
    ) a5 s7 S; ~+ i7 n- Z
  4. #include "led.h"% ]1 Z# J  q8 u0 t" m* a' o3 ^. `
  5. #include "beep.h"! N& H2 L' h) q& ~2 A
  6.   ]; o. n1 C5 C# O7 H, V" z! o2 D

  7. ! m1 n3 ~+ m' X& T
  8. int main(void)) |; N5 S8 E) ^2 U% q/ |. w
  9. {1 E3 P2 d  H3 `1 T" O% r
  10.         //初始化
    9 D+ D; U9 B7 f& m4 n. U' w
  11.         delay_init(168);
    4 K, V3 X' w5 i+ D% c2 O  e4 ?5 }$ S
  12.         LED_Init();6 q/ L* s% J+ S  d
  13.         BEEP_Init();
    / F" ?3 P4 |0 f4 a

  14. % ~' P8 I! n  l( [9 F
  15.         GPIO_SetBits(GPIOF, GPIO_Pin_8);
      q7 A, C* Y/ K9 Z4 o& z( C
  16. }
复制代码
0 u" w7 ~2 z7 i+ j  x
05. 程序实例三8 ^. v+ _3 F! K
蜂鸣器循环叫1秒 不叫1秒5 v) p9 Z& f: U2 |/ h
) W' g" c5 j$ {
main.c" a0 N( \2 U, [3 G- v
& o* Z7 F$ S5 O
  1. #include "stm32f4xx.h", r' r" w3 \2 P% J# g9 S% p# J
  2. ; s- I8 G- B9 }: ?
  3. #include "delay.h"
    + r, B& s0 C: I2 I- r
  4. #include "led.h"2 d2 @0 T" J3 N5 n$ D0 w: T/ X
  5. #include "beep.h"
    ! ?. Z' d. P$ y  a

  6. ! L1 m) Q% ]0 p5 n: V; s
  7. . P# H/ [4 E- N: }8 }* _# ?5 C
  8. int main(void): v7 F# t; I. V! D# P  d1 x+ c9 Q
  9. {
    0 J/ a. @, R3 P- a' V" _" A+ p0 i
  10.         //初始化* w4 C; \; z& U8 ^
  11.         delay_init(168);
    0 M3 R4 f0 H8 v! p# u2 g9 g1 s7 ]
  12.         LED_Init();) R" V% ~# N  D
  13.         BEEP_Init();; Y- _9 N5 w+ O2 I# m" k5 }
  14.         
    4 o, x( E  y* z8 q- n" h
  15.         //蜂鸣器不叫7 j  B0 M# a. P5 O% g
  16.         GPIO_ResetBits(GPIOF, GPIO_Pin_8);2 J* D- r! x2 K7 g* h1 b
  17.         GPIO_ResetBits(GPIOF, GPIO_Pin_9);        / ]' m$ I% t0 [) P: c
  18.         delay_ms(1000);, @) y2 o2 S8 n. I+ [! t4 J6 k8 O
  19.         
    " T( @9 Z' R& w- {+ p
  20.         //蜂鸣器叫
    6 a/ j% g! S  ?
  21.         GPIO_SetBits(GPIOF, GPIO_Pin_8);
    # u5 e* E- ~8 I5 z" _9 l1 D* _+ O9 [
  22.         GPIO_SetBits(GPIOF, GPIO_Pin_9);
    ! A2 C9 L  ^. I, K0 e
  23.         delay_ms(1000);
    4 Q7 E. i( v+ P7 T& Y
  24.         
    4 a: Y& V2 z: Z' y8 {
  25. }
复制代码
1 _' X" x7 f0 I/ p
位带操作' }  a4 T& R. ~2 Q' d. c
7 D- \" e$ ^, `  A
main.c文件
9 x7 n3 P" V8 X) C) Z
+ H9 |) \: ?# J; B  v) y
  1. #include "stm32f4xx.h"' u( `+ Y; g6 B" E5 D' n/ n
  2. & k7 L4 D# J/ ]( s4 W6 M6 N+ ^
  3. #include "delay.h"
    ( e6 D/ W. j- P8 H  J/ n
  4. #include "led.h"4 y0 P, V: t, `+ o+ i; O( j5 m$ k2 c
  5. #include "beep.h"
    9 b9 Z% w; q9 a: ?9 B' l' L

  6. 5 `0 r" |/ }, f0 W: A: B/ Z  v% ~, ^
  7. - s9 m) u4 a- x1 w! R- z/ ^
  8. int main(void)
    8 E! |6 c. Z9 d  }4 q
  9. {
    4 E8 p8 k# V$ |6 p( L6 E
  10.         //初始化# H' E: m" z5 @; @" J
  11.         delay_init(168);% E7 E8 e: x5 e) |9 e, K
  12.         LED_Init();
    8 }2 w6 S, N: h# h, E' v
  13.         BEEP_Init();  ^6 D; E: S- [; D4 v/ C0 ]) T
  14.         
    . |8 x+ k7 d# n, p' F
  15.         //蜂鸣器不叫
    ' u/ E2 p4 Y) i! n( T
  16.         LED2 = 0;% N" P+ _' l8 i" }. H8 ^2 W
  17.         BEEP = 0;
    7 V4 b( u* L4 ?& d3 i+ E% y
  18.         delay_ms(1000);- W  B# ?8 w7 V6 j6 C- d
  19.         
    : s* x# G/ R' d+ s8 H
  20.         //蜂鸣器叫' l; _6 O) O, z8 ?
  21.         LED2 = 1;
    4 Q; Z( u4 h* P* ^2 }- g
  22.         BEEP = 1;
      i/ x; V0 S. x1 y
  23.         delay_ms(1000);
    9 H) C% O/ j1 N, [- M
  24. }
    ; J" n2 y) N: q* L
  25. 5 X! f  H5 W& G  J9 p, }1 ?2 f
复制代码
* _" g1 Z' x1 i5 ^
赞 收藏 评论0 发布时间:2022-6-11 21:56

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版