I.MX6ULL的蜂鸣器实验-GPIO输出实验

news2024/12/25 9:03:10

系列文章目录

I.MX6ULL的蜂鸣器实验


I.MX6ULL的蜂鸣器实验

  • 系列文章目录
  • 一、前言
  • 二、有源蜂鸣器简介
  • 三、硬件原理分析
  • 四、程序编写
    • 4.1程序编写前提工作
    • 4.2程序编写
  • 五、编译下载验证
    • 5.1编写 Makefile 和链接脚本
    • 5.2编译下载


一、前言

在 I.MX6U-ALPHA 开发板上有一个有源蜂鸣器,通过 IO 输出高低电平即可控制蜂
鸣器的开关,本质上也属于 GPIO 的输出控制。


二、有源蜂鸣器简介

蜂鸣器常用于计算机、打印机、报警器、电子玩具等电子产品中,常用的蜂鸣器有两种:
有源蜂鸣器和无源蜂鸣器,这里的有“源”不是电源,而是震荡源,有源蜂鸣器内部带有震荡源,所以有源蜂鸣器只要通电就会叫。无源蜂鸣器内部不带震荡源,直接用直流电是驱动不起来的,需要 2K-5K 的方波去驱动。I.MX6U-ALPHA 开发板使用的是有源蜂鸣器,因此只要给其供电就会工作,I.MX6U-ALPHA 开发板所使用的有源蜂鸣器如图所示:
在这里插入图片描述

有源蜂鸣器只要通电就会叫,所以我们可以做一个供电电路,这个供电电路可以由一个 IO来控制其通断,一般使用三极管来搭建这个电路。为什么我们不能像控制 LED 灯一样,直接将GPIO 接到蜂鸣器的负极,通过 IO 输出高低来控制蜂鸣器的通断。因为蜂鸣器工作的电流比LED 灯要大,直接将蜂鸣器接到 I.MX6U 的 GPIO 上有可能会烧毁 IO,所以我们需要通过一个三极管来间接的控制蜂鸣器的通断,相当于加了一层隔离。本章我们就驱动 I.MX6U-ALPHA 开发板上的有源蜂鸣器,使其周期性的“滴、滴、滴……”鸣叫。


三、硬件原理分析

在这里插入图片描述

图中通过一个 PNP 型的三极管 8550 来驱动蜂鸣器,通过 SNVS_TAMPER1 这个 IO来控制三极管 Q1 的导通,当 SNVS_TAMPER1 输出低电平的时候 Q1 导通,相当于蜂鸣器的正极连接到 DCDC_3V3,蜂鸣器形成一个通路,因此蜂鸣器会鸣叫。同理,当 SNVS_TAMPER1输出高电平的时候 Q1 不导通,那么蜂鸣器就没有形成一个通路,因此蜂鸣器也就不会鸣叫。


四、程序编写

1、初始化SNVS_TAMPER1这个IO复用为GPIO5_IO01
2、设置SNVS_TAMPER1这个IO的电气属性。
3、初始化GPIO
4、控制GPIO输出高低电平。

4.1程序编写前提工作

新建文件夹“6_beep”,然后将bsp试验中的所有内容拷贝到刚刚新建的“6_beep”里面,拷贝完成以后的工程如图所示:
在这里插入图片描述
新建 VSCode 工程,工程创建完成以后在 bsp 文件夹下新建名为“beep”的文件夹,蜂鸣
器驱动文件都放到“beep”文件夹里面。

4.2程序编写

新建 beep.h 文件,保存到 bsp/beep 文件夹里面,在 beep.h 里面输入如下内容:

1 #ifndef __BSP_BEEP_H
2 #define __BSP_BEEP_H
3
4 #include "imx6ul.h"
5
6 /* 函数声明 */
7 void beep_init(void);
8 void beep_switch(int status);
9 #endif

