IO接口编程

article/2025/9/22 7:43:29

在这里插入图片描述

IO接口编程

作者: Saint
掘金:https://juejin.im/user/5aa1f89b6fb9a028bb18966a
微博:https://weibo.com/5458277467/profile?topnav=1&wvr=6&is_all=1
GitHub:github.com/saint-000
CSDN: https://me.csdn.net/qq_40531974

一、实验目的
1.掌握ARM的GPIO,UART接口工作原理。
2.学习编程实现GPIO接口的控制及ARM和PC机的UART通信。
3.掌握ARM裸机下C语言编程方法。

二、实验内容
1.学习串行通信原理,了解串行通信控制寄存器。
2.实现I/O接口编程。

三、实验步骤
1.数码管实验

1.双击打开对应工程文件夹下的vivado project file
2.在File菜单下选择Export,点击包括比特流,点击OK
3.在File菜单下选择luanch SDK,打开SDK软件
4.新建工程并命名,类型选择Empty Application
5.在新建的工程中添加源文件,新建Source File
6.为文件命名,注意要跟上文件类型.c,点击Finish
7.补全seg_test.c文件中缺失的代码,添加至源文件中:需完成的功能:
使用开关控制右四位数码管显示数字0~9,当值大于9时,数码管无显示
其中开关从右至左为低位至高位,开关开状态为1,关状态为0,开关组成的2进制值对 应数码管上显示的十进制数值
8.点击保存,软件自动编译程序
9.用USB数据线将开发板2处接口与电脑主机连接,打开板子电源开关7,开发板1处拨码开关全部打到”on”
10.在vivado中点击左下角Open Hardware Manager,选择open target, 再选择Auto Connection
11.点击Program device,在弹出的窗口中找到工程的比特流,比特流文件在工程中的路径为:project_name/project_name.runs/impl_1/system_wrapper.bit,如下图,点击Program下载比特流到板子
12.运行程序
13.拨动开关,观察数码管上的显示
14.可使用debug调试程序,具体参见实验二

2.UART串口实验

1.双击打开对应工程文件夹下的vivado project file
2.在File菜单下选择Export,点击包括比特流,点击OK
3.在File菜单下选择luanch SDK,打开SDK软件
4.新建工程并命名,类型选择Empty Application
5.在新建的工程中添加源文件,新建Source File
6.为文件命名,注意要跟上文件类型.c,点击Finish
7.补全common_uart.c文件中缺失的代码,添加至源文件中,需完成的功能:
通过PL上的UART串口发送单个字符,接收后向串口回传该字符,若收到的字符为“x”,则退出程序
8.点击保存,软件会自动编译程序
9.用USB数据线将开发板2处UART接口与电脑主机连接,将5上方的USB口用双头USB线连接至主机,打开板子电源开关7
10.在vivado中点击左下角Open Hardware Manager,选择open target, 再选择Auto Connection
11.点击Program device,在弹出的窗口中找到工程的比特流,比特流文件在工程中的路径为:project_name/project_name.runs/impl_1/system_wrapper.bit,如下图,点击Program下载比特流到板子
12.计算机→管理,在设备管理器→端口里查看Silicon Labs CP210x USB to UART Bridge对应的端口号
13.打开串口调试助手,将串口设置为该端口号,将波特率设为9600,其余配置不改变,然后打开串口
14.运行程序
15.在串口助手里,输入字符,点击TX发送,在左上方的框里看是否有接受到正确的字符

四、实验结果
实验1.在搭建好的工程文件下编写实验程序,实现对数码管的位选和段选的控制。实验截图如下:
在这里插入图片描述

实验代码如下:

