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

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

[复制链接]
STMCU小助手 发布时间:2022-4-2 15:00
01. 蜂鸣器简介
# ~1 i5 K# ?( E; Z2 y蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
, h- R% |( H: r5 W6 f- z# ]  d, B8 c
探索者 STM32F4 开发板板载的蜂鸣器是电磁式的有源蜂鸣器,如图 7.1.1 所示:
; F% f+ f. ]+ L) N" Y4 d; s* }, _# j3 q+ C- F; ?  M" o
C3OKI2)3LIDWS[HME(]}H16.png , z# Z6 R6 F1 e1 ?/ M6 e+ G8 B" C

* N8 N+ L  r) a( {+ K; W/ [, r这里的有源不是指电源的“源”,而是指有没有自带震荡电路,有源蜂鸣器自带了震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供 2~5Khz 左右的方波驱动,才能发声。7 I, j) N% {/ x( ]* O  c
* }. _. K: Q2 }7 Z6 K* {
02. 硬件设计
" V8 \3 {  r5 c3 }# r6 e( c蜂鸣器在硬件上也是直接连接好了的,不需要经过任何设置,直接编写代码就可以了。蜂鸣器的驱动信号连接在 STM32F4 的 PF8 上。
) q9 y4 x! T2 w5 A) r$ @5 J! h/ c$ E8 S, X8 [
52)353YM[OIL]N@DTOY9ETO.png 1 @: l/ T7 g; K$ ]4 U  K5 s
( ]; A3 B0 M! d& w" M: H
图中我们用到一个 NPN 三极管(S8050)来驱动蜂鸣器,R61 主要用于防止蜂鸣器的误发声。当 PF.8 输出高电平的时候,蜂鸣器将发声,当 PF.8 输出低电平的时候,蜂鸣器停止发声。
1 @6 y/ a& c# q% U: C7 T# X) p! c
  ?: P& ^2 |6 v* a4 f2 ^3 `: D; u03. 程序示例一" g$ r' z) r  K' P0 _0 I5 }
蜂鸣器不叫3 i6 R6 e5 c: v9 w( m

( p; u' _0 r8 ]5 Zbeep.h文件" B: J) H0 Z+ ]! f; V! Z
" E) B) L% X$ a9 q2 A9 {
  1. #ifndef __BEEP_H__  X9 `( T6 @/ k5 Z2 H, X$ t' [1 D
  2. #define __BEEP_H__
    % k* @4 Q- ~3 M6 i+ O9 k8 J  I4 Z

  3. ) i) q/ W3 i  e4 P! p* t1 y0 i# m

  4. - Q! ?& Q5 ^4 D+ p
  5. #include "sys.h"' m) [+ i) t- g8 x, o. ?0 q
  6. - d- o! W$ k8 M
  7. " |) F" |3 o) @' T  f& l/ c+ ?
  8. //蜂鸣器初始化& Z" Y4 a% O7 v
  9. void BEEP_Init(void);' Q+ t9 a1 d. m
  10. + F0 D( I1 k% b% ?! F0 [: i( W
  11. #define BEEP PFout(8)
    % A5 {/ j: B8 Z/ {

  12. - f8 O, w' z' Z+ \1 G, t# s
  13. #endif /*__BEEP_H__*/
复制代码

& b) R. a: P" q) a5 g3 Bbeep.c文件
; F0 v! s7 m2 o# h
9 B) t# A( f* w/ g( @2 y" i
  1. #include "beep.h"
    " \) [$ x! ]  |  x7 a
  2. 0 r7 Y8 _" W: c$ c! C- J% N
  3. //蜂鸣器初始化
    & s8 M4 ^. b" ~$ n4 B8 L2 [
  4. void BEEP_Init(void)
    6 G, I1 D3 q; o; `) ~
  5. {
    0 u- G# t  O- M  B3 @3 S* K
  6.         GPIO_InitTypeDef GPIO_InitStruct;
    $ k! g" }0 M2 ]% j" V% v
  7.         # h  M1 [. l- S& }
  8.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
    - y! G! I2 @, H+ F& I2 h
  9.         5 I5 P( S* J: u/ j6 G( O; O- y% x
  10.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;2 L* `  ^0 ?/ i0 y7 H( T& l! _
  11.         
    1 n% L9 q1 s! {4 \
  12.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;9 s2 E! w+ G6 v( P
  13.         
    ) F' @  y1 t- C0 a( X
  14.         GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    / d4 U; k7 L8 Z; [
  15.         
    $ x; H5 x  ^" L+ r5 Q! \
  16.         GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;3 R0 T/ J5 i7 ]4 ]8 l+ N6 c
  17.         
    ; t& a' J9 a4 C
  18.         //使能时钟3 D7 f$ S0 N. e2 L$ V- M. Q7 B
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);, l8 e9 F* _5 S. G
  20.         
    & X  B- f* \+ \' b
  21.         //初始化GPIO
    ! c7 W+ S/ m1 f# k* Z
  22.         GPIO_Init(GPIOF, &GPIO_InitStruct);
    ) O# R9 _3 K8 e$ e

  23. # S0 h- i5 c: c* ]
  24.         //设置默认低电平# i6 o; r* k$ N) n7 }
  25.         GPIO_ResetBits(GPIOF, GPIO_Pin_8);* c/ Z  D) Q: x7 c
  26. }
复制代码

. P. m/ n8 Z. G( U; Xmain.c文件# B$ W- b& S/ ]% R+ w/ [; p

1 Q# K. ^! B7 A+ S- N9 r
  1. #include "stm32f4xx.h"
    ! }/ ~- s. P6 Q3 u- v/ t* y
  2. * e* o" `! S+ ^# A7 o
  3. #include "delay.h"
    ( v  f+ U/ p. _' K: q
  4. #include "led.h"" P9 W& m. J( u) T8 X* w, U
  5. #include "beep.h"
    5 z4 U& c( V9 s( a. B
  6. 1 Y/ J1 {1 l2 j9 S/ p; J8 z
  7. " z& x2 \( h' }4 {4 @
  8. int main(void)
    8 k' T* X/ _0 F* P9 p( C2 \
  9. {
    7 C' n( q- y1 `* |$ S9 B8 m
  10.         //初始化
    & q" i0 f- P. E2 _. l
  11.         delay_init(168);: I) ~  n. h' P
  12.         LED_Init();! }) Z- P8 J) y5 b1 D0 o3 P' O3 ^
  13.         BEEP_Init();
    7 b/ `( ^' P( v1 F7 r7 g' A/ G
  14.         
    7 Q' u5 P4 z1 X+ S; |
  15.         //蜂鸣器不叫
    : s2 u+ o5 i. M9 w
  16.         GPIO_ResetBits(GPIOF, GPIO_Pin_8);+ {( Q! {: t  n# u1 V: L- ]- B, w( I
  17. }
复制代码

" V8 a4 M1 V8 @+ L! R( `04. 程序示例二
  r* G* H4 F" U1 K# F  n! s
蜂鸣器叫' u# o7 N* K7 S7 D- Y

8 n+ ~3 b  F1 i7 v+ emain.c文件- U8 o1 \) p% U2 h) M7 p

) }8 m8 p% \/ g! b
  1. #include "stm32f4xx.h"1 S4 q7 h7 p  {1 i

  2. 9 \  G9 Q8 t0 M2 k
  3. #include "delay.h"1 N! j  M5 c2 z, R) k, _( Q
  4. #include "led.h"6 B. o% l7 J" Y$ j! a
  5. #include "beep.h"" Z  n9 f7 s1 ^
  6. ! X& ~: o  t: E1 \4 D
  7. ; L0 w# `# D/ _/ W% t  x: a
  8. int main(void)
    " \% J6 x7 g( A! V. U) g; C0 r* s
  9. {
    3 c2 A% o. m  v- Q& k+ z7 P9 D
  10.         //初始化
    # o6 H; Q0 g6 j/ @
  11.         delay_init(168);
    4 }) K$ `. k5 o; t
  12.         LED_Init();, X1 B0 R  Q0 a. m8 D
  13.         BEEP_Init();7 o# g1 x. {% |

  14. 6 U0 D! [$ C! u$ g
  15.         GPIO_SetBits(GPIOF, GPIO_Pin_8);
    % K& d7 e: r& t
  16. }
复制代码
, U0 e4 v+ s; }3 Q' g5 N' M
05. 程序实例三. l! T& N, i# C$ ^; C8 r
蜂鸣器循环叫1秒 不叫1秒
; U/ B+ }+ h: ~9 q
* v+ i+ w! s% o7 G- Imain.c/ G' t; B4 t  B5 e# N5 B$ {

' W; o! \# g$ X4 K, [' e. x" l
  1. #include "stm32f4xx.h"
    5 h& z0 |* L' \' _' `1 x) g

  2. : K2 G  ?$ n) E$ C' u
  3. #include "delay.h"0 n/ P  F0 W% H; K- b! Y
  4. #include "led.h"7 N5 C+ D; C5 N3 W! Z, o* T
  5. #include "beep.h". J% m6 Q3 ]5 `# e, T# R
  6. 4 ~. |0 C  A. x1 y8 W3 @7 ]
  7. 7 p: U0 u: Q4 N1 T6 V2 p0 o# K) \! S
  8. int main(void)) P( ~1 A. t5 v) _
  9. {
    0 ^( ]* f! W3 r: H
  10.         //初始化
    % `8 @  s  j- w, w& ?: C
  11.         delay_init(168);
    $ X9 |3 G: D2 }0 S" y( x
  12.         LED_Init();
    9 ^: a4 F: d  U3 R* Q
  13.         BEEP_Init();
    1 K' C- u0 o. `4 ~  c8 k
  14.         
    / ^/ w( A- {6 Q6 B% C. s3 o9 G; y$ y
  15.         //蜂鸣器不叫
    7 V9 R; _$ j' W! i  X' C
  16.         GPIO_ResetBits(GPIOF, GPIO_Pin_8);5 T  M+ B6 M1 G$ P6 Q
  17.         GPIO_ResetBits(GPIOF, GPIO_Pin_9);        # C" Z1 t! F& S. ~
  18.         delay_ms(1000);
    3 q# M$ _5 F% J
  19.         ) j0 T3 m" P& J- k. [+ L
  20.         //蜂鸣器叫
    ' L# |: w& l' y3 ^% f& O' q5 V
  21.         GPIO_SetBits(GPIOF, GPIO_Pin_8);
    & ?& D3 k" O2 Q) j' f. }8 A5 t
  22.         GPIO_SetBits(GPIOF, GPIO_Pin_9);. f$ ]9 X& M, [+ y, f
  23.         delay_ms(1000);/ }+ S: }, Z7 O9 A
  24.         
    6 ~1 j! b# ~: ]- v- X# C9 n
  25. }
    , y/ n: \4 h& }  O
