其他分享
首页 > 其他分享> > 六.蜂鸣器驱动

六.蜂鸣器驱动

作者:互联网

今天按照点亮LED的流程,来试下蜂鸣器的驱动编写。

硬件简介

查底板原理图

 

开发板的蜂鸣器是有源的,这个有源指的是振荡源,这种蜂鸣器只需要给个激励源就可以发声,而对应的无源是需要给个方波来驱动的。蜂鸣器接在PNP三极管集电极上,三极管作为开关使用时有个简单的方法判定其是否打开:看三极管上箭头所在方向的二极管,只要二极管正向导通,那么三极管上下就能导通。对于这个电路,也就是当BEEP为0时,蜂鸣器会工作,反之停止。

然后就要查看BEEP对应的是哪个IO脚了,还是在底板原理图上搜索关键字BEEP,看看哪个脚

 

 就是这个SNVS_TAMPER1。在手册里搜一下!

 

 这个管脚和GPIO5_IO1是复用的。

软件编写

 蜂鸣器的驱动就在bsp文件夹内新建个beep文件夹,里面还是两个文件

#ifndef __BSP_BEEP_H
#include "imx6ul.h"

void beep_init(void);
void beep_switch(int status);
#endif
bsp_beep.h
// SNVS_TAMPER1复用为GPIO5_IO1

#include "bsp_beep.h"

void beep_init(void)
{   //GPIO复用初始化,复用为GPIO5_IO01
    IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,0); 
    //电气属性设置
    IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,0x10B0);
    //设置为输出
    GPIO5->GDIR |=(1<<1);
    //输出高电平,关闭蜂鸣器
    GPIO5->DR   |=(1<<1);
}
// 蜂鸣器控制

void beep_switch(int status)
{
    if(status == ON)
    {   //IO设置为0
        GPIO5->DR &=~(1<<1);
    }
    else
    {   //IO设置为1
        GPIO5->DR |=(1<<1);
    }
}
bsp_beep.c

整个过程还是初始化复用、电气属性初始化、IO方向等初始化。定义了个切换开关的函数,在主函数里导入头文件,就可以调用这个函数了

 

 

当然在编译的时候要在Makefile里 添加这个新文件夹的路径(bsp/beep)。

 

执行make命令,烧录程序。有了前面LED的基础,这个蜂鸣器试验轻松搞定!

标签:蜂鸣器,GPIO5,void,bsp,SNVS,beep,驱动
来源: https://www.cnblogs.com/yinsedeyinse/p/15754843.html