【嵌入式Linux】17-裸机-蜂鸣器实验

此笔记由个人整理

塞上苍鹰_fly

课程来自:正点原子_手把手教你学Linux

一、硬件原理图分析

  • 底板蜂鸣器原理图
    • beep引脚输出低电平时蜂鸣器响
    • beep引脚输出高电平时蜂鸣器不响

image-20201209145131672

  • 蜂鸣器与芯片连接

image-20201209145257700

  • 与芯片的连接对应引脚

image-20201209145409056

  • 蜂鸣器对应的引脚为:SNVS_TAMPER1复用为GPIO05_IO01

二、实验程序编写

  • 创建bsp文件下的beep蜂鸣器驱动
  • 修改beep.h函数
#ifndef __BEEP_H
#define __BEEP_H

#include "fsl_common.h"
#include "fsl_iomuxc.h"
#include "MCIMX6Y2.h"
#include "cc.h"

/*函数声明*/
void beep_init(void);           /*  BEEP初始化*/
void beep_switch(int status);   /*  BEEP控制函数*/

#endif // !__BEEP_H

  • 修改beep.c函数
#include "bsp_beep.h"

/*BEEP初始化*/
void beep_init(void)
{
    /*复用为GPIO5_IO01*/
    IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,0);

    /*设置电气属性*/
    IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,0x10B0);

    /*GPIO初始化*/
    GPIO5->GDIR |= (1<<1);  /*  设置为输出模式*/
    GPIO5->DR  &= ~(1<<1);  /*  默认关闭*/
}

/*蜂鸣器控制函数*/
void beep_switch(int status)
{
    if(status == ON)
        GPIO5->DR &= ~(1<<1);
    else if(status == OFF)
        GPIO5->DR |= (1<<1);        
}
  • 改写main.c函数
#include "bsp_led.h"
#include "bsp_clk.h"
#include "bsp_beep.h"
#include "bsp_delay.h"
#include "main.h"
/*主函数*/
int main(void)
{
    /*使能外设时钟*/
    clk_enable();
    /*初始化led*/
    led_init();
    /*初始化beep*/
    beep_init();
    /*设置led闪烁*/
    while(1)
    {
        /*led打开的同时启动蜂鸣器*/
        led_switch(LED0,ON);
        beep_switch(ON);
        delay(500);

        /*led关闭的同时启动蜂鸣器*/
        led_switch(LED0,OFF);
        beep_switch(OFF);
        delay(500);
    }
    return 0;
}
  • 改写makefile

    • 2行修改工程名

    • 12行处添加头文件路径

    • 18行处添加源文件路径

CROSS_COMPILE 	?= arm-linux-gnueabihf-
TARGET		  	?= beep

CC			  	:= $(CROSS_COMPILE)gcc
LD			  	:= $(CROSS_COMPILE)ld
OBJCOPY			:= $(CROSS_COMPILE)objcopy
OBJDUMP			:= $(CROSS_COMPILE)objdump

INCUDIRS		:=  imx6ul \
					bsp/clk \
					bsp/led \
					bsp/beep\
					bsp/delay

SRCDIRS			:=  project \
					bsp/clk \
					bsp/led \
					bsp/beep\
					bsp/delay

INCLUDE			:=	$(patsubst %, -I %, $(INCUDIRS))

SFLES			:=	$(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.s))
CFLES			:=	$(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))

SFLENDIR		:=	$(notdir	$(SFLES))
CFLENDIR		:=	$(notdir	$(CFLES))

SOBJS			:=	$(patsubst %, obj/%, $(SFLENDIR:.s=.o))
COBJS			:=	$(patsubst %, obj/%, $(CFLENDIR:.c=.o))

OBJS			:=	$(SOBJS) $(COBJS)

VPATH			:=	$(SRCDIRS)

.PHONY: clean

$(TARGET).bin : $(OBJS)
	$(LD) -Timx6u.lds -o $(TARGET).elf $^
	$(OBJCOPY) -O binary -S $(TARGET).elf	$@
	$(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis

$(SOBJS) : obj/%.o : %.s
	$(CC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $<

$(COBJS) : obj/%.o : %.c
	$(CC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $<

clean:
	rm -rf $(TARGET).bin $(TARGET).dis $(TARGET).elf $(OBJS)

三、编译验证

  • 编译链接

image-20201209160230441

  • 插入SD卡进行下载
  • 将SD卡插入开发板,LED灯亮的时候蜂鸣器响,LED灯灭的时候蜂鸣器不响

  • 最终文件夹

image-20201209160549585

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值