I.MX6U 裸机开发9.BEEP蜂鸣器实验
I.MX6U 裸机开发9.BEEP蜂鸣器实验
- 一、原理图分析
- 1. 底板原理图
- 2. 核心板引脚原理图
- 3. 程序实现步骤
- 二、开发过程
- 1. 复制工程
- 2. 编写 beep 操作文件
- beep.h
- beep.c
- Makefile
- Main文件
一、原理图分析
1. 底板原理图
在 MINI 开发底板上,BEEP电路是这样的:
当BEEP为低的时候,三级管导通,蜂鸣器会叫。
当BEEP为高的时候,三级管截止,蜂鸣器不叫。
开发板上的蜂鸣器是有源蜂鸣器,内部有振荡源,通电即可发声。
2. 核心板引脚原理图
这里可以看到 , BEEP 接的引脚是SNVS_TAMPER1 引脚,该引脚通常用于安全非易失性存储器(SNVS)模块中的防篡改检测功能,本实验将其设置复用为GPIO口。
3. 程序实现步骤
- 初始化 SNVS_TAMPER1 引脚复用为GPIO
- 设置 SNVS_TAMPE1 的电气属性
- 初始化 GPIO 方向
- 控制 GPIO 输出
二、开发过程
1. 复制工程
从前一章08_ledc_bsp的基础上开发,复制前一章所有文件到新文件夹: 09_beep
2. 编写 beep 操作文件
beep.h
//
// Created by Xundh on 2024/11/14.
//
#ifndef LEARN_I_MX6U_BEEP_H
#define LEARN_I_MX6U_BEEP_H
#include "../../board/imx6u/inc/fsl_common.h"
#include "../../board/imx6u/inc/fsl_iomuxc.h"
#include "../../board/imx6u/inc/MCIMX6Y2.h"
void beep_init(void);
void beep_on(void);
void beep_off(void);
#endif //LEARN_I_MX6U_BEEP_H
beep.c
首先从参考手册找到 SNVS_TAMPER1 引脚复用信息:
可以看到 SNVS_TAMPER1 可以复用为GPIO5_IO01。
到 fsl_iomuxc.h 里找到寄存器的定义:
编写 GPIO 设置代码如下:
// 设置 SNVS_TAMPER1 复用为GPIO5_IO01
IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01, 0);
// 设置电气属性
IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01, 0x10b0);
设置GPIO 输出 :
代码如下:
// GPIO 初始化
GPIO5->GDIR |= (1 << 1); // 设置为输出
GPIO5->DR |= ~(1 << 1); // 关闭
Makefile
修改Makefile将其中的ledc改成beep。
Main文件
#include "inc/main.h"
#include "bsp_clk.h"
#include "bsp_delay.h"
#include "led.h"
#include "beep.h"
int main(void)
{
clk_enable(); /* 使能外设时钟 */
led_init(); /* 初始化LED */
beep_init(); /* 初始化蜂鸣器 */
/* 初始化LED */
/* 设置LED闪烁 */
while(1) {
led_on();
beep_on();
delay(1000);
led_off();
beep_off();
delay(1000);
}
return 0;
}
编译烧写程序运行即可。
本文代码开源在:
https://gitee.com/xundh/learn_i.mx6u/tree/master/09_beep