会用哪些变量类型是51单片机直接支持的读取LM75数据的大佬可以救救我吗?

Sky哥也想学zynq呀,zynq有arm a9双核的ps部分和和fpga的pl部分,突然发现zynq感觉是世界上最有技巧的一款芯片了,arm部分负责算法部分,pl部分可以用来增加外设,想想你的芯片支持好几个vga,hdmi,10几个串口,是不是很惊人。为什么要有EBAZ4205呢,大家咸鱼一下50块,淘宝一下zynq 1000块。真香废话不多说,我们这节课开始学习用arm部分的ps端通过串口输出helloworld“Hello World!”是各种编程语言中最简单,同时也是最经典的入门实验。因此,我们将串口打印“Hello World”作为 ZYNQ 嵌入式系统的开篇实验,这也是我们步入 ZYNQ 的 PS 部分的始发点。通过本次实验我们将了解 ZYNQ 嵌入式系统的开发流程,熟悉 ZYNQ 嵌入式最小系统的搭建。1.1 简介首先我们来了解一下 ZYNQ 嵌入式系统的开发流程。如上图所示,开发流程大体可以分为 6 步。其中 step1 至 step4 为硬件设计部分,在 Vivado 软件中实 现;step5 为软件设计部分,在 SDK 软件中实现;step6 为功能的验证。复杂的程序还涉及 Debug,这个也是在 SDK 软件中实施。具体每一步的操作我们会在后面详细介绍。在简单了解 ZYNQ 嵌入式系统的开发流程后,接下来我们来看一下什么是 ZYNQ 嵌入式最小系统。ZYNQ 嵌入式最小系统的概念包括以下两个方面:一、它是使系统正常工作的最小条件;二、它是其他系统 建立的基础。如图 1.1.2 所示,以 ARM Cortex-A9 为核心、DDR3 为内存,加上传输信息使用的 UART 串口就构成了 ZYNQ 嵌入式最小系统。可以看到,这个最小系统只包括了 ZYNQ 中的 PS 部分。下面我们将按照 ZYNQ 嵌入式系统开发流程,一步步的搭建上图所示的最小系统。1.2 实验任务本章的实验任务是在EBAZ4205上搭建 ZYNQ 嵌入式最小系统,并使用串口打印“HelloWorld”信息。1.3 硬件设计在图 1.1.1 中,我们将 step1 至 step4 划分为硬件设计部分。创建vivado工程1-1 打开 Vivado,进入 Vivado 界面后,点击“Quick Start”栏的 “Create Project”。然后在弹出的创建Vivado 工程向导界面,点击“Next”。如下图所示:1-2 进入工程命名界面。设置工程名为“hello_world”,工程路径可使用任意路径,本章我们将该工程放在 F:\ZYNQ\Embedded_System 文件夹下。注意,工程名和路径只能由英文字母、数字和下划线组成,不能包含中文、空格以及特殊字符!确认已经勾选“Create project subdirectory”,点击“Next”,如下图所示:和约束文件的步骤,点击“Next”直接跳到器件选型界面。1-4 器件选型界面。所选择的器件型号一定要跟领航者核心板上的 ZYNQ 芯片型号保持一致,EBAZ4205s是zynq7010,选择XC7Z010,相对应的器件为“xc7z010clg400-1”。选中之后,点击“Next”。1-5 工程摘要界面。这是创建工程的最后一步,显示工程摘要信息,如图 1.3.6 所示。在此界面检查前面所设置的工程名称、所选择的器件型号等信息。如果发现工程设置有误,则可以通过 Back 按钮返回前面的步骤,重新设置。检查无误后点击“Finish”,完成工程创建。工程创建完成后的 Vivado 界面如图 1.3.7 所示。step2:使用 IP Integrator 创建 Processing SystemVivado 开发套件中提供了一个图形化的设计开发工具——IP 集成器(IP Integrator),在 IP 集成器中可以非常方便的插入各种功能模块(IP)。它支持关键 IP 接口的智能自动连接、一键式 IP 子系统生成、实时DRC 等功能,能够帮助我们快速组装复杂系统,加速设计流程。接下来我们将在 IP 集成器中完成 ZYNQ 嵌入式系统的搭建。2-1 在左侧导航栏(Flow Navigator)中,单击 IP Integrator 下的 Create Block Design。然后在弹出的对话框中指定所创建的 Block Design 的名称,在 Design name 栏中输入“system”。如下图所示:2-2 点击“OK”按钮,此时 Vivado 界面如下图所示。注意右侧的 Diagram 窗口,我们将在该窗口中以图形化的方式完成设计。2-3 接下来在 Diagram 窗口中给设计添加 IP。点击上图中箭头所指示的加号“+”,会打开 IP 目录(IPCatalog)。也可以通过快捷键 Ctrl + I,或者右键点击 Diagram 工作区中的空白位置,然后选择“ADD IP”。2-4 打开 IP 目录后,在搜索栏中键入“zynq”,找到并双击“ZYNQ7 Processing System”,将 ZYNQ7处理系统 IP 添加到设计中。2-5 添加完成后,ZYNQ7 Processing System 模块出现在 Diagram 中,如下图所示:2-6 双击所添加的 ZYNQ7 Processing System 模块,进入 ZYNQ7 处理系统的配置界面。界面左侧为页面导航面板,右侧为配置信息面板。如下图所示:下面我们简要地介绍一下页面导航面板中各个页面的作用。在 Zynq Block Design 页面,显示了 Zynq 处理系统(PS)的各种可配置块,其中灰色部分是固定的,绿色部分是可配置的,按工程实际需求配置。可以直接单击各种可配置块(以绿色突出显示)进入相应的配置页面进行配置,也可以选择左侧的页导航面板进行系统配置。PS-PL Configuration 页面能够配置 PS-PL 接口,包括 AXI、HP 和 ACP 总线接口。Peripheral IO Pins 页面可以为不同的 I/O 外设选择 MIO/EMIO 配置。MIO Configuration 页面可以为不同的 I/O 外设具体配置 MIO/EMIO。Clock Configuration 页面用来配置 PS 输入时钟、外设时钟,以及 DDR 和 CPU 时钟等。DDR Configuration 页面用于设置 DDR 控制器配置信息。SMC Timing Calculation 页面用于执行 SMC 时序计算。Interrupts 页面用于配置 PS-PL 中断端口。2-7 配置 PS 的 UART。点击 Peripheral I/O Pins 页面,出现以下 IO 引脚配置界面。以上摘抄至正点原子的下面是EBAZ4205不同的地方,配置不一样这是EBAZ4205的串口的电路原理图这个是ps端也就是arm端的引脚电路图,话说这是多少呢,我们对比一下其他相黑金,正点的电路图发现是MIO24 MIO25,这是串口1的复用引脚如下图所示,我们在 MIO24 和 MIO25 下点击 UART1,方框的颜色会变成绿色,与此同时这两个 MIO也会变成绿色。这就表明 MIO24 和 MIO25 被配置成了 UART 接口引脚,它们与 PS 中的串口电路 UART1相连接。点击uart1变成绿色就OK了,至于硬件电路图是怎么样呢,我们看一下pcb绿色圈圈的就是了,大家用ch340的串口连接就可以了注意由于我们的EBAZ4205供电都是3.3v我们要选择3.3V,两个都是配置串口1波特率为115200,然后点OK就好接下来配置ddr3控制器,这个不配置用不了,很重要,EBAZ4205是256MB的颗粒的,而且是16位的,因为是单科ddr3,和黑金和正点的不同,他们是2颗铸成32位的,Sky哥就是在这里吃了亏EBAZ4205只有一片ddr3 所以16位正点原子有两片 所以32位选择256M 大小 16位宽度的,如果选了32位就会出错的 ----重要2-9 配置 PS 的时钟。点击左侧的 Clock Configuration 页面,该界面主要是配置 ZYNQ PS 中的时钟频率。比如输入时钟默认是 33.33333Mhz,EBAZ4205的 PS 端输入时钟频率是33.3M的,默认就好。对于 CPU 的时钟、DDR 的时钟以及其它外设的时钟,我们直接保持默认设置即可。如下图所示:2-10 因为本实验是搭建 ZYNQ 的嵌入式最小系统,只需要使用 ZYNQ 中的 PS 端。因此我们将 PS 中 与 PL 端交互的接口信号移除。同样是在 Clock Configuration 页面,展开 PL Fabric Clocks,取消勾选 FCLK_CLK0,如下图所示:点击左侧的 PS-PL Configuration 页面,然后在右侧展开 General 下的 Enable Clock Resets,取消勾选其中的 FCLK_RESET0_N。另外在当前界面中展开 AXI Non Secure Enablement 下的 GP Master AXI Interface,取消勾选其中的 MAXI GP0 interface。如下图所示:2-11 配置 ZYNQ7 Processing System 完成,点击“OK”。返回到 Vivado 界面后,在 Diagram 中可以看到 ZYNQ7 Processing System IP 模块发生了变化,如图1.3.22 所示。 我们将其与图 1.3.11 作对比可以发现,ZYNQ7 PS 模块少了四个接口,这正是因为我们在配置 ZYNQ7 PS 的过程中移除了与 PL 相关的接口信号。2-12 我们点击上图中箭头所指示的位置“Run Block Automation”,会弹出如下图所示的对话框:在该界面中我们可以选择自动连接 IP 模块的接口,包括导出外部端口,甚至可以自动添加模块互联过程中所需的IP。在我们本次设计中只有一个IP模块,在左侧确认勾选processing_system7_0,然后点击“OK”。此时 ZYNQ7 PS 模块引出了两组外部接口,分别是 DDR 和 FIXED_IO,引出的接口将会被分配到 ZYNQ器件具体的引脚上。大家也可以通过点击 ZYNQ7 PS 模块接口处的加号“+”,来展开这两组接口,观察其中都有哪些信号。如下图所示:2-12 本次实验不需要添加其它 IP,直接按快捷键 Ctrl+S 保存当前设计。接下来点击下图箭头所指示的按钮,验证当前设计。验证完成后弹出对话框提示没有错误或者关键警告,点击“OK”,如下图所示:如果验证结果报出错误或者警告,大家需要重新检查自己的设计。step3:生成顶层 HDL 模块3-1 在 Sources 窗口中,选中 Design Sources 下的 sysetm.bd, 这就是我们刚刚完成的 Block Design 设计。右键点击 sysetm.bd,在弹出的菜单栏中选择“Generate Output Products”,如下图所示:3-2 弹出“Generate Output Products”对话框,如下图所示:经过摸索,大家选择画有颜色的好点,图片的数字8是代表使用的cpu数量,建议大家选择最大,vavado太慢了在“Generate”过程中会为设计生成所有需要的输出结果。比如 Vivado 工具会自动生成处理系统的 XDC约束文件,因此我们不需要手动对 ZYNQ PS 引出的接口(DDR 和 FIXED_IO)进行管脚分配。Generate 完成后,在弹出的对话框中点击“OK”。在 Sources 窗口中,点击“IP Source”标签页,可以看到 Generate 过程生成的输出结果。这个是创建顶层文件,相当于把arm单做fpga的ip核来使用在弹出的对话框中确认勾选“Let Vivado manage wrapper and auto-update”,然后点击“OK”。这两个的选择的区别是,第一个是可以修改的,第二个是只读文件,不可以修改,为了安全,避免我们误操作,我推挤选择下面的创建完成后,Design Sources 结构如下图所示:system_wrapper.v 为创建的 Verilog 文件,箭头所指的“品”字形图标指示当前模块为顶层模块。该模块使用 Verilog HDL 对设计进行封装,主要完成了对 block design 的例化,大家也可以双击打开该文件查看其中的内容。另外我们在图 1.3.30 中勾选了“Let Vivado manage wrapper and auto-update”,这样我们在修改了 BlockDesign 之后就不需要再重新生成顶层模块,Vivado 工具会自动更新该文件。step4:生成 Bitstream 文件并导出到 SDK如果设计中使用了 PL 的资源,则需要添加引脚约束并对该设计进行综合、实现并生成 Bitstream 文件。step4:生成 Bitstream 文件并导出到 SDK如果设计中使用了 PL 的资源,则需要添加引脚约束并对该设计进行综合、实现并生成 Bitstream 文件。由于本次实验未用到 PL 部分,所以无需生成 Bitstream 文件,只需将硬件导出到 SDK 即可。4-1 导出硬件。在菜单栏选择 File > Export > Export hardware。在弹出的对话框中,因为没有生成 bitstream 文件,所以无需勾选“Include bitstream”,直接点击“OK”按钮。这个bit文件是赛灵思fpga的配置文件,由于我们没有用到fpga的配置,所以不勾选了在上图中,因为选择了“Exort to ”,Vivado 工具会在当前工程目录下新建一个文件夹,名为“hello_world.sdk”,它是我们接下来软件开发的工作空间。 在 Export Hardware 的过程中,工具会将硬件以一个 ZIP 压缩文件的形式导出到该工作空间中,文件名 为“system_wrapper.hdf”。该文件包含了我们前面所搭建的硬件平台的配置信息,其后缀名.hdf 的含义为“Hardware Definition File”,即硬件定义文件。4-2 硬件导出完成后,在菜单栏中选择 File > Launch SDK,启动 SDK 开发环境。如下图所示:在弹出对话框中,直接点击“OK”,如下图所示:到这里,我们已经完成了 ZYNQ 嵌入式系统的硬件设计部分。接下来需要到 SDK 软件中进行应用程序开发,也就是软件设计部分。上面的硬件电路搭配完成,软件部分就简单了,像正点,黑金都有讲,本来不想写了,为了完整性,把他们的复制上来SDK 打开后,主页面会显示硬件描述文件 system.hdf 的内容。如图 1.4.1 所示,system.hdf 标签页显示了整个 PS 系统的地址映射信息。大家应该还记得,在启动 SDK 之前,我们将硬件以一个 ZIP 压缩文件(system_wrapper.hdf)的形式导 出到软件的工作空间。在 SDK 启动时,该文件会自动解压,大家可以在图 1.4.1 的左侧看到解压后的所有文件。其中,前四个文件(ps7_init_gpl.c、ps7_init_gpl.h、ps7_init.c 和 ps7_init.h)包含了 Zynq SOC 处理系统的初始化代码,以及 DDR、时钟、pll 和 MIO 的初始化设置信息。在初始化过程中,SDK 使用这些信息去配置相应的模块,使得应用程序能够在 PS 上运行。step5:在 SDK 中创建应用工程5-1 在菜单栏选择 File > New > Application Project, 新建一个 SDK 应用工程。5-2 在弹出的对话框中,输入工程名“hello_world”,其它选项保持默认即可,点击“Next”。5-3 选择工程模版 Hello World,然后点击“Finish”。5-4 SDK 创建了一个 hello_world 应用工程和 hello_world_bsp 板级支持包(BSP)工程。同时工具会自动对工程进行编译,并生成 ELF 文件“hello_world.elf”,如下图所示:另外工程创建完成后,SDK 主界面会打开 BSP 工程目录下的 system.mss 文件。MSS 是英文Microprocessor Software Specification 的缩写,即微处理器软件说明。该文件包含 BSP 的操作系统信息、硬 件设计中各个外设的软件驱动等信息。 5-5 双击打开 hello_world/src 工程目录下 helloworld.c 文件,可以看到源代码如下:#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
int main()
{
init_platform();//没啥用
print("Hello Sky \n\r");
print("Load program by JTAG \n\r");
cleanup_platform();//没啥用
return 0;
}可以看出和电脑上的编写hello差不多然后编译6-2 下载程序。右键点击 hello_world 工程,在弹出的菜单栏中选择 Run as > 1 Launch on Hardware(sysntem Debugger),如下图所示:6-3 下载完成后,应用程序会将字符串“Hello World”通过 ZYNQ PS 端的串口模块 UART01发送出去。 在 SDK Terminal 窗口可以看到上位机接收到的字符串,如下图所示:在 SDK 软件的下方,找到 SDK Terminal 窗口。如果界面中没有找到该窗口,或者操作过程中把该窗口给关闭了,则可以通过在菜单栏中选择 Window > Show View > Other,在 Show View 窗口中搜索添加SDK Terminal————————————————Sky测试结果如下图:原文链接:zynq7010之EBAZ4205之helloworld_章鱼哥学电子的博客-CSDN博客_ebaz4205
51单片机的辉煌过去本文引用地址:http://www.eepw.com.cn/article/201706/348052.htm51单片机指MCS-51系列单片机,CICS指令集。由Intel公司开发,其结构增加了如乘(MUL)、除(DIV)、减(SUBB)、比较(CMP)、16位数据指针、布尔代数运算等指令,以及串行通信能力和5个中断源,内有128个RAM单元及4K的ROM。其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。目前国内的51单片机市场主要为国产宏晶的产品STC系列其号称低功耗,稳定与廉价的特点。  学习51单片机的误区误区1:51单片机是学习的基础“51单片机是学习的基础”这句话本身并没有错。在我读本科的时候,当时它无疑是学习的基础——毕竟那时没有更高级的单片机可以供使用,国内更没有更高级的教材供参考,老师的水平也是参差不齐,而51单片机正符合这样的需求,不仅有大量的成型的教材,广泛的示例,当时工作的实际项目也是51单片机为主,于是51单片机理所当然的成为当时的学习基础。要知道笔者读本科的时候是2004年,即10年前的东西。按照莫尔定律,电子行业每18个月更新换代,10年前的技术现在已经更新了6代了——事实也确实如此。  目前32位Crtex-M系列单片机的各种教程已经普及,其学习的难度不断降低。以意法半导体公司的STM32F系列单片机来说,意法半导体在推广产品初期大量赠送了核心板。免费赠送的核心板不仅有流行的32位Cortex-M系列微处理器,更在板上集成在线调试器。随机附赠的光盘或者链接更是提供了大量的示例源代码。我们只需要安装开发环境即可直接编译与下载调试。这时,如果再说51单片机是学习嵌入式的基础肯定是不合时宜了。  误区2:51单片机可以学习寄存器的操作51单片机可以学习寄存器的操作,这一点儿是不容置疑的。我们分析一下其更深层的原因。在MSC-51单片机的编程环境中,最初是以汇编语言为主要编程语言。要知道汇编语言就是直接操作寄存器的,汇编语言是无法做到C语言的函数调用与封装的。如果说51单片机是以操作寄存器为优点,我觉得更应该说51单片机操作寄存器是一种无奈,是只有一个选项的选择题。  我们现在的Cortex-M系列单片机就无法学习寄存器了吗?显然不是。在硬件设计中,硬件的操作方式就是寄存器的操作,但是其实现却是可以不同。各微处理器提供的C语言库函数包其实质就是将操作寄存器的指令进行了C语言环境下的封装。我们这里用ST官方库函数举一个示例:  void USART_Init (USART1, *USART_InitStruct);//实现串口1的初始化,简单明了,无需注释  笔者在这里也想举一个示例来说明寄存器操作的步骤,但是操作寄存器实在是太复杂了,笔者不想去浪费时间去整理了。  通俗易懂的C语言,方便移植的C语言与硬件平台相对应的编译器联合,就能完成硬件的操作。有了简单、方便的方式,我们为什么还要考虑繁琐,复杂的汇编语言与寄存器操作呢?  误区3:51单片机的成本低成本都是左右应用的主要因素。项目的立项主要考虑成本,销售的定价主要成本。低成本的方案才会在市场里占有优势。可是,51单片机真就是最低成本了吗?非也。现在按照功能划分,部分Cortex-m0系列的32位单片机的成本也能做3元人民币。其性能已经是51单片机的好几倍了,而且更容易开发与维护。  还有另外一个成本:开发难度成本。51单片机不支持在线调试,有一些问题在编程初期没有发现,只有与硬件连接后才会显现出现来,例如控制操作中经常用到的延时。这时在线调试的巨大优势就体现出来了,它可以极其方便的查看微处理器当时的状态,使得问题的分析变得简单而透明。从而,有效降低开发的难度,缩短开发周期,节约开发资金。  误区4:51单片机入门简单51单片机入门简单?我对于这个观点持保留意见。想要入门51单片机,我不仅熟悉该款单片机外设,而且还要充分了解寄存器的某位的意义。对于时钟,定时器的配置必须了如指掌。这样无疑会增大我的学习难度与熟悉的周期。如果我们使用32位单片机的库函数模式,我们只需要具备C语言的知识,了解API函数,直接看已经注释过的寄存器意思即可,不需要了解其底层的硬件实现,更不需要了解某个寄存器某个指定位的意义了。这样,减少了我的工作量,从而降低了开发难度。你说是51单片机入门简单,还是32位Cortex内核微处理器简单?  嵌入式系统的学习是非常枯燥而又有挑战性的事情。由于与实际的硬件直接连接,不仅要考虑编写的正确性,而且还要考虑硬件的可靠性。这时,简单、高效的软件编写就变向的降低我们开发难度与风险。51单片机已经是明日黄花,向前看才是发展。是时候向51单片机说再见了!

我要回帖

更多关于 哪些变量类型是51单片机直接支持的 的文章

 

随机推荐