嵌入式串行端口程序设计实验

合集下载

《嵌入式系统开发(Linux)》实验8 串口设备应用编程

《嵌入式系统开发(Linux)》实验8 串口设备应用编程

《嵌入式系统原理及应用》实验报告班级:学号:姓名:日期:实验8 串口设备应用编程一、实验目的(1)编写一串口程序UART_test.c,向0号串口输出字符串。

二、实验设备硬件:PC机一台、mini2440开发板软件:Windows XP系统Vbox虚拟机,Ubuntu系统。

三、实验程序应用程序UART_test.c如下。

#include <fcntl.h>#include <stdio.h>#include <termio.h> //获得和修改终端参数#define DEVICE_NAME "/dev/ttySAC0" //串口1static int baud_rate= B115200; //B115200=115200 ;B1200=1200 ...int uart_init(void){int fd;struct termios my_uart; //建立驱动程序与用户之间的接口fd = open(DEVICE_NAME, O_RDWR|O_NONBLOCK); //打开串口1if (fd<0){return -1; //没有打开返回}tcgetattr(fd,&my_uart); //初始化,获取与终端相关的参数,返回的结果保存在termios结构体中tcflush(fd,TCIFLUSH); //刷新收到的数据但不读cfsetispeed(&my_uart,baud_rate); //设置终端的相关参数,设置波特率cfsetospeed(&my_uart,baud_rate); //一般,用户需要将输入输出函数的波特率设置成一样的my_uart.c_cflag |= CS8; //设置数据位my_uart.c_cflag &= ~PARENB; //无奇偶教验my_uart.c_cflag &= ~CSTOPB; //1位停止位my_uart.c_cflag |= CREAD; //允许接收my_uart.c_cflag |= CLOCAL; //保证程序不会成为端口的占有者if (tcsetattr(fd,TCSANOW,&my_uart) != 0){ //装载初始化参数.TCSANOW:改变的配置立即生效perror("Setup Serial!\n");close(fd);return -1;}return(fd);}int main(){int fd, i,j;char buf[1];if((fd = uart_init()) < 0){ //打开串口1,波特率为115200,8n1;printf(DEVICE_NAME" open err. \n");return -1;}for(i=0x20;i<='~';i++){。

嵌入式实验四 串行通信实验实验

嵌入式实验四  串行通信实验实验

嵌入式技术及应用实验四
实验四串行通信实验
一、实验目的
掌握单片机系统中串行端口的编程控制方法,学会实时程序的调试技巧。

二、实验原理
89C51单片机的串行端口结构上有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H;接收器是双缓冲结构;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。

单片机的串口可以由特殊功能寄存器SCON设置其工作方式,是否允许接受等,由PCON设置其波特率是否倍增。

发送和接收工作可以由中断完成,也可以不用中断,其中断矢量编号为4。

串口的处理主要涉及以下几个方面的内容:
串口初始化
发送程序设计(字节,字符串)
接收程序设计
是否用中断
三、实验内容
利用TX-1C实验板上及串口助手实现PC机与单片机的互相通信。

编写程序实现:当PC机给单片机发送一个字符后,单片机回传PC机发送给它的字符的十六进制数。

四、实验步骤
1、按实验内容要求在µ Vision中创建项目,编辑、调试、编译程序。

2、将编译生成的目标码文件(后缀为.Hex)下载到实验板上。

3、观察实验运行结果并记录。

1。

基于uClinux嵌入式操作系统的串行接口电路设计

基于uClinux嵌入式操作系统的串行接口电路设计

基于uClinux嵌入式操作系统的串行接口电路设计摘要:近年,嵌入式系统的设计被应用到越来越多的领域,但由于嵌入式操作系统的应用是与硬件设计紧密相关的,因此,根据不同的应用环境,需对uClinux内核源码进行适当的修改。

文中根据实际工程设计案例,对串行接口电路的硬件设计与uClinux内核的裁剪进行了详细的描述,为uClinux操作系统在嵌入式领域的应用起到了一定的借鉴作用。

关键词:串口电路;uClinux;嵌入式系统;裁剪TheDisignofSericalCircuitBasedonuClinuxEmbeddedSystemHUQing-wu,YUYing(ShenyangAircraftDesignandResearchInstitute,Shenyang110035,China)Abstract:Recently,embeddedsystemisusedinmoreandmoredomain,butbecauseitisbasedonthehardwarecircuit,souClinuxkernelmustbeeditaccordingtodifferentenviroment.Thispape rbasedontheengineeringcase,elaboratehowtodesignhardwareandhowtoedittheuClinuxkernel.Thissol utionisusefulfortheuClinuxembeddedsystem’sengineerapplication.Keywords:Serialcircuit;uClinux;Embeddedsystem;Edit根据实验任务的需要,实现上位机与下位机之间的快速数据传输,构建了以S3C4510B芯片为核心,配以存储容量为2M的Flash存储器,存储容量为16M的SDRAM寄存器,成功的将以串行接口电路为信息交换窗口的嵌入式系统应用到实际工程中。

3嵌入式系统设计实验三(串行端口程序设计)

3嵌入式系统设计实验三(串行端口程序设计)

