蜂鸣器

蜂鸣器是一种一体化结构的电子讯响器,採用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

源不是指电源的“源”,而是指有没有自带震荡电路,有源蜂鸣器自带了震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供 2~5Khz 左右的方波驱动,才干发声。

STM32
的单个 IO 最大能够提供 25mA 电流(来自数据手冊),而蜂鸣器的驱动电流是 30mA 左右,两者十分相近,可是全盘考虑,STM32 整个芯片的电流,最大也就 150mA,假设用 IO 口直接驱动蜂鸣器,其它地方用电就得省着点了…所以,我们不用 STM32 的 IO 直接驱动蜂鸣器,而是通过三极管扩流后再驱动蜂鸣器,这样 STM32 的 IO 仅仅须要提供不到 1mA 的电流就足够了。

蜂鸣器在硬件上也是直接连接好了的,不须要经过不论什么设置,直接编写代码就能够了。蜂鸣器的驱动信号连接在 STM32 的 PB8 上。

void BEEP_Init(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能GPIOBport时钟
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //BEEP-->PB.8 port配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure); //依据參数初始化GPIOB.8
  GPIO_ResetBits(GPIOB,GPIO_Pin_8);//输出0,关闭蜂鸣器输出
}

这段代码 仅包括 1 个函数:void BEEP_Init(void),该函数的作用就是使能 PORTB 的时钟,同一时候配置 PB8 为推挽输出。

Program Size: Code=4592 RO-data=336 RW-data=52 ZI-data=1836  

FromELF: creating hex file...

这里我们解释一下,编译结果里面的几个数据的意义:
Code:表示程序所占用 FLASH 的大小(FLASH)。
RO-data:即 Read Only-data,表示程序定义的常量,如 const 类型(FLASH)。
RW-data:即 Read Write-data,表示已被初始化的全局变量(SRAM)
ZI-data:即 Zero Init-data,表示未被初始化的全局变量(SRAM)

有了这个就能够知道你当前使用的 flash 和 sram 大小了,所以,一定要注意的是程序的大小不是.hex 文件的大小,而是编译后的 Code 和 RO-data 之和。

原文地址:https://www.cnblogs.com/hrhguanli/p/4010900.html