
蜂鸣器实验 本章,我们将通过另外一个例子继续讲述STM32H7的IO口作为输出的使用,不同的是本章讲的不是用IO口直接驱动器件,而是通过三极管间接驱动。我们将利用一个IO口来控制板载的有源蜂鸣器。 14.1 蜂鸣器简介 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。 MiniPRO STM32H750开发板板载的蜂鸣器是电磁式的有源蜂鸣器,如图14.1.1所示: ![]() 图14.1.1 有源蜂鸣器 这里的有源不是指电源的 “源”,而是指有没有自带震荡电路,有源蜂鸣器自带了震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供2~5Khz左右的方波驱动,才能发声。 上一章,我们利用STM32的IO口直接驱动RGB灯,本章的蜂鸣器,我们能否直接用STM32的IO口驱动呢?让我们来分析一下:STM32H7的单个IO最大可以提供25mA电流(来自数据手册),而蜂鸣器的驱动电流是30mA左右,两者十分相近,但是全盘考虑,STM32H7整个芯片的电流,最大也就150mA,如果用IO口直接驱动蜂鸣器,其他地方用电就得省着点了,所以我们不用STM32H7的IO直接驱动蜂鸣器,而是通过三极管扩流后再驱动蜂鸣器,这样STM32H7的IO只需要提供不到1mA的电流就足够了。 IO口使用虽然简单,但是和外部电路的匹配设计,还是要十分讲究的,考虑越多,设计就越可靠,可能出现的问题也就越少。 14.2 硬件设计 1.例程功能 蜂鸣器每隔300ms响或者停一次。LED0每隔300ms亮或者灭一次。LED0亮的时候蜂鸣器不叫,而LED0熄灭的时候,蜂鸣器叫。 2.硬件资源 1)RGB灯 LEDR : LED0 - PB4(红) 2)蜂鸣器 BEEP(PE4) 3.原理图 蜂鸣器在硬件上是直接连接好了的,不需要经过任何设置,直接编写代码就可以了。蜂鸣器的驱动信号连接在STM32H7的PE4上。如图14.2.1所示: ![]() 图14.2.1 蜂鸣器与STM32H7连接原理图 图中我们用到一个NPN三极管(S8050)来驱动蜂鸣器,R30主要用于防止蜂鸣器的误发声。驱动信号通过R29和R30间的电压获得,芯片上电时默认电平为低电平,故上电时蜂鸣器不会直接响起。当PE4输出高电平的时候,蜂鸣器将发声,当PE4输出低电平的时候,蜂鸣器停止发声。 14.3 程序设计 本实验我们只是用到GPIO外设输出功能,关于HAL库的GPIO的API函数请看跑马灯实验的介绍。下面我们直接分析本实验的程序流程图。 14.3.1 程序流程图 ![]() 图14.3.1.1 蜂鸣器实验程序流程图 14.3.2 程序解析 1.蜂鸣器驱动代码 这里我们只讲解核心代码,详细的源码请大家参考光盘本实验对应源码。蜂鸣器(BEEP)驱动源码包括两个文件:beep.c和beep.h。 下面我们先解析beep.h的程序,我们把它分两部分功能进行讲解。 由硬件设计小节,我们知道驱动蜂鸣器的三极管在硬件上连接到PE4,我们做了下面的引脚定义。
对蜂鸣器的引脚设置为中速上拉的推挽输出。最后关闭关闭蜂鸣器,防止没有操作就响了。 2. main.c代码 在main.c里面编写如下代码:
首先是调用系统级别的初始化:sys_cache_enable函数使能I-Cache和D-Cache,然后初始化 HAL库、系统时钟和延时函数。接下来,调用led_init来初始化RGB灯,调用beep_init函数初始化蜂鸣器。最后在无限循环里面实现LED0和蜂鸣器间隔300ms交替闪烁和打开关闭一次。 14.4 下载验证 下载完之后,可以看到LED0亮的时候蜂鸣器不叫,而LED0熄灭的时候,蜂鸣器叫(因为他们的有效信号相反)。间隔为0.3秒左右,符合预期设计。 至此,本章的学习就结束了。通过本章,我们进一步学习IO作为输出的使用方法,同时巩固了前面知识的学习。希望大家在开发板上实际验证一下,从而加深印象。 ———————————————— 版权声明:正点原子 |
《STM32H7R/S信息安全线上课程》学习笔记+5.0 安全存储
《STM32H7R/S信息安全线上课程》学习笔记+4.0 密码学引擎与随机数发生器
《STM32H7R/S信息安全线上课程》学习笔记+3.0 时域隔离,片内与片外存储器保护
《STM32H7R/S信息安全线上课程》学习笔记+2.2 如何使用DA功能(certificate模式)
《STM32H7R/S信息安全线上课程》学习笔记
《STM32H7R/S信息安全线上课程》学习笔记+2.1 如何使用DA功能(password模式)
NUCLEO-H723ZG开发板试用 ——串口点灯测试
经验分享 | STM32H7 EXTI + SPI +DMA 双缓冲应用演示
【经验分享】STM32H7时钟
拷打cubemx【003】——找不到的芯片包