历史上的今天
返回首页

历史上的今天

今天是:2025年03月31日(星期一)

正在发生

2020年03月31日 | STM32F407ZGT6学习之蜂鸣器

2020-03-31 来源:eefocus

工程代码:https://pan.baidu.com/s/1Qlfg1_br0tN6yy0fcDwCjg,密码:fhh2


(一)简介


这一小节,学习的是驱动蜂鸣器,因为使用的是有源蜂鸣器(关于有源和无源蜂鸣器请看这里:https://zhidao.baidu.com/question/13384059.html),只需要给蜂鸣器供电,蜂鸣器即可发声;需要使用STM32的定时器,给蜂鸣器定时,使蜂鸣器响一秒停一秒。


(二)程序的编写


1. 引脚驱动蜂鸣器       


在我的工程中,使用STM32的PF8接口连接蜂鸣器,为了让PF8引脚输出高电平,我们需要配置PF8引脚。


首先我们需要打开PF8的时钟电源,GPIO的所有时钟开启都在“RCC_AHB1ENR”寄存器中

开启时钟之后,就是对GPIO口进行配置,下图是GPIO的配置寄存器图,往下是对各寄存器的具体介绍

① GPIO的端口配置寄存器(GPIOx_MODER)


从图中可以看出,GPIOx的“x”代表当前要配置的是哪组GPIO的引脚,每组GPIO有16个引脚,而寄存器共32位,每两位控制一个引脚的配置。

② GPIO  端口输出类型寄存器 (GPIOx_OTYPER) (x = A..I)       


这个寄存器用于配置端口输出的类型,分别有推挽模式和开漏模式


推挽模式:输出1时引脚输出高电平,输出0时引脚输出低电平


开漏模式:输出1时引脚不接地,输出0时引脚接地


注意:因为开漏模式输出1时只是引脚不接地,此时引脚处于高电平或者低电平,取决于引脚连接的电路是高电平还是低电平,如果需要在开漏模式下,输出1时引脚输出高电平,需要外界上拉,把引脚的电压拉高。

③ GPIO  端口输出速度寄存器 (GPIOx_OSPEEDR) (x = A..I/)


关于GPIO的速度配置,这里指的是输出模式下,每秒最大的输出速度,举个例子:如果我配置为2MHz的输出模式,然后引脚交替输出高电平和低电平,此时引脚每秒只能翻转2M的次数。

④ GPIO  端口上拉/ 下拉寄存器 (GPIOx_PUPDR) (x = A..I/)


这个引脚是在输入模式下使用的,相当于给引脚加了一个弱上拉或者弱下拉(关于上下拉知识,可以查看这里:https://blog.csdn.net/z735640642/article/details/78043018)


上拉:让电路默认情况处于高电平


下拉:让电路默认情况处于低电平

⑤ GPIO  端口输入数据寄存器 (GPIOx_IDR) (x = A..I)


在输入模式下,用于读取引脚的输入情况,通过这个寄存器,可以读取此时引脚的输入是处于哪种电平。


⑥ GPIO  端口输出数据寄存器 (GPIOx_ODR) (x = A..I)


在输出模式下,这个寄存器用于配置引脚的高低电平的输出


⑦ GPIO  端口置位/ 复位寄存器 (GPIOx_BSRR) (x = A..I)


这个寄存器用于输出模式下,配置引脚的输出电平,通知给寄存器的0~15位赋值,可以设置对应的16个引脚输出高电平;通知给寄存器的16~31位赋值,可以设置对应的16个引脚输出低电平。


看到这里可能有小伙伴有疑问了,为什么有了“GPIOx_ODR”了,还要弄一个“GPIOx_BSRR”的寄存器呢,两个寄存器的功能不是一样的吗?


这里可以参考:https://blog.csdn.net/drivermonkey/article/details/17062381,看完你就明白了。

⑧ GPIO端口配置锁定寄存器 (GPIOx_LCKR) (x = A..I)


这个寄存器用于锁定引脚的配置,当特定的写序列写入到LCKK位时,将会锁定LCK0~LCK15中值位1的引脚的配置。

⑨ GPIO复用功能低位寄存器 (GPIOx_AFRL) (x = A..I)


这个寄存器用于配置GPIO的复用功能,复用就是使片内外设的复用功能连接到引脚,关于复用更深的应用,以后使用到的时候再说明。


⑩ GPIO复用功能高位寄存器 (GPIOx_AFRH) (x = A..I)


同上,不同在于“GPIOx_AFRL”配置的是引脚0~7的复用功能,“GPIOx_AFRH”配置的是引脚8~15的复用功能。


到此,引脚的配置介绍结束。


因为我们要驱动蜂鸣器发声,从图中可以看出,只有PF8输出高电平,三极管Q3就能导通,蜂鸣器 “Speaker”供电开始工作。

2.定时器的配置


① 系统时钟


要学习定时器,需要了解STM32的时钟体系,关于STM32的时钟体系,可以参考:https://blog.csdn.net/qq_29344757/article/details/73479924


由图可知,系统时钟(SYSCLK 168MHz)经过“APBx PRESC”分频后输出到定时器时钟。


而在STM32的手册中有介绍,AHB 域的最大频率为 168 MHz。高速 APB2 域的最大允许频率为 84 MHz。低速 APB1 域的最大允许频率为 42 MHz。所以系统时钟到APB2的时钟需要经过4分频,168 / 4 = 42MHz给到APB2。根据图中的判断条件,APB2时钟到定时器时钟时需要2倍频,42 * 2 = 84MHz,所以定时器时钟是84MHz。

② 定时器配置 


定时器分为基本定时器和其他类型的定时器,由于使用最基本的延时功能,只需要基本定时器就可以实现,基本定时器有TIM6、TIM7两个。


基本定时器的框图如下:

基本定时器的寄存器主要是以下几个:

① TIM6  和 TIM7  控制寄存器 1 (TIMx_CR1)


这个寄存器控制主要的定时器配置。

② TIM6  和 TIM7  控制寄存器 2 (TIMx_CR2) 和 TIM6  和 TIM7 DMA/ 中断使能寄存器 (TIMx_DIER)先不说


③ TIM6  和 TIM7  状态寄存器 (TIMx_SR),这个寄存器用于查看定时是否结束。


④ TIM6  和 TIM7  事件生成寄存器 (TIMx_EGR),就是一个软件控制的更新源。


⑤ TIM6  和 TIM7  计数器 (TIMx_CNT),当前定时器的计数的值。


⑥ TIM6  和 TIM7  预分频器 (TIMx_PSC),定时器的预分频值。


⑦ TIM6  和 TIM7  自动重载寄存器 (TIMx_ARR),定时器的重载值。


到此,寄存器介绍结束。


由于我们需要使用1s的定时,而定时器时钟为84MHz = 84 * 1000 * 1000,我们设置预分频值为83(实际设置为84 - 1),设置定时器值为999(1000 - 1),这样定时器每次计数完成就是1ms。那么,我们就得到了一个1ms定时的定时器。

推荐阅读

史海拾趣

GC Electronics公司的发展小趣事
如发现传感器、报警装置或电路中的其他部件损坏,应及时更换,以确保报警电路的可靠性。
HBH-Microwave公司的发展小趣事

随着技术的不断成熟,HBH-Microwave开始将目光投向更为广阔的航空航天市场。公司凭借其高质量的微波组件和子系统,成功参与了多个国际知名的航天项目,如卫星通信系统和运载火箭的微波子系统。这些项目的成功实施,不仅展示了HBH在极端环境下的产品可靠性,也进一步拓宽了公司的业务范围和市场影响力。

峰岹(Fortior Tech )公司的发展小趣事

HBH-Microwave的故事始于对高性能微波组件的执着追求。在成立初期,公司便聚焦于设计并制造能够满足严苛应用需求的微波放大器。通过不断的技术研发,HBH成功推出了HA6013型号的高功率放大器,该产品在17.0至18.0 GHz频段内表现出色,迅速在通信和雷达领域获得认可。这一创新不仅巩固了HBH在微波技术领域的地位,也为后续产品的开发奠定了坚实的技术基础。

EMBEST公司的发展小趣事

随着国内市场的逐步稳固,EMBEST开始寻求更广阔的发展空间。XXXX年,EMBEST的开发工具成功进入国际市场,并获得了多家芯片公司的认可,成为他们的第三方工具伙伴。这一举措不仅提升了EMBEST的品牌影响力,也为其带来了更多的商业机会。EMBEST凭借过硬的技术实力和优质的服务,逐渐在国际市场上崭露头角。

北京人民电器厂公司的发展小趣事

近年来,随着新能源产业的快速发展,北京人民电器紧跟时代步伐,在新能源领域取得了重要突破。公司推出的真安型零飞弧直流断路器,解决了直流低压系统中长期存在的外喷电弧问题,为新能源行业的发展提供了重要的技术支持。这一创新成果不仅得到了行业的广泛认可,也为公司在新能源领域的发展打开了新的局面。

这五个故事只是北京人民电器在电子行业发展历程中的一部分,但它们足以展现出公司在技术创新、产品应用、生产自动化、人才队伍建设以及新能源领域发展等方面的努力和成就。这些故事不仅记录了北京人民电器的成长轨迹,也见证了中国电子行业的蓬勃发展。

Catalyst / ON Semiconductor公司的发展小趣事

随着技术的不断进步,Catalyst / ON Semiconductor公司逐渐在半导体领域取得了重要的技术突破。公司投入大量资源进行研发,成功开发出了一系列高性能、低功耗的半导体产品,这些产品在市场上受到了广泛的欢迎。这些技术突破不仅提升了公司的市场竞争力,也为整个电子行业的发展注入了新的活力。

问答坊 | AI 解惑

我很急需MSP430的英文论文

各位老师,我很急。很需要MSP430的英文论文,翻译的话我可以自己,只求英文的原文论文。因为在我们学校的外文数据库,但很不理想。GOOGLE上搜了很长时间,但内容都比较杂,也不理想。急谢谢。这是我的邮箱:hy19841984163@163.com07.6.3…

查看全部问答>

求教各位大侠 看看这段ISA接口程序为什么不对

求教各位大侠 帮帮小菜 看看这段ISA接口程序为什么不对 本人的问题是,assign led_out=wr_data[11:0]; 从PC机发送过来的一个16位确定数data, led显示的 得到的是个不确定数; 如果不用iocs16=(addr[9:4]==basic_addr[9:4])?1\'b0:1\'bz 这段收 ...…

查看全部问答>

PCI32 IP CORE调试

在Xilinx PCI IPcore生成的user design里会在translate的时候出错, 错误内容:ucf中找不到相关的IP核的实例。 修改:synthesis-Properties-advanced-keep hierarchy-soft/yes 即可通过Implement。…

查看全部问答>

ASM共晶焊分析

replyreload += \',\' + 380437;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

WinCE打开工程失败

{FB373486-0E6E-4BB6-8BF2-1F92EACA1468}…

查看全部问答>

pic单片机 文件系统的创建txt的问题

我用pic单片编的文件系统,创建txt文件,并往里写一个字符串,参考的是震南znfat的51程序,但是现在创建的文件不能在电脑上显示,显示的是零kb的一个不能删除的文件,请问怎么回事呢…

查看全部问答>

大家谁对现在(凯思昊鹏)比较熟悉

大家帮帮忙顶顶哈,明天去那里面试。…

查看全部问答>

请大家给点建议

我之前一直从事window上应用程序的开发,现在打算往底层发展一点,学习一下driver的开发,因为现在一直在做windows的东西,所以想从windows的driver开始学起,请问大家 1 学习windows的驱动开发前景(钱途^^)如何? 2 我想开始先看Programming t ...…

查看全部问答>

evc中如何修改工程名称

我想把一个已存在的evc工程的名称 而不影响工程的正常运行该怎么办? 谢谢!…

查看全部问答>