STM8单片机蜂鸣器功能使用方法

978 阅读2分钟

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

   STM8单片机自带有蜂鸣器的驱动功能,不过这个蜂鸣器指的是无源蜂鸣器,而不是常用的有源蜂鸣器。

   无源蜂鸣器,简单的理解就是内部没有供电电路,直接直流电,蜂鸣器是不会响的。必须用2-5KHZ的方波信号来驱动它,才可以使其鸣叫。

   有源蜂鸣器内部有供电电路,直接供直流电,蜂鸣器就会响。因为有源蜂鸣器内部有一个震荡源,所以只要有电压就可以响。因此有源蜂鸣器的价格要比无源蜂鸣器贵。

    STM8单片机BEEP引脚就是无源蜂鸣器的驱动引脚。这个引脚接一个三极管就可以直接驱动无源蜂鸣器了。

image.png

蜂鸣器引脚具体功能下:

image.png

要使能蜂鸣器需要三个步骤:

  1. 根据上图中描述的方法确定BEEPDIV[4:0]的值来校准LS时钟的频率;
  2. 通过写BEEP_CSR的 BEEPSEL[1:0] 位来选择1 kHz, 2 kHz 或 4 kHz 的输出频率;
  3. 置位BEEP_CSR的 BEEPEN 位来使能LS的时钟源;

需要操作的寄存器只有一个:

image.png

蜂鸣器驱动电路图如下:

image.png

下面通过代码实现:

#include "stm8s103f3p.h"
//BEEP 端口初始化
void GPIO_Init(void)
{
  PB_DDR|=0x20;         //PB5输出
  PB_CR1|=0x20;         //PB5推挽输出
}
main()
{
    GPIO_Init();
    BEEP_CSR=0x00;
    BEEP_CSR |= (1<<5);  //使能蜂鸣器功能
    BEEP_CSR |=0x0E;     //频率 00--1E 数字越小频率越高  f=128/(8*(XX+2)) XX为设置的值
   //BEEP_CSR=0x2e;      //0E 1K  06 2K  1E 500HZ
	 while(1)
	{        
      
	}
}

  蜂鸣器的操作很简单,首先将BEEP端口设置为普通IO输出口,然后将BEEP_CSR寄存器中的BEEPEN为设置为1,蜂鸣器功能就开启了。

  这时候蜂鸣器就可以响了,如果要改变蜂鸣器的驱动频率可以通过设置BEEP_CSR寄存器 BEEPSEL 位来改变频率,如果这个频率不是自己想要的,还可通过设置BEEPDIV位来改变分频数,从而将频率调整到自己想要的范围内。

  有些STM8系列的单片机要使用BEEP功能,还需要设置选项字。不过这里使用的是STM8S003单片机,并不需要设置设置选项字,如果需要设置选项字的话,可以直接在STVP下载软件中设置。

image.png

打开STVP烧写软件,切换到OPTION BYTE页面,然后通过AFR0---AFR7就可以设置选项字节了。