嵌入式操作教程:2-12 RS232串口通信实验(查询方式)

本文详细介绍了UART的工作原理、特点、通信模式,以及RS232串口通信的机制,包括其优点和局限性。通过实验步骤和实例,展示了如何在STM32平台上配置和使用UART进行数据收发,以及如何通过查询方式实现串口通信。
摘要由CSDN通过智能技术生成

一、实验目的

了解UART 的功能和结构,学习RS232串口通信协议,并实现通过查询方式进行 RS232 串口通信收发。

二、实验原理

RS232

RS232接口是现在主流的串行通信接口之一,被广泛用于计算机串行接口外设连接。 RS232标准的接口,在电压处于-3V-15V时处于逻辑1状,当电压在+3V+15V时,处于逻辑0状态。另外在型号线这块RTS/CTS和DTR/DSR以及CD/RI这些信号线都是以前较老形式的,现在常用的信号线就是RXD/TXD和GND这3条,如果不连接GND地线的话可能会出现乱码。在接头上的2和3接口是接收和发送,5接口就是地线,使用这三条就可以完成接收和发送数据。

image.png

RS232通信的主要特点

(1)全双工数据传输

串行数据流可以同时进行双向传输。

(2)点对点通信

RS232只能实现点对点的通信方式。

RS232接口的局限性

(1)接口信号电平值较高,接口电路芯片容易损坏。

(2)传输速率低,最高波特率19200bps。

(3)抗干扰能力较差。

(4)传输距离有限,一般在15m以内。

(5)只能实现点对点的通讯方式。

RS232接口

UART1_RXD、UART1_TXD和RS232_UART2_TXD、RS232_UART2_RXD。RS232规定用电平表示数据,因此线路就是单线路的,用两根线才能达到全双工的目的。

image.png

实验板上的CON14和CON15是由UART1和UART2通过MAX3232串口电平转换芯片得到的RS232串口,使用的是9针DB9接口。在本实验中使用的是UART1串口。

image.png

UART

全称Universal Asynchronous Receiver/Transmitter,通用异步收发传输器。 UART是一种通用串行数据总线,用于异步通信,异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,但在同一个字符中的两个相邻位间的时间间隔是固定的。该总线双向通信,可以实现全双工传输和接收。串行通信是指利用一条传输线将资料一位位地顺序传送,特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。在嵌入式设计中,UART用于主机与辅助设备通信,如PC机通信包括与监控调试器和其它器件。

UART特点

(1)通用异步

(2)串行低速总线

(3)全双工

(4)需要约定通信速率

(5)只能点对点通信

image.png

UART的功能框图

image.png

UART通信模式

(1)单工:数据传输仅能沿一个方向,不能实现反向传输。

(2)半双工:数据传输可以沿两个方向,但需要分时进行(RS485)

(3)全双工:数据可以同时进行双向传输。

image.png

UART通信协议

起始位 : 发出一个逻辑 0 信号,表示传输字符的开始。

数据位 : 数据位的个数可以是 5、6、7、8 等,构成一个字符。通常采用ASCII码(7位),从最低位开始传送。

校验位 : 数据位加上这一位后,使得 1 的位数应为偶数(偶校验)或奇数(奇校验),以此来校验传输的正确性。

停止位 : 数据的结束标志。可以是 1 位、1.5 位、2 位的高电平。

空闲位 : 处于逻辑 1 状态,表示当前线路上没有数据传送。

image.png

波特率

指的是串口通信的速率,也就是串口通信时每秒钟可以传输多少个二进制。譬如每秒钟可以传输9600个二进制位,波特率就是9600。

串口通信的波特率不能随意设定,而应该在一些值中选择,一般常见的波特率是9600和115200(低端单片机如51常用9600,高端单片机和嵌入式SoC一般用115200)。

(1)通信双方必须事先设定相同的波特率这样才能成功通信,如果发送方和接受方按照不同的波特率通信则根本收不到,因此比特率最好是大家熟知的而不是随意指定的

(2)常用的波特率经过长久发展,就形成了共识,常用9600 和115200。

