驱动蜂鸣器与鸡翅LED是一样的,对于I.MX6ULL
来说只需要对指定的引脚输出高或者低电平即可。
打开I.MX6ULL
开发板原理图,找到蜂鸣器接的引脚
可以看出,蜂鸣器正极接的是三极管,负极接地,想让蜂鸣器工作就需要让三极管导通。这是一个PNP
型三极管,基极
接的是BEEP,想让三极管导通蜂鸣器工作需要给BEEP一个低电平。
再看一下BEEP具体接的是I.MX6ULL
的哪一个管脚
从图中可以看出,BEEP具体接的是SNVS TAMPER1
从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_IO01
的DR
寄存器,通过写入低(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并烧写到开发板即可听到蜂鸣器工作了。
全部0条评论
快来发表一下你的评论吧 !