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

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

[复制链接]
STMCU小助手 发布时间:2022-4-2 15:00
01. 蜂鸣器简介+ s, f: s* Z  D! @' q$ {( e
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。6 F; c5 j. @- w, [& u( a) B

! U6 x. c8 s  t3 r' ^: p探索者 STM32F4 开发板板载的蜂鸣器是电磁式的有源蜂鸣器,如图 7.1.1 所示:
1 E1 L* I. S6 G4 z0 U" o' [3 c) O; ]  u! L, y
C3OKI2)3LIDWS[HME(]}H16.png
# P+ Y3 p+ K$ J" y) R- J
9 k. T3 `8 v3 e6 T  l  M* v这里的有源不是指电源的“源”,而是指有没有自带震荡电路,有源蜂鸣器自带了震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供 2~5Khz 左右的方波驱动,才能发声。* o. s' J! d) x4 r$ t8 j
; z, o1 H* I% W4 U$ S2 o
02. 硬件设计% R% i1 d: o# c/ u7 @
蜂鸣器在硬件上也是直接连接好了的,不需要经过任何设置,直接编写代码就可以了。蜂鸣器的驱动信号连接在 STM32F4 的 PF8 上。
9 V0 \/ Q3 V3 N& m/ _' u7 J3 T8 ^' C# D7 W. K) B! @5 J
52)353YM[OIL]N@DTOY9ETO.png
' U' ?1 E5 S) l5 Y, H# o
2 `. [- E6 ]3 l( Q! n6 n. F- P图中我们用到一个 NPN 三极管(S8050)来驱动蜂鸣器,R61 主要用于防止蜂鸣器的误发声。当 PF.8 输出高电平的时候,蜂鸣器将发声,当 PF.8 输出低电平的时候,蜂鸣器停止发声。, F6 _0 b( G- j, w5 S  o" t
. T* Q+ m0 m, ]7 G2 w; j
03. 程序示例一
# i1 o, u% O$ r- K7 o: C8 E蜂鸣器不叫( J5 ?6 X( F. P$ J6 q  c

3 }; x$ G/ [$ a7 ?  \2 x- H" xbeep.h文件6 X  x7 J1 d1 O* {" G! u
; G" z0 Q0 X0 _) g1 B1 s& O, N* c
  1. #ifndef __BEEP_H__
    ( h4 g& `2 L1 c$ F- H. r
  2. #define __BEEP_H__5 r  r- X/ |, j5 }" ^! L3 k
  3. ' v' j& y8 _6 k4 x/ O4 g) `* s2 [- ]
  4. 5 U9 r; E( L: q2 I- B; v% z
  5. #include "sys.h"
    3 x( _# o# o2 |* q% ^9 B: d( q) o
  6.   l& I: Z& U" @* t4 }( _
  7. 8 Y0 E+ X( I; o: r5 {/ X
  8. //蜂鸣器初始化
    9 I+ D6 U( j/ W2 g
  9. void BEEP_Init(void);2 [; ~4 }# r1 F+ Z( R' y2 P; R1 _
  10. ) \2 K+ y7 }. s" K( `2 u$ `/ x
  11. #define BEEP PFout(8)
    0 B9 w3 W7 ]* X5 A# P9 W

  12. - S* i" L6 T# i# x+ E& O
  13. #endif /*__BEEP_H__*/
复制代码
0 m% e9 j9 C1 B" |3 G. \
beep.c文件
+ ^0 y" B2 }0 O! n! Q7 [
# c; z7 j9 f6 M  \: ?/ J3 C/ l
  1. #include "beep.h": h, r. {6 q0 k' A$ @9 ~/ T% ^2 h  a

  2. ! E2 O9 G) m6 f/ n
  3. //蜂鸣器初始化
    " `; c( K* _. M
  4. void BEEP_Init(void)
    6 V# _3 n% M7 {) g5 q" O
  5. {
    : Q  R9 Q( K( P$ ]
  6.         GPIO_InitTypeDef GPIO_InitStruct;
    3 [! {& h# Z3 B- t6 d1 q) R- f
  7.         - U- ]5 x& [+ v1 o( ]
  8.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
    ! Z8 p2 ^" P/ V7 [
  9.         6 r7 D9 v( M" @! f* T8 X
  10.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;/ o+ S' M, D4 V. i1 M7 e
  11.         , _) I; l0 f6 O- l2 `
  12.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;1 j2 t" `4 Q2 v" i! B( W) a
  13.         
    4 r4 ?" T" j6 {  W
  14.         GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    " @0 Y$ J1 p4 m
  15.         
    * j8 n( M- x3 F+ Z
  16.         GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
    4 q0 Y9 o+ g( j- I1 E
  17.         
    % k! L5 q4 C$ `! S; J$ o1 D- X7 B
  18.         //使能时钟
    & e- t6 q: y9 O! [, x
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
    5 k9 _+ J6 ]7 h. D1 y+ v6 O
  20.         
    ' {  n3 S3 a% w. w) s( \
  21.         //初始化GPIO. h( B; y: V' ?8 S5 k. j4 b
  22.         GPIO_Init(GPIOF, &GPIO_InitStruct);
    : c' _' U7 V4 z0 v7 v& v& m
  23. ) |+ H- u, n3 h4 \! w  r% d
  24.         //设置默认低电平
    2 K2 A2 U' C; F/ U8 W7 ]0 v
  25.         GPIO_ResetBits(GPIOF, GPIO_Pin_8);
    ! b' y: k# G' V, t2 D& b) r
  26. }
复制代码

7 a* ?1 A6 {' f7 r& `main.c文件3 h( I$ d# r3 F9 t; n( D9 D

/ e  ]+ a) ~" H- [9 c$ U
  1. #include "stm32f4xx.h"$ \3 q/ u/ ?# R3 i3 _
  2. " X  V! Z6 a5 j2 a8 a4 g
  3. #include "delay.h"* K2 A/ l5 S# o& |
  4. #include "led.h"# r* v- {" k4 ?. v8 ^. Z3 _. E: _
  5. #include "beep.h"
    4 y8 ?! f: c. |# v7 z
  6. * F5 }! O0 H) Q8 k. q- t- K5 b

  7. - V& W* G/ V. y0 N& _" Z, m* n
  8. int main(void)
    7 d4 r1 u; v# M
  9. {
    9 R! {/ k$ V; o3 @3 j: r
  10.         //初始化9 k3 x# u; d/ C# O  H, I
  11.         delay_init(168);
    - y) d$ |9 F: {' D8 o7 Q
  12.         LED_Init();
    * y- ^, `  ?  g# w. S# p
  13.         BEEP_Init();
    # n3 s: z: I% v3 C2 K2 A3 R0 A
  14.         2 b' N9 r# a6 C. ]' ~. o
  15.         //蜂鸣器不叫
    3 U4 t" E4 R  T/ |2 V! Q. Y
  16.         GPIO_ResetBits(GPIOF, GPIO_Pin_8);
    + J2 `% `: @3 y) B/ o& z
  17. }
复制代码

0 V; j) k' E4 H: M  A04. 程序示例二
1 T2 V, f% _- o* n2 a3 w" ?. l
蜂鸣器叫8 G/ F! o# O, n# _3 }  j/ X
+ b. E8 x" K6 ]9 R
main.c文件
. C( J2 x+ Q/ V% U0 t" Q6 @0 D1 {: g/ t" T5 S' h
  1. #include "stm32f4xx.h"- \5 J# V- Y* k- H5 k( x
  2. # a) d. G. l; q: `" E+ w3 s+ n' d! x
  3. #include "delay.h"
    ! ^  S# j, X0 V1 X7 ~' ?
  4. #include "led.h"0 A* E& |4 g' |* A" l: K" x( z, e
  5. #include "beep.h"% y: i$ p  O0 |  B* d$ a7 U
  6. / c1 L$ J/ V2 b. Q! K! F2 S) v

  7. ; i2 Q9 X0 Y' i5 w
  8. int main(void)
    6 n. m: c6 Q& u
  9. {
    8 q5 _1 `9 A+ k/ x1 L3 [
  10.         //初始化
    5 V, o/ i+ y3 o* D
  11.         delay_init(168);2 X# @( O  ^" G; J) q$ e- W9 T
  12.         LED_Init();
    " f5 \. y$ `- R6 v. J/ I0 ?" ^# j
  13.         BEEP_Init();" G% F9 n9 D% o% |$ p
  14. ) n' K% R  S4 ?7 {
  15.         GPIO_SetBits(GPIOF, GPIO_Pin_8);0 P) u* w7 ], w/ L$ h4 c% O
  16. }
复制代码
- Z2 d7 N1 d9 B
05. 程序实例三+ D3 A# {% s' d" b
蜂鸣器循环叫1秒 不叫1秒
7 _# l# ~4 }3 T+ V2 w( K5 w8 ]# J: e# _4 ~: o% S
main.c
# L% ~/ k. D0 j, E5 m
' I: [* }2 t! s
  1. #include "stm32f4xx.h"6 n, S/ j! ?% i9 [: S
  2. . B# c+ A" o0 }& i1 C. K/ K
  3. #include "delay.h"" ?' z) l# v& u9 j# K- T: S3 q
  4. #include "led.h"
    4 F+ P# {# p2 _4 K
  5. #include "beep.h"
    ) _; \; d- f: C/ A% A* |- X

  6. 5 n' w$ n+ f9 S/ G3 c( K& X. \1 |

  7. . l" u" R8 A# ^
  8. int main(void)0 @" d* k' }* }- H; b( f" {, `
  9. {
    $ d7 P0 h& K9 b- F& A( Z9 o" W1 L* Z
  10.         //初始化
    2 C+ |3 `1 M( q% G, }( _1 x
  11.         delay_init(168);
    ' J/ W1 I) d/ X  `) v
  12.         LED_Init();. i" n! J" E% m( K& x4 K
  13.         BEEP_Init();
    : d+ ^2 @( Y$ A' c) q5 z- P8 Y
  14.         
    ; j, A+ ?7 x0 f/ ?7 H  V  o
  15.         //蜂鸣器不叫( Z$ W3 I' e' o9 W5 r
  16.         GPIO_ResetBits(GPIOF, GPIO_Pin_8);
    & J0 M0 V, m7 L* ^$ v
  17.         GPIO_ResetBits(GPIOF, GPIO_Pin_9);        
    & S  F/ r1 C/ M5 b. W
  18.         delay_ms(1000);
    ' u: U' Z9 N) {' X
  19.         
    # g. P1 |7 D0 l8 c6 j* T
  20.         //蜂鸣器叫
    - i# |! r( m% m0 U, K' B+ z
  21.         GPIO_SetBits(GPIOF, GPIO_Pin_8);$ Q( K  Q1 p0 X5 X# N. A
  22.         GPIO_SetBits(GPIOF, GPIO_Pin_9);
    4 S, R/ I# z# T% Q5 |
  23.         delay_ms(1000);
    ; {' p& w. `) \& X  ?
  24.         2 Y; z4 q9 r) L9 m
  25. }
    & Q1 K; p$ N  v# Z7 `8 \
复制代码
, r- t9 P9 I, k8 u( ]$ V
7 E# I! T+ H: ~. {9 R9 W
位带操作
6 k- b( y6 }$ T" T* o$ {+ b& f
9 V: f! m  n8 w/ fmain.c文件* t8 ]0 d3 C. E6 v2 v6 m/ A' V

* S- P% g* B0 }( b
  1. #include "stm32f4xx.h"0 ]+ W8 x* G* D& }

  2. 9 S8 I6 J. A. M+ n
  3. #include "delay.h"9 U& f/ d# B. `8 r# c5 u) Y$ X" l3 L  ~
  4. #include "led.h"
      \: R3 j4 O0 L* w& \# ~
  5. #include "beep.h"9 O+ c7 t# l; s& B3 m
  6. * q/ C3 x8 U8 v( y( I8 p7 }4 G
  7.   y9 u3 c6 E6 `$ O# E( H8 Q
  8. int main(void)7 O. C/ a7 ^' b5 o% Y" L
  9. {4 V; }, [" w  v9 b. G
  10.         //初始化5 C! D5 Q  [0 `! f4 o
  11.         delay_init(168);# ^( r) m% k8 i; U: ]
  12.         LED_Init();
    ! i9 K( Y9 Z$ Q2 X3 @8 g, V# s
  13.         BEEP_Init();, z' m7 v8 A2 H& S5 m
  14.         ' c# h, I. J# P. o
  15.         //蜂鸣器不叫
    2 q) y/ b9 M) R  I  a( f' p
  16.         LED2 = 0;; b+ O  c2 d1 c5 S# B
  17.         BEEP = 0;5 u* s' W5 ~8 I- m, h' \
  18.         delay_ms(1000);* c  R% P9 N: T/ u$ s' C8 t5 J
  19.         4 _/ h6 Z% s3 ~9 _- F* F6 k9 X( A
  20.         //蜂鸣器叫
    + r# v# Z0 P6 ^, G  E" Z: H
  21.         LED2 = 1;3 L* @0 i$ e4 U% r5 \/ M
  22.         BEEP = 1;
    4 s: Y) i9 X% u! O
  23.         delay_ms(1000);
    , @- h( P- ^+ `8 d/ [5 d
  24. }
复制代码
& s" @7 o/ y- ~5 M
8 V+ Z9 A2 n; @6 o& W: h
收藏 评论0 发布时间:2022-4-2 15:00

举报

0个回答

所属标签

相似分享

官网相关资源

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