一、原理图

结合原理图,查阅手册可以得知beep引脚接GPIO5_IO01引脚,置低电平时导通,蜂鸣器响
二、步骤
这里我们直接调用STM32的固件库来完成让蜂鸣器发声的操作
需要用到以下两个头文件
Matlab
#include "MCIMX6Y2.h"
#include "fsl_iomuxc.h"
和我们操作LED灯的步骤基本相同
步骤:
1.使能所有的外设时钟
Matlab
void enable_clock(void)
{
CCM->CCGR0 = 0xFFFFFFFF;
CCM->CCGR1 = 0xFFFFFFFF;
CCM->CCGR2 = 0xFFFFFFFF;
CCM->CCGR3 = 0xFFFFFFFF;
CCM->CCGR4 = 0xFFFFFFFF;
CCM->CCGR5 = 0xFFFFFFFF;
CCM->CCGR6 = 0xFFFFFFFF;
}
2.配置引脚复用功能
由于我们调用了固件库,直接使用IOMUXC_SetPinMux函数
3.配置电气属性
调用IOMUXC_SetPinConfig函数,传默认值(0x10B0)
4.配置引脚为输出模式
将GPIO5的GDIR寄存器bit1置1
Matlab
//配置GPIO5_IO01引脚复用功能
IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01, 0);
//配置引脚电气属性
IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01, 0x10B0);
//配置引脚为输出模式
GPIO5->GDIR |= (1 << 1);
5.控制蜂鸣器发声
打开:GPIO5的DR寄存器bit1清0
关闭:GPIO5的DR寄存器bit1置1
翻转:GPIO5的DR寄存器bit1 按位异或 1
Matlab
//蜂鸣器响
void beep_on(void)
{
GPIO5->DR &= ~(1 << 1);
}
//蜂鸣器关
void beep_off(void)
{
GPIO5->DR |= (1 << 1);
}
//蜂鸣器翻转
void beep_nor(void)
{
GPIO5->DR ^= (1 << 1);
}
6.编译
链接脚本:
Matlab
SECTIONS
{
. = 0x87800000;
.text :
{
obj/start.o
*(.text)
}
.rodata ALIGN(4) : {*(.rodata*)}
.data ALIGN(4) : {*(.data)}
. = ALIGN(4);
_bss_start = .;
.bss ALIGN(4) : {*(.bss) *(COMMON)}
_bss_end = .;
}
先设置整个程序的起始地址,从0x87800000地址开始
下来需链接
.text段:代码段,存放代码、指令,是程序运行入口
.rodata段:只读数据段,存放如字符串常量,const修饰的全局变量等
.data段:数据段,存放已初始化的全局变量和静态变量
.bss段:未初始化的数据段,存放未初始化的全局变量和静态变量
这四个段的代码:

Makefile:
Matlab
target = beep
cross_compiler = arm-linux-gnueabihf-
cc = $(cross_compiler)gcc
ld = $(cross_compiler)ld
objcopy = $(cross_compiler)objcopy
objdump = $(cross_compiler)objdump
incdirs = bsp imx6ull
srcdirs = bsp project
include = $(patsubst %, -I%, $(incdirs))
cfiles = $(foreach dir, $(srcdirs), $(wildcard $(dir)/*.c))
sfiles = $(foreach dir, $(srcdirs), $(wildcard $(dir)/*.S))
cfilenodir = $(notdir $(cfiles))
sfilenodir = $(notdir $(sfiles))
cobjs = $(patsubst %, obj/%, $(cfilenodir:.c=.o))
sobjs = $(patsubst %, obj/%, $(sfilenodir:.S=.o))
objs = $(cobjs) $(sobjs)
VPATH = $(srcdirs)
$(target).bin : $(objs)
$(ld) -Timx6ull.lds -o$(target).elf $^
$(objcopy) -O binary -S -g $(target).elf $@
$(objdump) -D $(target).elf > $(target).dis
$(sobjs) : obj/%.o : %.S
@mkdir -p obj
$(cc) -Wall -nostdlib -c $(include) -o $@ $<
$(cobjs) : obj/%.o : %.c
@mkdir -p obj
$(cc) -Wall -nostdlib -c $(include) -o $@ $<
.PHONY : clean
clean:
rm -rf $(objs) $(target).elf $(target).bin $(target).dis
7.运行程序
编译成功后,使用./imxdownload beep.bin /dev/sdb 将程序烧录到SD卡中