复制代码
5 _% D0 m) s& q7 X* N7 w3 X# b! M
& v" ]5 Y& F& `5 Q7 x
位带操作
  M+ ]0 x- Z5 f1 ?/ H
/ h4 M0 M7 W% [! o* E3 y4 h7 b) H( J3 dmain.c文件
% w/ v/ _% o. @% W  w
' V0 A; t; H. ], \9 o+ w/ {
  1. #include "stm32f4xx.h"
    & q, b8 N1 \# E0 `

  2. 2 @, j8 Q. K2 I# d
  3. #include "delay.h"
    ! R7 X) W1 n) b7 n$ N7 G1 W
  4. #include "led.h"
    % @/ l* [! f8 s# C* U1 S9 I
  5. #include "beep.h"
    7 o# H% V3 I: ~
  6. , v$ J& p& R3 L+ S- ~
  7. ( I3 e' j1 Z! r- D* K8 j2 h
  8. int main(void)
    4 b! G  k8 l# }0 ~1 k& Y$ Y" M% F
  9. {# X7 A+ y7 U: m+ r8 K+ E" U  L3 Z
  10.         //初始化
    % h8 r5 u0 [2 C. t& C# x
  11.         delay_init(168);
    / g. B, Q% B- `% F( Z  Z1 n
  12.         LED_Init();8 O3 y+ A$ S( d" S+ H9 Z& P
  13.         BEEP_Init();3 s5 \0 H# L4 T% M6 X  b- `5 C
  14.         
    + r/ F% ^- c0 S  ?
  15.         //蜂鸣器不叫
    / ^, D* e& F7 P& _6 l: c) ?! z2 `
  16.         LED2 = 0;. F5 V/ e5 O. G/ F
  17.         BEEP = 0;; d* r, W3 _! _4 ?5 ~: V8 k
  18.         delay_ms(1000);
    " T8 q& D0 D: v9 d
  19.         ) y! ^" h! d7 p2 a( h: W
  20.         //蜂鸣器叫0 W  A; [' o/ }
  21.         LED2 = 1;
    # l# z- H+ T, L' |. ^: E' I
  22.         BEEP = 1;
    % j$ ~" f/ U: G
  23.         delay_ms(1000);. C3 F, m1 G, m
  24. }
复制代码
3 {% W& R3 W  R0 F! @+ V; L9 Y$ ?7 Y
9 u- X) @$ v: u- h2 e4 L7 K! Y6 g! |
赞 收藏 评论0 发布时间:2022-4-2 15:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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