当前位置: 首页 > article >正文

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. 程序实现步骤

  1. 初始化 SNVS_TAMPER1 引脚复用为GPIO
  2. 设置 SNVS_TAMPE1 的电气属性
  3. 初始化 GPIO 方向
  4. 控制 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


http://www.kler.cn/a/394340.html

相关文章:

  • FastAPI 与 SQLModel 分页功能实现指南
  • 【C++】设计模式
  • 全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(实战训练三)
  • 聚类算法DBSCAN 改进总结
  • 【C++】B2066救援题目分析和解决讲解
  • 详解磁盘IO、网络IO、零拷贝IO、BIO、NIO、AIO、IO多路复用(select、poll、epoll)
  • leetcode LCR 068 搜索插入位置
  • C++ vector 容器
  • 推荐一款完全开源的多端仓库管理系统
  • 计算机视觉空域处理完整版——超详细图文解
  • Docker安装部署RabbitMQ
  • Android12的ANR解析
  • 防爆增安型电机与防爆无火花型电机的区别
  • Agent熔断:助力构建更健壮的IT监控系统
  • 【代码随想录】刷题记录(29)-用栈实现队列
  • Web性能优化:从基础到高级
  • 引入了JUnit框架 却报错找不到:java.lang.ClassNotFoundException
  • 爬虫如何解决短效代理被封的问题?
  • 基于Spring Boot的电子商务系统设计
  • 海外媒体发稿:聚焦摩洛哥世界新闻 Morocco World News
  • 数字图像处理(c++ opencv):图像复原与重建-常见的滤波方法--统计排序滤波器
  • 机器学习—模型选择和训练交叉验证测试集
  • 鸿蒙HarmonyOS 网络请求获取数据Http
  • 2024-11-12 问AI: [AI面试题] 您将如何设计一个人工智能系统来预测电信公司的客户流失?
  • SpringBoot-自定义注解,拦截器
  • Prometheus面试内容整理-Exporters