ZYNQ-7020嵌入式系统学习笔记(1)——使用ARM核配置UART发送Helloworld

news2024/11/25 12:32:27

本工程实现调用ZYNQ-7000的内部ARM处理器,通过UART给电脑发送字符串。
硬件:正点原子领航者-7020
开发平台:Vivado 2018、 SDK

1 Vivado部分操作

1.1 新建工程

设置工程名,选择芯片型号。

1.2 添加和配置PS IP

点击IP INTEGRATOR,Create Block Design。

在这里插入图片描述

1.2.1添加IP

添加ZYNQ7 Processing System。

在这里插入图片描述

1.2.2 配置PS

  1. 修改DDR Configuration:
  • 7020选择MT41J256M16 RE-125(256M162=8190Mbit=8Gbit)两片DDR3,位宽16,深度256M
  • 7010选择MT41J128M16 HA-125 (128M162=4096Mbit=4Gbit)两片DDR3,位宽16,深度128M
    在这里插入图片描述
  1. 选择外设引脚Peripheral I/O Pins:

由于入门教程需要使用串口输出“Hello World”,因此只要选择UART。

在这里插入图片描述

由于开发板硬件设计如上图所示:串口输出的引脚已经对应好了,为PS_MIO14_500和PS_MIO15_500。
查看设置界面,只能选择UART0行的第二个UART0。

在这里插入图片描述

  1. 设置 PS-PL Configuration:

UART0串口波特率任意设置,一般为9600、115200。
在这里插入图片描述

  1. 设置MIO Configuration:
    设置串口引脚的电平和速度。

在这里插入图片描述

查看原理图或电源拓扑,可以看到BANK500的电源电压为3.3V,BANK501的电源电压为1.8V。
因此设置BANK0为LVCMOS 3.3V,BANK1为LVCMOS 1.8V。
在这里插入图片描述

  1. 配置完成,点击OK。

1.2.3 关闭不需要的接口

由于是初始工程,大部分接口是不需要的,包括:M_AXI_GP0_ACLK、M_AXI_GP0、FCLK_CLK0、FCLK_RESET0_N。

  1. 关闭AXI接口:接口双击进入PS配置界面,选择PS-PL Configuration -> AXI Non Secure Enablement -> GP Master AXI Interface,取消勾选M AXI GP0 interface

在这里插入图片描述

  1. 关闭CLK接口:进入Clock Configuration -> PL Fabric Clocks,取消勾选FCLK_CLK0

在这里插入图片描述

  1. 关闭RESET接口:进入PS-PL Configuration -> General -> Enable Clock Resets,取消勾选FCLK_RESET0_N

在这里插入图片描述

多余接口都关闭,可以得到如下模块:

在这里插入图片描述

1.2.4 生成连接和验证

  1. 自动化连接:
    点击Run Block Automation,进入界面,选中模块,点击OK。

在这里插入图片描述

模块会自动生成引脚,连接外部DDR3和串口引脚。

在这里插入图片描述

  1. 验证:
    点击Validate Design,自动验证模块是否有错误或警告。

在这里插入图片描述

1.3 生成子模块和顶层文件

  1. 生成子模块:
    右键IP,Generate Output Products,对模块进行综合和约束。
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 创建顶层文件:
    右键IP,Create HDL Wrapper。

在这里插入图片描述

选择第二个Let Vivado manage wrapper and auto-update。如果修改IP内部细节,Vivado会自动修改外部接口等。

在这里插入图片描述

  1. 由于本工程内没有用到PL部分,只有PS部分,因此不需要Generate Bitstream,直接可以导出硬件。

1.4 导出硬件

  1. 导出硬件:
    点击菜单栏File -> Export -> Export Hardware

在这里插入图片描述

此处不需要选择Include bitstream,其他工程如果用到了PL部分,那就需要选择。

在这里插入图片描述

  1. 以上操作会在工程目录下新建一个.sdk文件夹,内部有一个system_wrapper.hdf文件,该文件可以用解压软件打开,内部包括*.c、*.h等文件。

在这里插入图片描述

  1. 打开SDK:
    菜单栏File -> Launch SDK

在这里插入图片描述
点击OK。
在这里插入图片描述

2 Software Development Kit部分操作

软件基于Eclipse开发,以下就是进行C语言的编写。
在这里插入图片描述

2.1 新建工程

  1. 点击File -> New -> Application Project
    在这里插入图片描述

  2. 设置工程信息:
    添加工程名,然后点击Next

在这里插入图片描述

  1. 选择Empty Application,点击Finish