程序流程设计

程序流程设计中首先要进行外设使能配置,接着进行管脚复用配置和UART初始化,然后进行发送数据,串口不断查询有无需要接收的数据,最后返回数据。

image.png

查询方式

对I/O设备的程序轮流查询,它定时对设备轮流询问一遍有无处理需求。轮流询问之后,有需求的,则加以处理。在处理I/O设备的需求完之后,处理机返回继续工作。

CPU要不断地读取状态字和检测状态字,不管那个外围设备是否有服务请求,都必须一一查询,许多次的重复查询,可能都是无用的,而又占去了CPU的时间,效率较低。

源码说明

管脚复用源码

管脚复用配置。

GPIO复用配置操作直接封装成了函数,使用时,直接包含“TL6748.h”文件 即可。

StarterWare API 接口。

GPIOBank0Pin0PinMuxSetup();

image.png

数据发送源码

数据发送配置。

使用 StarterWare 的库来设置数据发送。

使用时,直接包含“uart.h”文件 即可。

StarterWare API 接口。

void UARTCharPut(unsigned int baseAdd, unsigned char byteTx)

image.png

数据接收源码

数据接收配置。

使用 StarterWare 的库来设置数据接收。

使用时,直接包含“uart.h”文件 即可。

StarterWare API 接口。

int UARTCharGet(unsigned int baseAdd)

image.png

三、操作现象

实验设备

本实验使用的硬件接口为UART1 RS232接口,所需硬件为实验板、仿真器、RS232 交叉串口母母线、USB转RS232串口线和电源。

image.png

硬件连接

(1)使用 RS232 交叉串口母母线和 USB 转 RS232 串口线连接实验板的UART1串口和电脑的 USB

口。

(2)连接仿真器和电脑的USB接口,

(3)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。

image.png

软件操作

串口端口查询

(1)先在设备管理器查看串口的端口号;

(2)再设置串口调试工具,波特率设置为115200。

image.png

CCS里相关操作

导入工程,选择Demo文件夹下的对应工程

编译工程

将CCS连接实验箱并加载程序

点击运行程序,串口终端会打印相关信息

通过电脑键盘输入任意字符,可在串口终端回显。

实验结束后,先点击黄色按钮暂停程序运行,再点击红色按钮退出CCS与实验箱的连接,最后实验箱断电即可。

image.png

  • 19
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入式串口通信实验可以分为两个部分:硬件部分和软件部分。硬件部分是通过串口将数据发送和接收到嵌入式系统,而软件部分是通过编写程序实现数据的发送和接收。以下是一个简单的嵌入式串口通信实验流程: 硬件部分: 1. 确定使用的嵌入式开发板,根据开发板手册确定串口引脚。 2. 连接串口线,将开发板的串口引脚与PC的串口相连。 软件部分: 1. 初始化串口,设置波特率、数据位、奇偶校验位等参数。 2. 编写发送程序,将数据发送到串口。 3. 编写接收程序,从串口读取数据。 下面是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <termios.h> #define SERIAL_PORT "/dev/ttyS0" int main(int argc, char *argv[]) { int fd; struct termios options; fd = open(SERIAL_PORT, O_RDWR | O_NOCTTY | O_NDELAY); if (fd == -1) { perror("open"); return -1; } tcgetattr(fd, &options); cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); options.c_cflag |= (CLOCAL | CREAD); options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; options.c_cflag &= ~PARENB; options.c_cflag &= ~CSTOPB; options.c_cflag &= ~CRTSCTS; tcsetattr(fd, TCSANOW, &options); char buf[] = "hello world"; write(fd, buf, strlen(buf)); char buf2[256]; memset(buf2, 0, sizeof(buf2)); read(fd, buf2, sizeof(buf2)); printf("Received: %s\n", buf2); close(fd); return 0; } ``` 这个程序打开串口设备"/dev/ttyS0",设置波特率为9600,发送"hello world"字符串,然后从串口读取数据并打印出来。注意,在使用串口时需要注意数据的格式和传输方式,以免出现通信错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值