#include"xparameters.h"
#include"xgpio.h"
#include"xil_cache.h"//设备ID
#define GPIO_SEG_W_DEVICE_ID 1
#define GPIO_SW_DEVICE_ID 2
#define GPIO_SEG_D_DEVICE_ID 0
//通道号
#define SEG_CHANNEL 1//指向设备的指针
XGpio GpioOutput0; //位选对应寄存器
XGpio GpioOutput1; //段选对应寄存器
XGpio GpioInput;//按键对应寄存器u32 flag=0;
u32 DataRead;int Gpio_w_seg(u16 Deviceid)
{int w;int status;/*请补全代码,给w赋值*/w=15;status=XGpio_Initialize(&GpioOutput0,Deviceid);if(status !=XST_SUCCESS){return XST_FAILURE;}XGpio_SetDataDirection(&GpioOutput0,SEG_CHANNEL,0x0);XGpio_DiscreteWrite(&GpioOutput0,SEG_CHANNEL,w);return XST_SUCCESS;
}int Gpio_d_seg(u16 Deviceid,u32 data)
{u32 a;int status;status=XGpio_Initialize(&GpioOutput1,Deviceid);if(status !=XST_SUCCESS){return XST_FAILURE;}/*设置GPIO为输出*/XGpio_SetDataDirection(&GpioOutput1,SEG_CHANNEL,0x0);switch(data){case 0 :a=0x3f;break;/*补全余下代码,定义data为1~9时对应的数码管值*/case 1 :a=0x06;break;case 2 :a=0x5b;break;case 3 :a=0x4f;break;case 4 :a=0x66;break;case 5 :a=0x6d;break;case 6 :a=0x7d;break;case 7 :a=0x07;break;case 8 :a=0x7f;break;case 9 :a=0x6f;break;}/*向数码管寄存器中写入值*/XGpio_DiscreteWrite(&GpioOutput1,SEG_CHANNEL,a);return XST_SUCCESS;
}u32 Gpio_sw(u16 Deviceid,u32 *DataRead)
{int Status;Status = XGpio_Initialize(&GpioInput, Deviceid);if (Status != XST_SUCCESS){return XST_FAILURE;}/*补全代码,读取并返回按键的值*/return XGpio_DiscreteRead(&GpioInput, SEG_CHANNEL);
}void main()
{while(1){flag =Gpio_sw(GPIO_SW_DEVICE_ID,&DataRead);Gpio_w_seg(GPIO_SEG_W_DEVICE_ID);if(flag < 10){Gpio_d_seg(GPIO_SEG_D_DEVICE_ID,flag);}else{/*补全代码,使数码管不显示*/XGpio_Initialize(&GpioOutput0,GPIO_SEG_D_DEVICE_ID);XGpio_SetDataDirection(&GpioOutput1,SEG_CHANNEL,0x0);XGpio_DiscreteWrite(&GpioOutput1,SEG_CHANNEL,0x0000);}}
}

实验现象如下图:
在这里插入图片描述

实验2. ARM C语言实现串口通信实验。实验代码如下:

#include "xparameters.h"
#include "xil_printf.h"
#include "sleep.h"
#include <stdio.h>
#include "xil_io.h"#define uart_bas_addr  0x42c00000
#define uart_rxd_addr  0x42c00000//接收数据输入地址
#define uart_txd_addr  0x42c00004//发送数据输出地址
#define uart_stat_addr 0x42c00008 // 串口状态寄存器
#define uart_ctrl_addr 0x42c0000cint main()
{while(1){	 /*补全代码,接收字符并回传,当接收到字符x时退出程序*/						static int a;if((Xil_In8(uart_stst_addr))&0x01==1)//判断串口状态寄存器的最低位是否为1
{a=Xil_In8(uart_txd_addr, a);//若为1,接收串口数据,并赋给一个变量if(a=='x')//将接收到的数据回传{break;//判断接收到的数据是否位‘x’,若是,跳出while循环}
}																	                          }return 0;
}

实验截图如下:
在这里插入图片描述
五、实验总结
1.知道八段数码管由“位选”和“段选”两块电路驱动以及引脚约束条件。
2.理解了接口函数的用法。
3.用串口助手修改波特率,连接开发板的UART进行匹配打印返回值

实验心得:
(1)串口通信的实验明显要比之前的实验要难了,代码的数量明显变多了 。头文件里有很多的代码,比之前的实验的代码要多的多。
但是只要认真的去看代码,使用编译器自带的查找功能找到关键的函数,很容就看懂代码本身的意思。
(2)串口通信的概念,即串口按位(bit)发送和接收字节。通过这次实验,我掌握了串口的使用方法,串口初始化,发送数据和接收数据,为以后的实验奠定了基础。通过有关书籍,我了解到嵌入式系统中串口是一个重要的资源,常用来做输入输出设备。
(3)UART(通用异步收发器)结构包括波特率发生器,发送器,接收器以及控制单元;
有同时代表收发缓冲区状态的只读UTRSTAT寄存器,和其他收发数据,设计相应收发模式查询方式的寄存器;
实验过程就是对发送数据格式,端口,寄存器等初始化,接收数据(接收缓冲区接收到数据),发送数据(发送缓冲区为空)的处理。