在这里插入图片描述

  1. 可以看到SDK界面的Project Explorer中生成了两个文件夹hello_world和hello_world_bsp。
  • hello_world:存放自己编写的软件。
  • hello_world_bsp:存放板级支持包,相当于硬件驱动,作为硬件和软件之间的桥梁。
  • system_wrapper_hw_platform_0:存放系统硬件信息。

在这里插入图片描述

2.2 编写软件

  1. 创建工程文件:
    右键hello_world->srcNew -> Source File,新建文件名必须为main.c。
    在这里插入图片描述

  2. 编写并保存main.c

/*
 * main.c
 *
 *  Created on: 2024年11月17日
 *      Author: win10
 */
#include "stdio.h"

int main(){
	printf("hello world\n");
	return 0;
}

保存后会自动编译,如果编译错误,会在界面底部Problems中报错。

  1. 通过编译之后,即可将软件烧录到FPGA中。

2.3 FPGA板配置

由于FPGA板设计时PL和PS的UART共用了同一个串口芯片,因此,需要修改跳线帽到PS端。

连接JTAG调试线,电源线和USB_UART的TYPE-C线。

2.4 连接串口

  1. 找到SDK Terminal:Window->Show View -> Other

在这里插入图片描述
输入关键词,选择对应窗口,点击OK。
在这里插入图片描述

  1. 由于上一步已经连接串口,此时可以通过SDK Terminal连接。

(1)打开电脑设备管理器,查看COM口。

在这里插入图片描述

(2)点击加号连接串口。

在这里插入图片描述
选择对应串口号,设置波特率,其他默认。

在这里插入图片描述
如果显示以下信息,则说明连接成功。

Connected to COM8 at 115200

2.4 下载程序

由于刚才保存的时候,系统已经自动编译了.elf文件,可以从左侧hello_world,Binaries目录看到。

在这里插入图片描述

右键.elf文件,选择Run As -> 1 Launch on Hardware (System Debugger)

在这里插入图片描述
SDK log输出:
在这里插入图片描述

串口输出结果:

Connected to COM8 at 115200
口

Connected to COM8 at 115200
9莌ello world

Connected to COM9 at 115200
hello world

本结果进行多次尝试,前面数据错误,可能与USB线的质量和信号干扰有关。

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

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

相关文章

JSONCPP 数据解析与序列化

常用类接口 Json::Value 类 用于存储 JSON 数据的核心类。它支持将数据解析为对象、数组或基本类型(如字符串、数值等) 赋值操作符:Value& operator(Value other); 用于将一个 JSON 值赋给另一个 JSON 值 Json::Value value; value &…

排序(Java数据结构)

1. 排序的概念及引用 1.1 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。(所有的排序都是默认从小到大排序) 稳定性:假定在待排序的记录序列中&#xff…

JavaParser 的全面介绍

JavaParser 是什么? JavaParser 的快速介绍可以参考: # JavaParser的快速介绍 JavaParser是一个用于解析Java源码的开源工具,它提供了一种简单而有效的方式来解析和操作Java代码。JavaParser解析源码的方式主要基于其将Java代码转换为抽象语…

【君正T31开发记录】8.了解rtsp协议及设计模式

前边搞定了驱动,先不着急直接上手撸应用层的代码,先了解一下大致要用到的东西。 设计PC端先用vlc rtsp暂时H264编码(vlc好像不支持h265,这个后边我试试)的视频流,先需要支持上rtsp server,了解rtsp协议是必…