新建文件 beep.c,然后在 beep.c 里面输入如下内容:
其中:IOMUXC_SetPinMux和IOMUXC_SetPinConfig参考文章

其中寄存器参考,寄存器参考文章

1 #include "bsp_beep.h"
2 
3 /*
4 * @description : 初始化蜂鸣器对应的 IO
5 * @param : 无
6 * @return : 无
7 */
8 void beep_init(void)
9 {
10 /* 1、初始化 IO 复用,复用为 GPIO5_IO01 */
11 IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,0); 
12 
13 /* 2、配置 GPIO1_IO03 的 IO 属性 */
14 IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,0X10B0);
15 
16 /* 3、初始化 GPIO,GPIO5_IO01 设置为输出 */
17 GPIO5->GDIR |= (1 << 1); 
18
19 /* 4、设置 GPIO5_IO01 输出高电平,关闭蜂鸣器 */
20 GPIO5->DR |= (1 << 1);
21 }
22
23 /*
24 * @description : 蜂鸣器控制函数,控制蜂鸣器打开还是关闭
25 * @param - status : 0,关闭蜂鸣器,1 打开蜂鸣器
26 * @return : 无
27 */
28 void beep_switch(int status)
29 { 
30 if(status == ON)
31 GPIO5->DR &= ~(1 << 1); /* 打开蜂鸣器 */
32 else if(status == OFF)
33 GPIO5->DR |= (1 << 1); /* 关闭蜂鸣器 */
}

beep.c 文件一共有两个函数:beep_init 和 beep_switch,其中 beep_init 用来初始化 BEEP 所使用的 GPIO,也就是 SNVS_TAMPER1,将其复用为 GPIO5_IO01,和上一章的 LED 灯初始化函数一样。beep_switch 函数用来控制 BEEP 的开关,也就是设置 GPIO5_IO01 的高低电平。
最后在 main.c 函数中输入如下所示内容:

1 #include "bsp_clk.h"
2 #include "bsp_delay.h"
3 #include "bsp_led.h"
4 #include "bsp_beep.h"
5 
6 /*
7 * @description : main 函数
8 * @param : 无
9 * @return : 无
10 */
11 int main(void)
12 {
13 clk_enable(); /* 使能所有的时钟 */
14 led_init(); /* 初始化 led */
15 beep_init(); /* 初始化 beep */
16
17 while(1) 
18 { 
19 /* 打开 LED0 和蜂鸣器 */
20 led_switch(LED0,ON); 
21 beep_switch(ON);
22 delay(500);
23
24 /* 关闭 LED0 和蜂鸣器 */
25 led_switch(LED0,OFF); 
26 beep_switch(OFF);
27 delay(500);
28 }
29
30 return 0;
31 }

main.c中只有一个main函数,main函数先使能所有的外设时钟,然后初始化LED和BEEP。最终在 while(1)循环中周期性的开关 LED 灯和蜂鸣器,周期大约为 500ms


五、编译下载验证

5.1编写 Makefile 和链接脚本

Makefile 使用该文章编写的通用 Makefile,修改变量 TARGET 为 beep,在变量 INCDIRS和 SRCDIRS 中追加“bsp/beep”,修改完成以后如下所示:
在这里插入图片描述
第 2 行修改目标的名称为“beep”。
第 10 行在变量 INCDIRS 中添加蜂鸣器驱动头文件路径,也就是文件 beep.h 的路径。
第 16 行在变量 SRCDIRS 中添加蜂鸣器驱动文件路劲,也就是文件 beep.c 的路径。
链接脚本就使用第十三章试验中的链接脚本文件 imx6ul.lds 即可。


5.2编译下载

使用 Make 命令编译代码,编译成功以后使用软件 imxdownload 将编译完成的 beep.bin 文件下载到 SD 卡中,命令如下:

chmod 777 imxdownload //给予 imxdownload 可执行权限,一次即可
./imxdownload beep.bin /dev/sdd //烧写到 SD 卡中,不能烧写到/dev/sda 或 sda1 设备里面!

