蜂鸣器的驱动实验

描述

驱动蜂鸣器与鸡翅LED是一样的,对于I.MX6ULL来说只需要对指定的引脚输出高或者低电平即可。

找到蜂鸣器使用的引脚

打开I.MX6ULL开发板原理图,找到蜂鸣器接的引脚led

可以看出,蜂鸣器正极接的是三极管,负极接地,想让蜂鸣器工作就需要让三极管导通。这是一个PNP型三极管,基极接的是BEEP,想让三极管导通蜂鸣器工作需要给BEEP一个低电平。

再看一下BEEP具体接的是I.MX6ULL的哪一个管脚

led

从图中可以看出,BEEP具体接的是SNVS TAMPER1

初始化BEEP对应引用

led

I.MX6ULL的参考手册里面的32.5.4小节中可以找到关于SNVS TAMPER1寄存器,现在需要将他复用成通用GPIO,通过查看手机复用之后是GPIO5_IO01,所以在初始化蜂鸣器GPIO时也就是将SNVS TAMPER1寄存器复用成GPIO5_IO01:

IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01, 0);

同时设置GPIO5_IO01的电气属性为:

IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01, 0x10B0);

设置GPIO5_IO01的输入输出:

/// 设置GPIO5的第1位即IO01为输出,默认电平为低电平
PIO_Init(GPIO5, 1, (GPIO_CONFIG){GPIO_DIRECTION_OUTPUT, 0});

控制蜂鸣器

控制GPIO5_IO01DR寄存器,通过写入低(0)电平来打开蜂鸣器,写入高电平(1)来关闭蜂鸣器。

void Beep_On()
{
    GPIO_SetValue(GPIO5, 1, 0);
}
void Beep_Off()
{
    GPIO_SetValue(GPIO5, 1, 1);
}

验证

main文件中对应的开LED灯的位置打开蜂鸣器,关灯的地方关闭蜂鸣器。

#include 
#include "delay.h"
#include "clk.h"
#include "led.h"
#include "beep.h"

int main(void)
{
    Clk_Init();
    Led_Init();
    Beep_Init();
    while (1)
    {
        Delay(500);
        Led_On();
        Beep_On();
        Delay(500);
        Led_Off();
        Beep_Off();
    }

    return 0;
}

最后,通过Makefie编译成bee.bin并烧写到开发板即可听到蜂鸣器工作了。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分