实验三串行端口程序设计3.1、实验目的了解在linux环境下串行程序设计的基本方法。

掌握终端的主要属性及设置方法,熟悉终端I /O函数的使用。

学习使用多线程来完成串口的收发处理。

3.2、实验内容读懂程序源代码,学习终端I /O函数的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中。

3.3、预备知识有C语言基础。

掌握在Linux下常用编辑器的使用。

掌握Makefile 的编写和使用。

掌握Linux下的程序编译与交叉编译过程3.4、实验设备及工具硬件:UP-TECH S2410/P270 DVP嵌入式实验平台、PC机Pentium 500以上, 硬盘10G以上。

软件:PC机操作系统REDHAT LINUX 9.0+MINICOM+ARM-LINUX开发环境3.5、实验原理异步串行I /O方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。

数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。

接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。

为了恢复发送的信息,双方必须协调工作。

在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。

但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。

图3.1串行通信字符格式图3.1给出异步串行通信中一个字符的传送格式。

开始前,线路处于空闲状态,送出连续“1”。

传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。

每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。

后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。

也可以约定不要奇偶校验,这样就取消奇偶校验位。

最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5位或2位的时间宽度。

大学嵌入式-串口实验报告框架

大学嵌入式-串口实验报告框架

20XX年复习资料大学复习资料专业:班级:科目老师:日期:串口编程实验报告1)实验目的串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。

常用的串口是RS-232接口。

通过本次实验,主要对串口通讯的工作原理进行进一步了解,同时,进一步熟悉串口读写操作。

此外,在了解串口通信的同时,掌握一系列串口通讯调试时基本的检测方法。

2)串口工作原理串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universa l Serial Bus或者USB混淆)。

大多数计算机包含两个基于RS232的串口。

串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。

同时,串口通信协议也可以用于获取远程采集设备的数据。

串口通信的概念非常简单,串口按位(bit)发送和接收字节。