烧写成功以后将 SD 卡插到开发板的 SD 卡槽中,然后复位开发板。如果代码运行正常的话 LED 灯亮的时候蜂鸣器鸣叫,当 LED 灯灭的时候蜂鸣器不鸣叫,周期大约为500ms。


END
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1704251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MYSQL框架结构

MYSQL框架结构 通过解析器和预处理生成解析树&#xff0c;预处理判断是否合法&#xff0c;如果合法则调用优化器去进行优化。

PYQT5点击Button执行多次问题解决方案(亲测)

PYQT5点击Button却执行多次问题 使用pyqt5时遇到问题&#xff0c;UI上按钮点击一次&#xff0c;对应的槽函数却执行了3遍 首先&#xff0c;确认函数名无冲突&#xff0c;UI button名无命名冲突&#xff0c;下图是简单的示例程序&#xff1a; 运行后&#xff0c;点击按钮&#…

探秘萤瓴优选短视频带货软件,开启新时代的电商创业方式

探秘萤瓴优选短视频带货软件&#xff0c;开启新时代的电商创业方式 随着移动互联网的飞速发展&#xff0c;电商行业迎来了前所未有的变革。短视频带货作为一种新兴的电商模式&#xff0c;以其直观、生动、互动性强的特点&#xff0c;迅速成为市场的新宠。在这个背景下&#xf…

银行软件测试有哪些测试点?一般银行的软件测试工作流程有哪些?

银行测试行业前景广阔&#xff0c;随着金融科技的快速发展和银行业务的不断创新&#xff0c;银行对软件测试的需求也在持续增长。软件测试在确保银行系统软件的稳定性、安全性和可靠性方面起着至关重要的作用&#xff0c;因此&#xff0c;银行测试岗位一直受到广泛的关注和重视…

TIM(Timer)简介

TIM&#xff08;Timer&#xff09;定时器介绍 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时不仅具备基本的定时中断功能&#xff0c;而且…

基于香橙派 Ai Pro的ROS Qt人机交互软件部署指南

一&#xff0c;前言 最近收到了CSDN的邀请,对香橙派新出的Ai Pro进行测评: 说来也巧&#xff0c;其实香橙派本人对其映像挺深刻的,在2017年左右,本人刚上大学,当时是在淘宝购买树莓派&#xff0c;发现有个叫香橙派的国产板子&#xff0c;性能跟树莓派差不多吧&#xff0c;但是…

不是从APP store下载的APP在mac上一直提示有损坏,打不开怎么办?

1.点击设置 2.安全与隐私 3.通用看看允许从以下位置下载的APP是否有任何来源 4.如果没有&#xff0c;mac桌面点击&#x1f50d;输入终端或Terminal 命令行输入下述代码&#xff1a; sudo spctl --master-disable 5.回车&#xff0c;输入mac开机密码。注意&#xff1a;此时密…

探索循环逻辑:for逻辑分支与容器遍历的深度剖析

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;for逻辑与循环体的奥秘 二、for逻辑与循环体的结合使用 1. 函数与循环…

Spring-Cloud-OpenFeign源码解析-04-调用流程分析

在Spring-Cloud-OpenFeign源码解析-03-FeignClientFactoryBean分析到&#xff0c;通过Autowired或者Resource注入FeignClient实例的时候&#xff0c;实际上返回的是JDK动态代理对象&#xff0c;具体的实现逻辑在InvocationHandler的invoke方法中 回看ReflectiveFeign.newInsta…

Tower for Mac——高效版本控制的得力助手

在编程的世界里&#xff0c;版本控制是每一个开发者都离不开的工具。Tower for Mac&#xff0c;就是这样一款高效、易用的版本控制软件。 Tower for Mac拥有直观易用的界面&#xff0c;无论是提交代码、创建分支还是解决冲突&#xff0c;都能让开发者轻松应对。它支持多仓库管…

