六.蜂鸣器驱动
今天按照点亮LED的流程,来试下蜂鸣器的驱动编写。
硬件简介
查底板原理图
开发板的蜂鸣器是有源的,这个有源指的是振荡源,这种蜂鸣器只需要给个激励源就可以发声,而对应的无源是需要给个方波来驱动的。蜂鸣器接在PNP三极管集电极上,三极管作为开关使用时有个简单的方法判定其是否打开:看三极管上箭头所在方向的二极管,只要二极管正向导通,那么三极管上下就能导通。对于这个电路,也就是当BEEP为0时,蜂鸣器会工作,反之停止。
然后就要查看BEEP对应的是哪个IO脚了,还是在底板原理图上搜索关键字BEEP,看看哪个脚
就是这个SNVS_TAMPER1。在手册里搜一下!
这个管脚和GPIO5_IO1是复用的。
软件编写
蜂鸣器的驱动就在bsp文件夹内新建个beep文件夹,里面还是两个文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#ifndef __BSP_BEEP_H #include "imx6ul.h" void beep_init(void); void beep_switch(int status); #endif
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
// 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); } }
整个过程还是初始化复用、电气属性初始化、IO方向等初始化。定义了个切换开关的函数,在主函数里导入头文件,就可以调用这个函数了
当然在编译的时候要在Makefile里 添加这个新文件夹的路径(bsp/beep)。
执行make命令,烧录程序。有了前面LED的基础,这个蜂鸣器试验轻松搞定!