zoukankan      html  css  js  c++  java
  • 六.蜂鸣器驱动

    今天按照点亮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的基础,这个蜂鸣器试验轻松搞定!

  • 相关阅读:
    Linux下C程序插入执行shell脚本
    #ifdef预编译相关用法
    LAMP开发之环境搭建(2014.12.7在ubuntu下)
    Qt在VS2010的安装与配置
    vs2010配备boost编程环境
    Ubuntu虚拟机与Window、Arm的通信
    大小端测试程序
    Ubuntu安装google Gtest
    设计模式之单例模式
    设计模式之原型模式
  • 原文地址:https://www.cnblogs.com/yinsedeyinse/p/15754843.html
Copyright © 2011-2022 走看看