大数据新视界 -- Hive 数据分区:精细化管理的艺术与实践(上)(7/ 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

strlwr(arr);的模拟实现(c基础)

hi , I am 36 适合对象c语言初学者 strlwr(arr)&#xff1b;函数是把arr数组变为小写字母,并返回arr 链接介绍一下strlwr(arr)&#xff1b;(c基础)-CSDN博客 下面进行My__strlwr(arr);模拟实现 #include<stdio.h> //返回值为arr(地址),于是用指针变量,原数组为字符型…

【Pytest+Yaml+Allure】实现接口自动化测试框架

一、框架思想 requestsyamlpytestallure实现接口自动化框架。结合数据驱动和分层思想&#xff0c;将代码与数据分离&#xff0c;易维护&#xff0c;易上手。使用yaml编写编写测试用例&#xff0c;利用requests库发送请求&#xff0c;使用pytest管理用例&#xff0c;allure生成…

Sigrity SPEED2000 General SI Simulation模式如何进行信号仿真分析操作指导-DDR

Sigrity SPEED2000 General SI Simulation模式如何进行信号仿真分析操作指导-DDR Sigrity SPEED2000 General SI Simulation模式可以对信号进行仿真分析,仿真将电源视为理想电源,以下图为例进行说明 附带驱动和接收端的IBIS模型 2D 视图

python中如何使用指数

exp()方法&#xff1a; exp(x)方法返回x的指数&#xff0c;e^x。 如x1&#xff0c;那么e的1次幂为2.7183… 语法&#xff1a; 注意&#xff1a;exp()是不能直接访问的&#xff0c;需要导入math模块&#xff0c;通过静态对象调用该方法。 实例&#xff1a; 运行结果&#xf…

AutoDL安装docker问题

在AutoDL上租了卡&#xff0c;安装docker遇到一些问题&#xff1a; 1.执行 sudo docker run hello-world 报错 docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 解决方法 先查看docker有没有启动&#xff0c;…

基于SSM的婚庆管理系统+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、商家&#xff08;婚庆公司&#xff09;、用户功能模块&#xff1a;管理员&#xff08;用户管理、商家管理、摄影风格管理、礼服款式管理、案例管理、婚车品牌管理、婚纱拍摄管理、策划服务管理、婚宴酒店管理、婚车套餐管理、在线咨询…

Linux入门系列--文件与目录

一、介绍 在Linux中&#xff0c;有着一句话&#xff0c;叫做&#xff1a;一切皆文件。也就是任何东西都是以文件的形式存储的。 目录结构 bin&#xff1a;全程binary&#xff0c;含义是二进制。该目录中存储的都是一些二进制文件。我们学过C/C&#xff0c;其实也都知道机器能…

Linux离线安装Docker命令,简单镜像操作

解压安装包 首先&#xff0c;使用 tar 命令解压 docker-27.3.1.tgz 安装包&#xff1a; tar -zxvf docker-27.3.1.tgz 将二进制文件移动到可执行路径上的目录 接着&#xff0c;将解压出来的 Docker 二进制文件复制到系统的可执行路径&#xff08;通常是 /usr/bin/&#xff09…

鸿蒙主流路由详解

鸿蒙主流路由详解 Navigation Navigation更适合于一次开发,多端部署,也是官方主流推荐的一种路由控制方式,但是,使用起来入侵耦合度高,所以,一般会使用HMRouter,这也是官方主流推荐的路由 Navigation官网地址 个人源码地址 路由跳转 第一步-定义路由栈 Provide(PageInfo) pag…

harbor和docker配置https访问

如果配置了科学上网代理&#xff0c;一定要做免代理的配置&#xff0c;不然https访问会失败。 免代理配置 Docker免代理配置 [rootnode1 harbor]#cat /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment"HTTP_PROXYhttp://10.0.0.1:7897"…

SageMaker强化学习部署

强化训练 强化学习的训练与一般的深度学习不太一样。需要有一个环境&#xff0c;对智能体的动作&#xff0c;给予一个奖励并进行状态转移。用于训练的数据&#xff0c;是在训练的过程中产生的。 这里以一个小车上坡的强化学习作为例子&#xff0c;相关文档在下方 https://sa…

MySQL面试-1

InnoDB中ACID的实现 先说一下原子性是怎么实现的。 事务要么失败&#xff0c;要么成功&#xff0c;不能做一半。聪明的InnoDB&#xff0c;在干活儿之前&#xff0c;先将要做的事情记录到一个叫undo log的日志文件中&#xff0c;如果失败了或者主动rollback&#xff0c;就可以通…

使用树莓派安装shairport-sync使老音响变身AirPlay音响

借助shairport-sync&#xff0c;可以让普通音响变成AirPlay无线音响&#xff0c;由于树莓派天生的低功耗&#xff0c;做这种事情最适合。所以架构就是树莓派安装Ubuntu24.04&#xff0c;在树莓派上安装shairport-sync&#xff0c;树莓派再通过3.5mm线连接音响。 安装Ubuntu24.…

Linux---ps命令

​​​​​​Linux ps 命令 | 菜鸟教程 (runoob.com) process status 用于显示进程的状态 USER: 用户名&#xff0c;运行此进程的用户名。PID: 进程ID&#xff08;Process ID&#xff09;&#xff0c;每个进程的唯一标识号%CPU: 进程当前使用的CPU百分比%MEM: 进程当前使用的…

VLAN是什么,一个好的网络为什么要划分VLAN呢?

前言 在上一篇中讲解了交换机的工作原理&#xff0c;知道了交换机处理数据的转发方式&#xff0c;其中有两种情况会以广播方式进行发送数据&#xff0c;第一种是目的MAC是全F的&#xff0c;以及组播MAC&#xff0c;第二种是未知单播帧&#xff0c;那这个会带来什么样的问题呢&…