六、实验思考题
(1)查看相关寄存器,思考怎么配置UART时钟信号?
改变ulcon的值可以配置UART配置寄存器。我们实验室用的芯片xc7z020clg484-1,所以我们查看xc7z020的数据手册,查看CLOCK&POWER MANAGEMENT和UART模块相关配置时钟信号的寄存器来确定时钟信号。

(2) 要实现控制数码管闪烁的功能,有什么办法可以完成?
可以向命令寄存器写入闪烁控制命令,也可以通过向命令寄存器中写入“下载数据并译码(Download)"命令来完成,因为该命令的底八位的D6位可以控制数码管的闪烁。


http://chatgpt.dhexx.cn/article/DTLdvAgJ.shtml

相关文章

网络编程IO

文章目录 前言用户空间和内核空间系统调用一、同步IO模型1、阻塞式IO模型2、非阻塞式IO模型3、IO复用模型4、信号驱动IO模型 二、异步IO模型三、同步和异步 前言 IO操作由两个部分组成&#xff1a;发起IO请求、实际进行IO操作。 也就是下图所示的等待数据从磁盘拷贝到内核空间…

Linux 下文件IO编程进程控制实验

Linux 下文件IO编程&进程控制实验 一、基本I/O操作 (1).Linux的输入/输出&#xff08;I/O&#xff09;操作&#xff0c;通常为五个方面&#xff1a;打开&#xff0c;读取&#xff0c;写入&#xff0c;定位和关闭&#xff1b;对应的函数分别为&#xff1a;open&#xff08;…

文件IO(IO编程)

一、文件IO&#xff08;IO编程&#xff09; 系统IO&#xff1a;和系统有关的IO接口函数 标准IO: 标准库里面的IO接口函数 #include <stdio.h> 目录操作&#xff1a;操作目录相关的IO接口函数 LCD屏的操作&#xff1a;刷图 TS(touch screen)触摸屏的操作:点击、滑动 二、…

I/O编程

一、标准IO 1.1、概述 标准IO 是ANSI C提供的函数接口&#xff0c;在文件IO的基础上封装出来的。任何兼容标准C库的操作系统都可以使用接口&#xff0c;具有更好的移植性。标准IO在执行时也会用到系统调用&#xff0c;为了增加内核的工作效率&#xff0c;减少资源浪费&#…

小米平板2装win10(附驱动)

前段时间在折腾着怎么给米pad2装win10&#xff0c;结果驱动什么的折腾了好久。 给米pad2装win10&#xff0c;其实就和给普通的电脑装win10差不多的步骤。 第一步&#xff0c;制作U盘启动器。工具什么的就用官方的winPE就好&#xff0c;iso就随意吧。 第二步&#xff0c;给米…

小米笔记本系统win10家庭版升级为企业版(专业版)

一.背景 新入职一家IT公司,由于公司领导层是小米粉,基本新入职的员工人手一本小米笔记本.小米笔记本默认自带的是家庭版的,由于之前公司很多人用的都是家庭版的,在某些极为特殊的软件开发情况下,家庭版的配置给开发带来了极大的困难,后来经过查资料验证企业版是不会出现这种情…

小米mix2s刷win11和android双系统

在给电脑安装系统的过程中&#xff0c;可能会因为各种原因出现windows无法安装的情况&#xff0c;我在给小米mix2s安装win11时发现出现了“计算机意外地重新启动或遇到错误&#xff0c;windows无法安装”的情况&#xff0c;下面就来教一下大家两种解决方法&#xff0c;希望可以…

小米air13.3一代的win10系统重装

仅作为记录&#xff0c;大佬请跳过 小米air的系统重装在进入bios之后&#xff0c;选择u盘启动时&#xff08;需要设置一个密码&#xff0c;然后关闭secure boot&#xff09;有点跟神船不一样&#xff0c;作为记录。 参考大佬博主文章传送门

Win10 IPv6 远程桌面连接(小米路由器)

前排广告&#xff1a;2021金三银四&#xff0c;字节跳动招人季&#xff0c;平均反馈时间仅1天&#xff01;选择覆盖达6大城市&#xff01;——2021年字节跳动飞书团队内推活动正式开启&#xff0c;岗位列表见&#xff1a;https://job.toutiao.com/s/eNtDcGu。除了这个投递连接外…

小米4A千兆刷OpenWrt_Win10

