驱动蜂鸣器与鸡翅LED是一样的,对于I.MX6ULL
来说只需要对指定的引脚输出高或者低电平即可。
找到蜂鸣器使用的引脚
打开I.MX6ULL
开发板原理图,找到蜂鸣器接的引脚
可以看出,蜂鸣器正极接的是三极管,负极接地,想让蜂鸣器工作就需要让三极管导通。这是一个PNP
型三极管,基极
接的是BEEP,想让三极管导通蜂鸣器工作需要给BEEP一个低电平。
再看一下BEEP具体接的是I.MX6ULL
的哪一个管脚
从图中可以看出,BEEP具体接的是SNVS TAMPER1
初始化BEEP对应引用
从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并烧写到开发板即可听到蜂鸣器工作了。
-
led
+关注
关注
240文章
23129浏览量
658303 -
蜂鸣器
+关注
关注
12文章
889浏览量
45860 -
IMX6ULL
+关注
关注
3文章
16浏览量
4019
发布评论请先 登录
相关推荐
评论