尽管比按字节(b yte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。

它很简单并且能够实现远距离通信。

比如IEEE488定义并行通行状态时,规定设备线总常不得超过20XX米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达20XXXX00米。

典型地,串口用于ASCII码字符的传输。

通信使用3根线完成:(1)地线,(2)发送,(3)接收。

由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。

其他线用于握手,但是不是必须的。

串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。

对于两个进行通行的端口,这些参数必须匹配:a,波特率:这是一个衡量通信速度的参数。

它表示每秒钟传送的bit的个数。

例如300波特表示每秒钟发送300个bit。

当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。

这意味着串口通信在数据线上的采样率为4800Hz。

通常电话线的波特率为20XXXX400,28800和36600。

波特率可以远远大于这些值,但是波特率和距离成反比。

三、串行端口程序设计

三、串行端口程序设计

三、串行端口程序设计1、实验目的了解在Linux 环境下串行程序设计的基本方法;掌握终端的主要属性及设置方法;熟悉终端IO 函数的使用;完成串口的收发处理。

2、实验内容读懂程序源代码,学习终端IO 函数tcgetattr(), tcsetattr(),tcflush()的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中。

3、预备知识有 C 语言基础;掌握 Makefile 的编写和使用;掌握 Linux 下的程序编译与交叉编译过程4、实验设备及工具硬件:UP-TECHPXA270-S 嵌入式开发板、PC 机Pentumn500 以上, 硬盘10G 以上。

软件:PC 机操作系统REDHAT LINUX 9.0 +MINICOM + ARM-LINUX 开发环境5、实验步骤(1)、将E盘下的03_tty复制到D:\PXA270\Share下;将虚拟机的共享打开;(2)、主机A的虚拟机添加串口,主机A的COM1与实验箱ttyS1相连,实验箱ttyS0与另一台PC机B相连;(3)、将每台虚拟机linux的/up-techpxa270/exp/basic/03_tty删除,将两台主机的D:\PXA270\Share\03_tty复制到虚拟机linux下的/up-techpxa270/exp/basic下;(4)、进入/up-techpxa270/exp/basic/03_tty 目录,使用vi 编辑器或其他编辑器阅读理解serial_rcv和serial_send的源代码。

(5)、分别编译serial_rcv和serial_send下的源文件生成可执行文件。

(6)、自主选择作为发送端或接收端,并修改相应的代码。

(7)、挂载PC机B的/up-techpxa270/exp到开发板的/mnt/nfs。

(8)、在开发板和PC机Alinux下运行可执行程序,一个发送数据,一个接收数据。

(9)、修改程序,使发送端发送一个特定字符给接收端,且发送端回显一个字符或一句话。

嵌入式串行端口程序设计

嵌入式串行端口程序设计

串行端口程序设计实验日志实验题目:串行端口程序设计实验目的:了解在linux环境下串行程序设计的基本方法。

掌握终端的主要属性及设置方法,熟悉终端I /O函数的使用。

学习使用多线程来完成串口的收发处理。

实验步骤及结果:1、阅读理解源码进入/root/share/exp/basic/03_tty目录,使用vi编辑器或其他编辑器阅读理解源代码。

2、编译应用程序运行make产生term可执行文件[root@BC root]# cd /root/share /exp/basic/03_tty/[root@BC 03_tty]# makearmv4l-unknown-linux-gcc -c -o term.o term.carmv4l-unknown-linux-gcc -o ../bin/term term.o -lpthreadarmv4l-unknown-linux-gcc -o term term.o -lpthread[root@BC 03_tty]# lsMakefile Makefile.bak term term.c term.o tty.c注意:如果以前同学已经编译过,可以先用make clean 命令先来清楚以前编译过的文件,然后再make。

3、下载调试先像实验一一样,把串口、网线、电源线接好,在虚拟linux终端切换到minicom终端窗口,配置好实验箱的IP地址,然后使用NFS mount宿主机(虚拟linux)的/root/share 到目标板(实验箱)/host目录。

进入/host 的exp\basic\03_tty目录,运行term,观察运行结果的正确性。

依次命令如下[root@BC root]# minicom[/mnt/yaffs]ifconfig eth0 172.16.38.134[/mnt/yaffs] mount -t nfs 172.16.38.133:/root/share /host[/mnt/yaffs]cd /host/exp/basic/03_tty/[/host/exp/basic/03_tty]./termread modemsend data123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX注意:如果在执行./term时出现下面的错误,可以通过我们前文提到的方法建立一个连接来解决。

串行接口实验报告

串行接口实验报告

一、实验目的1. 理解串行接口的基本原理和功能。

2. 掌握串行接口的硬件连接和软件编程方法。

3. 学习使用串行接口进行数据传输。

4. 了解串行接口在实际应用中的重要性。

二、实验原理串行接口是一种数据传输方式,将数据按位顺序一位一位地传输。

与并行接口相比,串行接口具有传输距离远、传输速度快、抗干扰能力强等优点。

在串行接口中,数据以一定的速率、格式和协议进行传输。

串行接口的基本原理是:发送端将数据按位发送,接收端按照同样的速率和格式接收数据,并通过软件或硬件解码恢复原始数据。

串行接口的硬件连接主要包括发送端和接收端,其中发送端包括发送数据缓冲器、串行移位寄存器、时钟发生器等;接收端包括接收数据缓冲器、串行移位寄存器、时钟恢复电路等。

三、实验内容1. 硬件连接(1)根据实验要求,连接实验板上的串行接口电路。

(2)将实验板与计算机连接,确保通信线路畅通。

2. 软件编程(1)使用C语言编写串行接口发送和接收数据的程序。

(2)设置串行接口的波特率、数据位、停止位和校验位等参数。

(3)实现数据的发送和接收,并对接收到的数据进行处理。

3. 实验步骤(1)启动实验环境,编译并运行串行接口发送和接收数据的程序。

(2)在计算机上打开串行通信调试软件,如串口调试助手。

(3)设置调试软件的波特率、数据位、停止位和校验位等参数,确保与实验程序设置一致。

(4)在调试软件中发送数据,观察实验板接收到的数据是否正确。

(5)修改实验程序,调整发送和接收的数据,验证串行接口通信功能。

四、实验结果与分析1. 实验结果通过实验,成功实现了串行接口的发送和接收功能。

在计算机上发送数据,实验板接收到的数据与发送数据一致,说明串行接口通信功能正常。

2. 实验分析(1)在实验过程中,需要注意串行接口的波特率、数据位、停止位和校验位等参数设置,确保与接收端一致。

(2)在实际应用中,串行接口通信需要考虑抗干扰能力,可以通过采用差分传输、增加滤波电路等措施来提高通信质量。

嵌入式实验报告_ARM的串行口实验

嵌入式实验报告_ARM的串行口实验

嵌入式实验报告_ARM的串行口实验一、实验目的本次实验的主要目的是深入了解和掌握 ARM 处理器的串行口通信原理及编程方法。

通过实际操作和编程实践,能够实现基于 ARM 的串行数据收发功能,为后续在嵌入式系统中的应用打下坚实的基础。

二、实验原理串行通信是指数据一位一位地顺序传送。

在 ARM 系统中,串行口通常由发送器、接收器、控制寄存器等组成。

发送器负责将并行数据转换为串行数据并发送出去,接收器则将接收到的串行数据转换为并行数据。

控制寄存器用于配置串行口的工作模式、波特率、数据位长度、停止位长度等参数。

波特率是串行通信中的一个重要概念,它表示每秒传输的比特数。

常见的波特率有 9600、115200 等。

在本次实验中,需要根据实际需求设置合适的波特率,以保证数据传输的准确性和稳定性。

三、实验设备与环境1、硬件设备:ARM 开发板、USB 转串口线、电脑。

2、软件环境:Keil MDK 集成开发环境、串口调试助手。

四、实验步骤1、建立工程在 Keil MDK 中创建一个新的工程,选择对应的 ARM 芯片型号,并配置工程的相关参数,如时钟频率、存储分配等。

2、编写代码(1)初始化串行口首先,需要设置串行口的工作模式、波特率、数据位长度、停止位长度等参数。

例如,设置波特率为 115200,数据位长度为 8 位,停止位长度为 1 位。

(2)发送数据通过编写发送函数,将要发送的数据写入串行口的数据寄存器,实现数据的发送。

(3)接收数据通过中断或者查询的方式,读取串行口的接收寄存器,获取接收到的数据。

(4)主函数在主函数中,调用发送函数发送数据,并处理接收的数据。

3、编译下载编写完成代码后,进行编译,确保代码没有语法错误。

然后,将生成的可执行文件下载到 ARM 开发板中。

4、连接设备使用 USB 转串口线将 ARM 开发板与电脑连接起来,并在电脑上打开串口调试助手,设置与开发板相同的波特率等参数。

5、测试实验在串口调试助手中发送数据,观察开发板是否能够正确接收并回传数据。

串行口实验报告

串行口实验报告

一、实验目的1. 理解串行通信的基本原理和常用协议。

2. 掌握单片机串行口的工作方式及其程序设计。

3. 通过实际操作,实现单片机之间的串行通信,验证通信协议的正确性。

4. 学习串行通信在实际应用中的调试和故障排除方法。

二、实验设备1. 单片机开发板(如STC89C52、AT89C51等)2. 串行通信模块(如MAX232、CH340等)3. 连接线(杜邦线、串行线等)4. 电脑(用于调试程序)5. 串口调试工具(如串口助手、PuTTY等)三、实验原理串行通信是指数据在一条线路上按位顺序传送,一次只能传送一位。

与并行通信相比,串行通信具有成本低、传输距离远、易于实现等优点。

串行通信的常见协议有RS-232、RS-485、I2C、SPI等。

本实验采用RS-232协议,通过单片机的串行口实现数据的发送和接收。

四、实验步骤1. 硬件连接将单片机的串行口(如RXD、TXD)与串行通信模块的RXD、TXD引脚相连,并通过杜邦线连接到电脑的串口。

2. 软件设计(1)编写单片机程序,实现数据的发送和接收。

(2)编写电脑端程序,用于发送和接收数据。

3. 程序调试(1)将单片机程序烧写到单片机中。

(2)在电脑端打开串口调试工具,设置波特率、数据位、停止位、校验位等参数。

(3)通过串口调试工具发送数据,观察单片机接收到的数据是否正确。

4. 实验结果分析通过实验,成功实现了单片机之间的串行通信。

在调试过程中,遇到以下问题:(1)波特率设置不正确:波特率设置错误会导致数据无法正确接收。

通过查阅相关资料,找到了正确的波特率设置方法。

(2)串行口初始化错误:串行口初始化参数设置错误会导致通信中断。

通过查阅相关资料,找到了正确的初始化方法。

(3)数据接收错误:数据接收过程中,可能出现乱码现象。

通过检查程序代码,发现是数据接收缓冲区溢出导致的。

通过调整接收缓冲区大小,解决了该问题。

五、实验总结通过本次实验,掌握了单片机串行通信的基本原理和编程方法。

嵌入式ARM串口实验报告

嵌入式ARM串口实验报告

实验五串口通信实验1实验目的(1) 掌握ARM的串行口工作原理;(2) 编程实现ARM的UART通讯;(3) 掌握S3C2410寄存器配置方法。

2 实验设备(1) S3C2410嵌入式开发板,JTAG仿真器。

(2) 软件:PC机操作系统Windows XP,ADS1.2集成开发环境,仿真器驱动程序,超级终端通讯程序。

3 实验内容实现查询方式串口的收发功能。

接收来自串口(通过超级终端)的字符并将接收到的字符发送到超级终端。

4 实验步骤(1) 参照模板工程,新建一个工程UART,添加相应的文件,并修改UART 的工程设置;相关设置如下列图所示:图5.1 设置R0 Base图5.2 添加Target图5.3 配置(2) 创建xinint.c和init.c并加入到工程UART中;(3) 编写串口操作函数实现如下功能:循环接收串口送来的数据,并将接收到的数据发送回去;参考代码如下:(1)串口初始化程序MMU_Init(); //初始化内存管理单元//设置系统时钟ChangeClockDivider(1,1); // 1:2:4ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHzPort_Init(); //初始化I/O口Uart_Init(0,115200); //初始化串口Uart_Select(0); //选择串口0(2)发送数据while(!(rUTRSTAT0&0x2)); //等待发送缓冲空rUTXH0=data; //将数据写到数据端口(3)接收数据while(rUTRSTAT0&0x1==0x0); //等待数据data=rURXH0; //读取数据(4) 编译UART;(5) 将计算机的串口接到开发板的UART0上;(6) 运行超级终端,选择正确的串口号,并将串口设置位:波特率(115200)、奇偶校验(None)、数据位数(8)和停止位数(1),无流控,打开串口;(7) 运行程序,在超级终端中输入的数据将回显到超级终端上,结果如图5.4所示:图5.4 运行结果(8) 修改程序代码,使用户输入的数字在超级终端显示;结果如图5.5所示:图5.5 运行结果图5.6 运行结果5 实验总结通过这次实验我掌握了串口的使用方法,串口初始化、发送数据和接收数据,为以后的实验奠定了基础,通过有关书籍我知道在嵌入式系统中串口是一个重要的资源,常用来做输入输出设备。

嵌入式串口的实验原理

嵌入式串口的实验原理

嵌入式串口的实验原理嵌入式系统中的串口是一种常用的通信接口,它可以实现与外设或其他设备之间的数据传输。

在嵌入式系统中,串口通信常用于与计算机进行数据交互、与外部传感器进行数据采集等应用中。

串口的原理可以分为两个方面:硬件原理和软件原理。

硬件原理部分:1. 串口通信原理串口通信是通过一对数据线进行数据传输的半双工通信方式。

数据通过串口发送和接收,通过接收线路将数据从发送端发送到接收端。

在通信过程中,发送端将数据按照一定的格式进行编码,并通过数据线发送出去,接收端则通过解码将数据恢复。

2. 串口引脚串口通信需要使用几个特定的引脚来完成通信任务。

通常包括发送引脚(TXD)、接收引脚(RXD)以及其他一些控制信号引脚(如RTS、CTS等)。

发送引脚用于发送数据,接收引脚用于接收数据,而控制信号引脚用于控制通信的流程。

3. 串口通信协议串口通信协议是指在数据传输过程中,数据的格式和传输规则。

通常情况下,串口通信协议由起始位、数据位、校验位和停止位组成。

起始位用于告知接收端数据的开始,数据位用于存储传输的实际数据,校验位用于检验数据的完整性,停止位用于标识数据传输的结束。

软件原理部分:1. 串口通信初始化在嵌入式系统中使用串口通信之前,需要对串口进行初始化配置。

一般来说,需要设置波特率、数据位、停止位、校验位等参数,以确保发送端和接收端的通信参数一致。

2. 串口数据发送在发送数据时,首先将待发送的数据写入串口的数据寄存器中,然后将数据传输到发送缓冲区。

当发送缓冲区为空时,串口会自动将数据从发送缓冲区发送到接收端。

3. 串口数据接收在接收数据时,首先需要检测串口的接收缓冲区是否有新的数据到达。

如果接收缓冲区有新的数据,可以通过读取串口的数据寄存器来获取数据,并进行相应的处理操作。

总结:嵌入式串口的实验原理主要涉及硬件和软件两个方面。

硬件方面包括串口通信的原理、引脚连接和通信协议。

软件方面包括配置串口的通信参数、发送数据和接收数据等操作。

嵌入式串口实验

嵌入式串口实验

2.5 串口实验一、实验目的学习使用串口实现与 PC 机的通讯。

正确配置 CC2530 的串口来实现串口通信的功能。

二、实验环境硬件:PC 机,EBDCC2530 节点板,USB 接口仿真器,6Pin 串口线,交叉串口线。

软件:Windows98/2000/NT/XP,IAR 集成开发环境,串口调试助手。

三、实验原理下面我们来介绍串口实验所学习到的主要寄存器。

CLKCONCMD:时钟频率控制寄存器。

D7 D6 D5~D3 D2~D032KHZ 时间振荡器选择系统时钟选择定时器输出标记系统主时钟选择D7 位为 32KHZ 时间振荡器选择,0为32KRC震荡,1为32K晶振。

默认设置为 1。

D6 位为系统时钟选择。

0 为 32M晶振,1为16MRC 震荡。

当D7位为0时D6必须为1。

D5~D3 为定时器输出标记。

000 为 32MHZ,001 为 16MHZ,010 为 8MHZ,011为 4MHZ,100 为 2MHZ,101 为 1MHZ,110 为 500KHZ,111 为 250KHZ。

默认为 001。

需要注意的是:当D6 为 1 时,定时器最高可采用频率为 16MHZ。

D2~D0:系统主时钟选择:000 为 32MHZ,001 为 16MHZ,010 为 8MHZ,011 为 4MHZ,100 为 2MHZ,101 为 1MHZ,110 为 500KHZ,111 为 250KHZ。

当 D6 为 1 时,系统主时钟可采用的最高频率为 16MHZ。

CLKCONSTA:时间频率状态寄存器。

D7 D6 D5~D3 D2~D032KHZ 时间振荡器选择当前系统时钟当前定时器输出标记当前系统主时钟D7 位为当前 32KHZ 时间振荡器频率。

0 为 32KRC 震荡,1 为 32K 晶振。

D6 位为当前系统时钟选择。

0 为 32M 晶振,1 为 16MRC 震荡。

D5~D3 为当前定时器输出标记。

000 为 32MHZ, 001 为 16MHZ, 010 为 8MHZ,011 为 4MHZ,100 为 2MHZ,101 为 1MHZ,110 为 500KHZ,111 为 250KHZ。

嵌入式系统技术实验报告

嵌入式系统技术实验报告

南京理工大学嵌入式系统技术实验报告作者: 学号:学院(系):班级:指导老师:孙瑜实验日期: 2014年11月实验一:熟悉Linux 开发环境一、实验目的熟悉Linux开发环境,学会基于S3C2410的Linux开发环境的配置和使用。

使用Linux的armv4l-unknown-linux-gcc编译,使用基于NFS方式的下载调试,了解嵌入式开发的基本过程。

二、实验仪器硬件:UP-NETARM2410-S嵌入式实验平台、PC机。

软件:PC机操作系统REDHAT LINUX 9.0+MINICOM+ARM-LINUX开发环境三、实验内容本次实验使用Redhat Linux 9.0操作系统环境,安装ARM-Linux的开发库及编译器。

创建一个新目录,并在其中编写hello文件。

学习在Linux下的编程和编译过程,以及ARM开发板的使用和开发环境的设置。

下载已经编译好的文件到目标开发板上运行。

四、实验步骤1、建立工作目录[root@zxt smile]# mkdir hello[root@zxt smile]# cd hello2、编写程序源代码实际的hello.c源代码较简单,如下:#include <stdio.h>void main(void){printf(“hello world \n”);}用下面的命令来编写“hello.c”的源代码,进入hello目录使用vi命令来编辑代码:[root@zxt hello]# vi hello.c按“i”或者“a”进入编辑模式,录入上面的代码,完成后按Esc键进入命令状态,再用命令“:wq ”,保存并退出。

这样在当前目录下建立了一个名为“hello.c”的文件。

3、编译链接要使上面的“hello.c”程序能够运行,将其经过编译和连接,生成可执行文件。

输入 gcc hello.c -o hello 进行编译,再输入 ./hello 运行程序,观察结果1。

嵌入式系统实验报告-串行通信实验

嵌入式系统实验报告-串行通信实验

《嵌入式系统实验报告》串行通信实验南昌航空大学自动化学院050822XX 张某某一、实验目的:掌握μC/OS-II操作系统的信号量的概念。

二、实验设备:硬件:PC机1台;MagicARM2410教学实验开发平台台。

软件:Windows 98/2000/XP操作系统;ADS 1.2集成开发环境。

三、实验内容:实验通过信号量控制2个任务共享串口0打印字符串。

为了使每个任务的字符串信息(句子)不被打断,因此必须引入互斥信号量的概念,即每个任务输出时必须独占串口0,直到完整输出字符串信息才释放串口0。

四、实验步骤:(1)为ADS1.2增加DeviceARM2410专用工程模板(若已增加过,此步省略)。

(2)连接EasyJTAG-H仿真器和MagicARM2410实验箱,然后安装EasyJTAG-H仿真器(若已经安装过,此步省略),短接蜂鸣器跳线JP9。

(3)启动ADS 1.2,使用ARM Executable Image for DeviceARM2410(uCOSII)工程模板建立一个工程UART0_uCOSII。

(本范例在ADS文件夹中操作)(4)在ADS文件夹中新建arm、Arm_Pc、SOURCE文件夹。

将μC/OS 2.52源代码添加到SOURCE文件夹,将移植代码添加到arm文件夹,将移植的PC服务代码添加到Arm_Pc文件夹。

(5)在src组中的main.c中编写主程序代码。

(6)选用DebugRel生成目标,然后编译链接工程。

(7)将MagicARM2410实验箱上的UART0连接跳线JP1短接,使用串口延长线把MagicARM2410实验箱的CZ11与PC机的COM1连接。

注意:CZ11安装在MagicARM2410实验箱的机箱右侧。

(8)PC机上运行“超级终端”程序(在Windows操作系统的【开始】->【程序】->【附件】->【通讯】->【超级终端】),新建一个连接,设置串口波持率为115200,具体设置参考图3.5,确定后即进入通信状态。

嵌入式系统设计与应用-实验3 -串行通信实验

嵌入式系统设计与应用-实验3 -串行通信实验

昆明理工大学机电工程学院嵌入式系统设计与应用实验报告书实验名称:串行通信实验年级专业及班级:级机自班姓名:学号:指导教师:张文斌、高贯斌评定成绩:教师评语:实验时间: 2014 年 12 月 27 日实验三串行通信实验一、实验目的熟悉XS128单片机的SCI串口的使用,掌握查询和中断方式的发送和接收功能。

二、实验原理SCI允许单片机和其他器件(包括其他单片机)进行全双工、异步、串行通信。

SCI 由波特速率发生器、发射器和接收器组成。

发射器和接收器独立运行,尽管它们使用同一波特率发生器。

在正常运行期间,单片机监控SCI的状态,写入将要发送的数据,读出接收到的数据。

XS128单片机的SCI模块的功能框图如下图所示图1.SCI模块的功能框图扩展板的左上部提供了TTL 电平与RS-232C 电平的转换芯片MAX232,MAX232 提供了2 组电平转换。

第一组:RS-232C 电平(R1IN)→TTL 电平(R1OUT)TTL 电平(T1IN)→RS-232C 电平(T1OUT)第二组:RS-232C 电平(R2IN)→TTL 电平(R2OUT)TTL 电平(T2IN)→RS-232C 电平(T2OUT)在实际使用中,TTL 电平的输入、输出引脚分别与MCU 的发送、接收引脚连接;RS-232C电平的输入、输出引脚分别与其它设备(如PC 机)的发送、接收引脚连接。

串行通信的原理图如图2所示。

图中T1OUT 和T2OUT 信号各接一盏小灯,当微处理器发送数据时,小灯会点亮。

三、实验连线及要求图2.SCI通信模块原理图本实验有4个小实验组成,分别为:查询方式发送实验、中断方式发送实验、查询方式接收实验、中断方式接收实验。

查询方式发送是指单片机按照一定时间间隔按时读取串口的状态,如果串口处于空闲状态,就将待收的数据发送出去。

中断方式发送是指,一旦串口处于空闲状态,串口就对单片机触发一个中断,单片机则将待收的数据发送出去。

嵌入式串口和网络编程实验报告材料

嵌入式串口和网络编程实验报告材料

嵌入式实验报告题目:linux串口和网络编程一、实验目的:1、强化本学期所学的相关的内容。

2、掌握串口相关设置。

3、强化基于TCP网络传输的三次握手。

4、自学Linux线程的使用。

二、实验内容:本试验基于server和client的透明传输来实现类似于QQ的聊天功能。

三、实验过程:1、linux开发环境的建立2、嵌入式linux系统的搭建1>BootLoader的移植2>linux系统的裁剪与移植Linux内核裁剪./make_image生成自己的uImage2638上电验证:修改hostname为:whmtt./mkcramfsdisk_new 生成rootfs_new.cramfs大小从老师给的40000到37b00(因为有的没有用到,大小变小了):上电验证:3、客服端编程client.c相关代码:#include <stdio.h>#include <sys/socket.h>#include <unistd.h>#include <sys/types.h>#include <netinet/in.h>#include <stdlib.h>#include <strings.h>#include <string.h>#define SERVER_PORT 20000 //设置服务端口#define CLIENT_PORT ((20001+rand())%65536) //设置客户端端口(随机)#define BUFFER_SIZE 256#define LENGTH_OF_LISTEN_QUEUE 10 //可窃听队列长为10#define WELCOME_MESSAGE "welcome to connect the server."void usage(char* name){printf( "usage: %s IpAddr\n " ,name);}struct sockaddr_in servaddr,cliaddr;int servfd,clifd,length=0;struct sockaddr_in servaddr,cliaddr;socklen_t socklen=sizeof(servaddr);char buf[BUFFER_SIZE],buf2[BUFFER_SIZE];pthread_t tidp,tidp2;int pth;int runflag=0;void *Thread1(void *arg) /*等待runflag为1,当为1时清空buf,同时接收来自server的数据并输出。

嵌入式实验:串口通信实验

嵌入式实验:串口通信实验

串口通信实验一、实验内容实现查询方式串口的收发功能。

介绍来自串口的字符,并将接收到的字符发送到超级终端。

二、实验代码void Main(void){/* 配置系统时钟*/ChangeClockDivider(1,1); // 1:2:4ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz/* 初始化端口*/Port_Init();/* 初始化串口*/Uart_Init(0,115200);Uart_Select(0);/* 打印提示信息*/PRINTF("\n---UART测试程序---\n");PRINTF("\n请将UART0与PC串口进行连接,然后启动超级终端程序(115200, 8, N, 1)\n");PRINTF("\n从现在开始您从超级中断发送的字符将被回显在超级终端上\n");/* 开始回环测试*/while(1){unsigned char ch = 'a';ch = Uart_Getch();Uart_SendByte(ch);if(ch == 0x0d)Uart_SendByte(0x0a);}}三、实验结果及分析1.成功运行程序后,建立一个超级终端,然后在”Debug”中依次选择”Remote Connect”, “Download “之后,会出现如图1-1所示。

图1-12.然后在”Debug”中选择”Go”之后,超级终端(已在超级终端上输入字符串)会出现如图1-2所示的界面。

图1-2四、实验体会简述串行接口的工作原理以及串行接口的优缺点。

答:当两台数字设备之间的传输距离较远时,数据往往以串行方式传输。

串行通信的数据时一位一位地进行传输的,在传输中每一位数据都占据一个固定的时间长度。

串行接口具有传输线少、成本低等优点,特别适合远距离传送。

但是如果传送的数据比较多时,传输的速度就比较慢了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.3 串行端口程序设计一、实验目的¾了解在l inux 环境下串行程序设计的基本方法。

¾掌握终端的主要属性及设置方法,熟悉终端I /O 函数的使用。

¾学习使用多线程来完成串口的收发处理。

二、实验内容读懂程序源代码,学习终端I/O 函数的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中。

三、预备知识¾有C语言基础。

¾掌握在L inux 下常用编辑器的使用。

¾掌握M akefile 的编写和使用。

¾掌握L inux 下的程序编译与交叉编译过程四、实验设备及工具硬件:UP-TECH S2410/P270 DVP 嵌入式实验平台、PC 机P entium 500 以上, 硬盘10G 以上。

软件:PC 机操作系统R EDHAT LINUX 9.0+MINICOM+ARM-LINUX 开发环境五、实验原理异步串行I/O 方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。

数据的各不同位可以分时使用同一传输通道,因此串行I/O 可以减少信号连线,最少用一对线即可进行。

接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。

为了恢复发送的信息,双方必须协调工作。

在微型计算机中大量使用异步串行I/O 方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。

但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。

图2.3.1 串行通信字符格式图2.3.1 给出异步串行通信中一个字符的传送格式。

开始前,线路处于空闲状态,送出连续“1”。

传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。

每个字符的数据位长可以约定为5位、6 位、7 位或8位,一般采用A SCII 编码。

后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。

也可以约定不要奇偶校验,这样就取消奇偶校验位。

最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5 位或2位的时间宽度。

至此一个字符传送完毕,线路又进入空闲,持续为“1”。

经过一段随机的时间后,下一个字符开始传送才又发出起始位。

每一个数据位的宽度等于传送波特率的倒数。

微机异步串行通信中,常用的波特率为50,95,110,150,300,600,1200,2400,4800,9600 等。

接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:z奇偶错:在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。

z帧格式错:一个字符从起始位到停止位的总位数不对。

z溢出错:若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。

每一种错误都会给出相应的出错信息,提示用户处理。

一般串口调试都使用空的MODEM 连接电缆,其连接方式如下:图2.3.2 实用R S-232C 通讯连线六、程序分析Linux 操作系统从一开始就对串行口提供了很好的支持,为进行串行通讯提供了大量的函数,我们的实验主要是为掌握在L inux 中进行串行通讯编程的基本方法。

本实验的程序流程图如下:图2.3.3 串口通讯实验流程图本实验的代码如下:#include <termios.h>#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <sys/signal.h>#include <pthread.h>#define BAUDRA TE B115200#define COM1 "/dev/ttyS0"#define COM2 "/dev/ttyS1"#define ENDMINITERM 27 /* ESC to quit miniterm */#define FALSE 0#define TRUE 1volatile int STOP=FALSE;volatile int fd;void child_handler(int s){printf("stop!!!\n");STOP=TRUE;}/*--------------------------------------------------------*/ void* keyboard(void * data){int c;for (;;){c=getchar();if( c==ENDMINITERM){ STOP=TRUE;break ;}}return NULL;}/*--------------------------------------------------------*/ /* modem input handler */void* receive(void * data){int c;printf("read modem\n");while (STOP==FALSE){read(fd,&c,1); /* com port */write(1,&c,1); /* stdout */}printf("exit from reading modem\n");return NULL;}/*--------------------------------------------------------*/ void* send(void * data){int c='0';printf("send data\n");while (STOP==FALSE) /* modem input handler */{c++;c %= 255;write(fd,&c,1); /* stdout */usleep(100000);}return NULL; }/*--------------------------------------------------------*/int main(int argc,char** argv){struct termios oldtio,newtio,oldstdtio,newstdtio;struct sigaction sa;int ok;pthread_t th_a, th_b, th_c;void * retval;if( argc > 1)fd = open(COM2, O_RDWR );elsefd = open(COM1, O_RDWR ); //| O_NOCTTY |O_NONBLOCK);if (fd <0) {error(COM1);exit(-1);}tcgetattr(0,&oldstdtio);tcgetattr(fd,&oldtio); /* save current modem settings */tcgetattr(fd,&newstdtio); /* get working stdtio */newtio.c_cflag = BAUDRA TE | CRTSCTS | CS8 | CLOCAL | CREAD; /*ctrol flag*/ newtio.c_iflag = IGNPAR; /*input flag*/newtio.c_oflag = 0; /*output flag*/newtio.c_lflag = 0;newtio.c_cc[VMIN]=1;newtio.c_cc[VTIME]=0;/* now clean the modem line and activate the settings for modem */ tcflush(fd, TCIFLUSH);tcsetattr(fd,TCSANOW,&newtio); /*set attrib*/sa.sa_handler = child_handler;sa.sa_flags = 0;sigaction(SIGCHLD,&sa,NULL); /* handle dying child */pthread_create(&th_a, NULL, keyboard, 0);pthread_create(&th_b, NULL, receive, 0);pthread_create(&th_c, NULL, send, 0);pthread_join(th_a, &retval);pthread_join(th_b, &retval);pthread_join(th_c, &retval);tcsetattr(fd,TCSANOW,&oldtio); /* restore old modem setings */tcsetattr(0,TCSANOW,&oldstdtio); /* restore old tty setings */close(fd);exit(0);}下面我们对这个程序的主要部分做一下简单的分析¾头文件#include <stdio.h> /*标准输入输出定义*/#include <stdlib.h> /*标准函数库定义*/#include <unistd.h> /*linux 标准函数定义*/#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h> /*文件控制定义*/#include <termios.h> /*PPSIX 终端控制定义*/#include <errno.h> /*错误号定义*/#include <pthread.h> /*线程库定义*/¾打开串口在L inux 下串口文件位于/dev 下,一般在老版本的内核中串口一为/dev/ttyS0 ,串口二为/dev/ttyS1,在我们的开发板中串口设备位于/dev/tts/下,因为开发板中没有t tyS0这个设备,所以我们要建立一个连接,方法如下:[/mnt/yaffs] cd /dev[/dev] ln –sf /dev/tts/0 ttyS0打开串口是通过标准的文件打开函数来实现的int fd;fd = open( "/dev/ttyS0", O_RDWR); /*以读写方式打开串口*/ if (-1 == fd){ /* 不能打开串口一*/ perror(" 提示错误!");}¾串口设置最基本的设置串口包括波特率设置,效验位和停止位设置。

相关文档
最新文档