在Linux上试了一下&#xff0c;最终telnet 196.168.31.1失败&#xff0c;网上找了一些教程&#xff0c;改到win10下刷成功了。 1 先安装Pthon3 和pip3&#xff0c;然后pip3 install requests&#xff0c;不然会报错 2 win10开启telnet&#xff0c;方法简单自行百度&#xff1…

小米平板2可以装鸿蒙系统,详细教程!教你小米平板2轻松刷Win10

众所周知&#xff0c;小米平板2拥有MIUI和Windows 10两个版本&#xff0c;这两个版本在硬件上是一致的(除了机身存储空间不同)&#xff0c;所以理论上存在通刷的可能。 现在&#xff0c;有网友在MIUI论坛中共享了小米平板2刷Windows 10的教程&#xff0c;有兴趣的不妨一起来看看…

win10 下载

win10 下载 https://www.microsoft.com/zh-cn/software-download/windows10 Windows 10 2022 更新 l 版本 22H2 选择版本 以下 Windows 10 版本对于 Windows 10 家庭版和 Windows 10 专业版都有效。 如果您想验证下载数据的完整性和真实性&#xff0c;请按照以下步骤操作&…

计算机连接小米usb驱动,win10系统安装小米usb驱动的详细步骤

随着电脑的使用率越来越高&#xff0c;我们有时候可能会遇到对win10系统安装小米usb驱动进行设置&#xff0c;如果我们需要对win7系统安装小米usb驱动进行设置时&#xff0c;要怎么处理win10系统安装小米usb驱动的设置方法非常简单。 设置方法&#xff1a; 1、首先先下载小米驱…

win10 android 手机驱动下载,小米手机驱动win10驱动

小米手机usb驱动win10驱动是Win10系统专用的小米手机USB连接驱动&#xff0c;Win10电脑想要通过USB数据线与小米手机连接&#xff0c;必需安装这个驱动&#xff0c;从而可以使用电脑管理手机中的文件&#xff0c;以及进行线刷、解锁等操作&#xff0c;支持32位以及64位的Win10系…

【日常技巧】小米手机投屏至win10笔记本

最近需要多次实现自己手机与电脑的投屏&#xff0c;却又不想安装其他第三方软件&#xff0c;最终找到方法&#xff0c;做以下记录。 系统说明 手机&#xff1a;MIUI12.0.2稳定版 电脑&#xff1a;win10 前提条件 手机与电脑同处于同一wifi下 操作步骤 1.打开win10电脑投屏…

小米笔记本怎么恢复出厂的系统

买了台小米pro笔记本,中途自己重装了一次win10专业版,自己安装系统之后,自然很多电脑自带的软件和功能就没有了,比如Dolby,指纹解锁,正版的win10和office. 之前一直以为小米笔记本里面的软件都是预装在win10里面,只要有原厂的镜像就可以安装了,但是一直没找到.最近刚好系统又出…

小米笔记本pro15.6黑苹果+win10双系统/多系统

基本信息 配置,小米笔记本PRO 15.6 硬盘&#xff1a;杂牌 显卡&#xff1a;MX150/H610 CPU:i7-8550 简介&#xff1a;win10苹果双系统&#xff0c;双硬盘双系统&#xff0c;自带的pm981硬盘以前成功装过一次&#xff0c; 目前已知&#xff1a; MAC时间不同步&#xff08;…

小米pro安装win10系统

一.利用U盘做驱动盘 格式化u盘为NTFS格式官网下载https://www.microsoft.com/zh-cn/software-download/windows10点击立即下载工具 下载完成双击打开--->接受---->下一步---->为另一台电脑创建安装介质---->下一步--->下一步---->下一步---->出现所选U盘…

win10系统小米妙享中心,在手机可搜索到电脑,与之跨屏协作

在体验了小米妙享中心之后&#xff0c;发现非小米笔记本每次投屏不能直接在手机上直接投送到电脑屏幕&#xff0c;而只能在电脑打开手机画面&#xff0c;进行对手机操作&#xff0c;我们进行电脑伪装将我们的电脑变成小米笔记本&#xff0c;之后就可以在小米妙享中心发现我的设…

小米笔记本重装win10系统教程

U盘装机大师一键重装小米笔记本win10系统 小米笔记本自打推出以来&#xff0c;一直以非常高的性价比而深受大众的喜爱&#xff0c;加上其简约的外观&#xff0c;无论是价格还是外型都给了用户购买它的理由&#xff0c;对于电脑的话&#xff0c;重装系统是不可避免的事&#xf…