postman教程-5-发送put请求

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了postman发送post请求的方法&#xff0c;本小节我们讲解一下postman发送put请求的方法。 HTTP PUT 请求是一种用于传输数据的网络协议方法&#xff0c;它在客户端和服务器之间的通信中扮演着重…

EMQX 的初始IP改为自己的实际IP

分类 EMQX Dashboard&#xff08;控制台&#xff09;: Dashboard提供了一个Web界面&#xff0c;用于管理和监控EMQX的运行状态。您可以通过配置dashboard.listeners.http.bind来设置Dashboard的监听地址和端口。例如&#xff0c;如果您想要Dashboard在所有网络接口上监听&#…

软件技术架构全面详解

软件架构全面详解 软件架构 这个与建筑设计架构类似,建筑设计架构师负责设计建筑物的整体结构、布局和功能分配。 而软件架构师,负责设计软件系统的整体组织结构、模块划分、和功能分配。 两者都需要考虑到业务功能、性能、可扩展性、安全性、以及用户体验等方面。 软件架…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt + uniapp 新闻资讯 的设计与实现

一.项目介绍 本系统分为 后端 和 小程序端 后端&#xff1a;点击登录按钮 设置个人中心、 管理员账号数据维护、 基础数据维护、 短视频信息维护(包括查看短视频留言、短视频收藏)、 论坛维护(增删改查帖子信息&#xff0c;包括查…

Windows远程桌面是什么?

Windows远程桌面是一种远程桌面协议&#xff0c;允许用户通过网络连接到远程Windows计算机&#xff0c;并在本地操作远程计算机。它为用户提供了访问远程计算机的便利性&#xff0c;可以在不同地区的电脑或设备之间进行信息远程通信。 天联解决方案 在远程桌面技术中&#xff…

phpmyadmin漏洞汇总

phpmyadmin是一个非常常用的框架&#xff0c;所以学习它的常见漏洞是非常必要的。 参考大佬的文章进行自学&#xff1a;最全phpmyadmin漏洞汇总_phpmyadmin弱口令-CSDN博客 目录 phpmyadmin简介 查看phpmyadmin版本 漏洞及利用 万能密码登入 影响版本 漏洞POC 远程代码…

Ubuntu 20.04 上安装和配置 VNC

先决条件 请确保以具有 sudo 权限的用户身份登录。建议使用具有 sudo 权限的普通用户进行处理&#xff0c;而不是直接使用 root 用户。创建用户并加入 sudoers 可自行百度。 安装桌面环境 大多数服务器没有安装桌面环境&#xff0c;因此我们首先要安装轻量级桌面环境。 Ubu…

PS系统教学01

在前面几节内容基本介绍了PS的基本作用&#xff0c;简单的对PS中的某些基础功能进行介绍应用。 接下来我们进行系统的分享。 本次分享内容 基础的视图操作 接下来我们是对于PS工作区域的每个图标工具进行详细的分享 抓手工具缩放工具 这个图标是将工具栏由一列变成两列 一…

OpenLayers6入门,OpenLayers实现在地图上拖拽编辑修改绘制图形

专栏目录: OpenLayers6入门教程汇总目录 前言 在前面一章中,我们已经学会了如何绘制基础的三种图形线段、圆形和多边形:《OpenLayers6入门,OpenLayers图形绘制功能,OpenLayers实现在地图上绘制线段、圆形和多边形》,那么本章将在此基础上实现图形的拖拽编辑功能,方便我…

stm32cubeMX简单使用(轻松配置时钟和中断等)ST图形代码生成器

大大加快代码编写速度的图形编译工具 需要的准备材料 需要注意的几点操作 1&#xff0c;管理固件库和软件&#xff0c;方便对应不同系列的硬件 2&#xff0c;新建工程 3&#xff0c;整体流程 这个软件的本质是用来生成代码&#xff0c;方便前期初始化操作 4&#xff0c;对引…