串口
- 格式:doc
- 大小:205.00 KB
- 文档页数:9
串口对应关系是指串行通信中各个串口之间的对应关系。
常见的串口包括RS-232串口、RS-485串口、USB串口和PCI串口等。
下面将分别介绍这些串口之间的对应关系。
1. RS-232串口RS-232串口是计算机与外部设备之间常用的通信接口之一,通常用于数据传输。
RS-232串口的电气标准规定,数据信号采用负逻辑,即低电平表示逻辑1,高电平表示逻辑0。
常见的RS-232串口有9针D形插头和25针D形插头,分别对应不同的连接器型号。
在通信过程中,需要根据设备的具体要求和协议规范来设置串口的参数,例如波特率、数据位、校验位等。
2. RS-485串口RS-485串口是RS-232串口的改进版本,具有更好的抗干扰能力和更远的传输距离。
RS-485串口采用差分信号传输技术,即一对信号线上的电平值相同,但是不同时为高或低电平,这样可以有效抑制共地噪声和电磁干扰。
常见的RS-485接口包括R485A/B、T485A/B等。
在设置RS-485串口时,需要确保正确地连接信号地线,并选择合适的传输速率和数据位等参数。
3. USB串口USB串口是一种新型的串行通信接口标准,它利用USB总线来传输数据。
USB串口具有即插即用、高速传输和通用性强等优点。
USB接口分为USB 1.1和USB 2.0两种版本,其中USB 2.0具有更高的传输速率和带宽。
在设置USB串口时,需要根据设备的要求和协议规范来设置传输速率、数据位、校验位等参数。
同时还需要考虑传输介质的影响,例如电磁干扰和电压波动等因素。
4. PCI串口PCI串口是一种基于PCI总线标准的串行通信接口。
PCI串口具有较高的传输速率和带宽,适用于高速数据传输和实时通信等应用场景。
PCI串口的电气标准通常采用RS-232或RS-485等标准,具体取决于设备的需要。
在设置PCI串口时,需要正确配置PCI总线的参数,例如中断号、I/O地址和内存地址等。
同时还需要考虑设备的兼容性和稳定性等因素。
串口的基本原理串口是一种用于在设备之间进行数据传输的通信接口。
它是一种基于串行数据传输的通信方式,与并行通信相对。
串口使用一根线缆进行数据传输,其中包含一个发送线和一个接收线。
数据以一个位一个位地顺序传输,称为串行传输。
在串口通信中,数据从发送方通过发送线逐位发送,然后通过接收线逐位接收到接收方。
串口通信涉及以下几个基本原理:1. 通信协议:串口通信需要使用一种协议来规定数据的传输格式和通信规则。
常用的串口通信协议包括RS-232、RS-485、USB等。
协议规定了数据的起始位、数据位、校验位和停止位等信息。
2. 波特率:波特率是指每秒钟传输的位数,用来衡量串口通信的速度。
波特率越高,传输速度越快,但也需要更高的硬件要求。
发送方和接收方必须使用相同的波特率才能正常通信。
3. 校验位:校验位用于检测数据传输是否出错。
常用的校验方式包括奇偶校验、偶校验和无校验。
接收方通过校验位验证数据的准确性,并在发现错误时进行纠正或报告。
4. 数据流控制:数据流控制用于管理数据的发送和接收,以避免数据传输过程中的数据丢失或冲突。
常用的数据流控制方式包括硬件流控制和软件流控制。
5. 缓冲区:串口通信中的发送方和接收方都使用内部缓冲区来管理数据传输。
缓冲区用于临时存储待发送或接收的数据,以便在合适的时间进行数据传输。
需要注意的是,串口通信需要发送方和接收方的硬件和软件支持,如串口芯片、驱动程序等。
在编程时,可以使用特定的串口通信库或API来控制串口的打开、读取和写入操作。
总的来说,串口通信通过顺序传输数据位,结合通信协议、波特率、校验位、数据流控制等技术,实现设备之间的数据传输。
这使得串口通信在许多领域中广泛应用,如嵌入式系统、工业自动化、通信设备等。
串口设置的一般步骤一、串口简介串口是计算机用于数据传输的一种通信接口,它是一种用于在计算机和外部设备之间传输数据的标准接口。
串口有多种类型,常见的有RS-232、RS-485等。
二、串口设置的目的在计算机与外部设备之间进行数据传输时,需要进行串口设置,以确保数据能够正确地传输和接收。
串口设置的目的是配置串口的通信参数,如波特率、数据位、停止位、校验位等,以适应不同设备的通信需求。
三、串口设置的步骤1. 确定串口号:在进行串口设置之前,首先需要确定要设置的串口号。
在Windows系统中,可以通过设备管理器查看已连接的串口设备,确定要设置的串口号。
2. 打开串口:使用编程语言或串口调试工具打开串口。
在编程中,可以使用相关的API函数打开串口;在串口调试工具中,可以通过选择串口号和设置通信参数来打开串口。
3. 配置串口参数:根据外部设备的通信要求,配置串口的通信参数。
常见的串口参数包括波特率、数据位、停止位、校验位等。
4. 发送数据:在进行串口设置之后,可以通过编程或串口调试工具向外部设备发送数据。
根据外部设备的通信协议,将需要发送的数据按照一定的格式发送出去。
5. 接收数据:外部设备接收到数据后,会通过串口将数据发送给计算机。
在编程中,可以通过相关的API函数来接收串口数据;在串口调试工具中,可以实时显示串口接收到的数据。
6. 关闭串口:当数据传输完成后,需要关闭串口,释放资源。
在编程中,可以使用相关的API函数关闭串口;在串口调试工具中,可以通过关闭串口按钮来关闭串口。
四、常见问题与解决方案1. 串口无法打开:可能是串口被其他程序占用,需要关闭占用串口的程序;或者是串口驱动未正确安装,需要重新安装串口驱动。
2. 数据发送失败:可能是串口参数配置错误,需要根据外部设备的通信要求重新配置串口参数;或者是发送的数据格式不正确,需要按照外部设备的通信协议发送数据。
3. 数据接收异常:可能是串口参数配置错误,需要根据外部设备的通信要求重新配置串口参数;或者是接收的数据格式不正确,需要按照外部设备的通信协议解析数据。
串口的工作原理
串口是用于数据传输的通信接口,它通过传递一个字节序列来完成数据的发送和接收。
串口的工作原理主要包括以下几个方面:
1. 传输格式:串口通信采用串行传输方式,即按照比特顺序逐个传输数据位。
常见的传输格式有起始位、数据位、奇偶校验位和停止位组成。
起始位用于同步接收端和发送端的时钟信号,数据位用于传递实际的数据,奇偶校验位用于检测传输过程中发生的位错误,停止位用于表示数据传输结束。
通过这些格式要求可以保证数据的正确传输和接收。
2. 波特率:串口通信采用一种称为波特率(Baud Rate)的指
标来衡量数据传输速率,即每秒传输的比特数。
常见的波特率有9600 bps、115200 bps等。
发送和接收端在通信之前必须事
先约定一个相同的波特率。
3. 缓冲区:串口通信中,发送和接收的数据通过缓冲区进行中转。
发送端将待发送的数据存储在发送缓冲区中,然后根据波特率逐个比特进行数据的发送。
接收端会不断读取接收缓冲区中的数据,然后进行后续的处理。
4. 握手协议:为了保证数据的可靠传输,串口通信中还有一些握手协议,如RTS/CTS(请求发送/清除发送)和DTR/DSR (数据终端就绪/数据设备就绪)。
通过这些握手信号,发送
端和接收端可以进行数据发送的控制和同步。
5. 数据传输协议:串口通信中的数据传输可以采用不同的协议,如RS-232、RS-485等。
这些协议规定了数据传输的电气特性、物理接口和通信规范。
总之,串口通过比特连续传输实现数据的发送和接收,通过传输格式、波特率、缓冲区、握手协议和数据传输协议等机制保证数据的可靠传输和接收。
串口是串行接口(serial port)的简称,也称为串行通信接口或COM接口。
串口通信是指采用串行通信协议(serial communication)在一条信号线上将数据一个比特一个比特地逐位进行传输的通信模式。
串口按电气标准及协议来划分,包括RS-232-C、RS-422、RS485等。
1.串行通信在串行通信中,数据在1位宽的单条线路上进行传输,一个字节的数据要分为8次,由低位到高位按顺序一位一位的进行传送。
串行通信的数据是逐位传输的,发送方发送的每一位都具有固定的时间间隔,这就要求接收方也要按照发送方同样的时间间隔来接收每一位。
不仅如此,接收方还必须能够确定一个信息组的开始和结束。
常用的两种基本串行通信方式包括同步通信和异步通信。
1.1串行同步通信同步通信(SYNC:synchronous data communication)是指在约定的通信速率下,发送端和接收端的时钟信号频率和相位始终保持一致(同步),这样就保证了通信双方在发送和接收数据时具有完全一致的定时关系。
同步通信把许多字符组成一个信息组(信息帧),每帧的开始用同步字符来指示,一次通信只传送一帧信息。
在传输数据的同时还需要传输时钟信号,以便接收方可以用时针信号来确定每个信息位。
同步通信的优点是传送信息的位数几乎不受限制,一次通信传输的数据有几十到几千个字节,通信效率较高。
同步通信的缺点是要求在通信中始终保持精确的同步时钟,即发送时钟和接收时钟要严格的同步(常用的做法是两个设备使用同一个时钟源)。
在后续的串口通信与编程中将只讨论异步通信方式,所以在这里就不对同步通信做过多的赘述了。
1.2串行异步通信异步通信(ASYNC:asynchronous data communication),又称为起止式异步通信,是以字符为单位进行传输的,字符之间没有固定的时间间隔要求,而每个字符中的各位则以固定的时间传送。
在异步通信中,收发双方取得同步是通过在字符格式中设置起始位和停止位的方法来实现的。
串口的概念指什么串口概念指的是串行接口,也叫串行端口或串行通信接口。
它是计算机与外部设备之间进行数据传输的一种通信方式。
与串行接口相对应的是并行接口,它可以同时传输多个比特。
串口被广泛应用于各个领域,包括计算机、通信、工业控制等。
它被用来连接计算机与打印机、调制解调器、传感器、仪器设备等外部设备,实现数据的输入和输出。
串口的使用可以简化设备的连接,节省成本和空间,并且可以实现长距离的数据传输。
串口的标准定义了数据的传输格式、电气特性、信号线连接等规范。
常用的串口标准有RS-232、RS-422、RS-485等。
其中,RS-232是最常见的串口标准,也是最早出现的一种。
它定义了数据线、控制线和电气特性,可以实现计算机与外部设备之间的双向通信。
与RS-232相比,RS-422和RS-485支持更远的传输距离和更高的传输速率。
串口的数据传输是按照比特的顺序进行的,每个比特由一个电平或电压表示。
常见的串口通信方式有同步串口和异步串口。
同步串口在传输数据时,发送方和接收方需要事先约定传输速率和时钟同步,以保证数据的正确传输。
而异步串口则不需要事先约定,每个数据包包含起始位、数据位、校验位和停止位,接收方根据起始位和停止位来确定数据的传输速率和同步。
串口的速率通常用波特率来表示,表示每秒传输的比特数。
常见的波特率有9600、19200、38400等。
波特率的选择需要根据实际应用需求和设备的性能来确定。
较高的波特率可以实现更快的数据传输速度,但也会增加数据传输的出错率。
与并行接口相比,串口在数据传输速率上通常较慢。
但串口具有比较长的传输距离,可以实现几百米甚至更长的距离。
另外,串口还具有连接简单、稳定可靠、成本低等优点。
这些特点使得串口在工业控制、物联网、通信等领域中得到广泛应用。
串口的实现可以通过串口模块来实现,这些模块通常由芯片和相应的驱动电路组成。
常见的串口芯片有UART(通用异步收发器)、USART(通用同步异步收发器)等。
串口的工作原理串口是一种常见的数据传输接口,广泛应用于计算机、电子设备和通信设备等领域。
它可以实现数据的双向传输,是数字系统与外部设备之间进行数据交换的重要工具。
本文将介绍串口的工作原理,包括串口的基本概念、传输方式、数据格式、时序控制等内容。
1. 串口的基本概念串口是一种通过线缆连接数字系统和外设的通信接口,可以实现数据的串行传输。
它通常包括发送和接收两个引脚,分别负责串行数据的发送和接收。
在传输过程中,发送端将数据以位序列的形式发送到接收端,接收端根据约定的协议将数据解析出来。
2. 传输方式串口的传输方式可以分为同步和异步两种。
同步传输需要发送端和接收端的时钟保持一致,以确保数据的同步性;异步传输则不需要时钟信号,通过起始位、数据位、校验位和停止位的设置,来确定数据的传输时间和有效性。
3. 数据格式在串口传输过程中,数据会按照一定的格式进行编码和解码。
常见的数据格式包括字符长度、校验方式和停止位。
字符长度决定了每个字符所占用的位数,一般为5、6、7或者8位;校验方式用于检测数据传输中的错误,常见的校验方式包括奇偶校验和CRC校验;停止位用于表示一个字符的传输结束,一般为1、1.5或者2个位。
4. 时序控制时序控制是串口传输中非常重要的一环。
在数据传输过程中,发送端和接收端需要相互配合,按照约定的时序进行数据的传输和接收。
时序控制包括波特率设置、起始位和停止位的判定、数据位的读取和写入等步骤,其中波特率是指单位时间内传输的位数,常见的波特率有9600、115200等。
5. 常见问题及解决方法在串口的应用过程中,可能会遇到一些常见的问题,如数据传输错误、波特率不匹配等。
针对这些问题,可以采取以下解决方法:首先,检查线缆连接是否稳固,确保发送端和接收端之间正常建立通信;其次,检查波特率设置是否匹配,确保发送端和接收端的波特率一致;最后,可使用示波器等工具进行数据的调试和分析,找出问题所在并解决。
总结:串口作为一种常见的数据传输接口,具有低成本、简单易用的特点,被广泛应用于各个领域。
串口的概念串口(Serial Port)是一种计算机外部设备与计算机通信的接口,也可以称为串行接口或COM口。
串口是一种创建数据通信连接的接口,其特点是一次只能传输一个位元(bit)。
与之相对的是并行接口,可以同时传输多个位元。
串口主要用于计算机与外部设备之间的数据传输,可以连接各种设备,如打印机、调制解调器、终端等。
串口通信是一种逐位地进行数据传输的通信方式。
数据在串口中经过一系列的电气信号转换和协议处理后,可以在计算机和外部设备之间进行可靠的数据传输。
串口通信可以用于传输文本数据、图像数据、音频数据等各种类型的数据。
串口通信一般使用异步传输方式,即数据的发送和接收是不同步进行的。
发送端根据波特率(Baud rate)将数据转化为连续的电气信号,接收端通过检测电气信号的变化来还原数据。
波特率是指每秒钟传输的位元数量,常见的波特率有9600bps、115200bps等。
串口通信的传输速率相对较慢,但它具有以下几个优点:1. 简单:串口通信的接口较为简单,只需几根信号线即可实现数据传输。
2. 稳定:串口通信的电气信号转换较为稳定,不易受干扰。
3. 距离远:串口通信的传输距离较远,最远可达数百米。
4. 兼容性强:串口通信是一种标准接口,可以连接各种不同的设备。
串口通信的物理接口一般是DB9(9针)或DB25(25针)的D型插座,其中规定的引脚分为信号引脚和电源引脚。
常用的信号引脚有接地线、数据线(发送线和接收线)、流量控制线等。
电源引脚一般是供电使用。
在计算机中,串口通常使用RS-232C协议进行数据传输。
该协议规定了数据的电气特性(如电压范围)和数据帧的格式(如起始位、数据位、停止位等)。
除了RS-232C协议,还有一些其他的串口通信协议,如RS-422、RS-485等,它们具有不同的电气特性和传输距离。
在实际应用中,串口通信被广泛使用。
例如,打印机和计算机之间的数据传输就是通过串口进行的。
此外,一些传感器、控制器等外部设备也可以通过串口与计算机进行通信,以实现数据的采集和控制。
串口测试方法和步骤串口测试是指通过串口与外部设备通信进行数据的收发和交互的过程。
串口测试可以用于验证串口的功能、测试串口设备的可靠性以及确定串口通信协议的正确性等方面。
以下是串口测试的一般方法和步骤。
1.确定串口连接:首先需要确认计算机与外部设备的串口连接是否正确。
通常情况下,计算机有多个串口,需要确定与外部设备连接的是哪一个串口。
2.设置串口参数:打开串口测试软件,选择与外部设备连接的串口。
然后,需要设置串口的一些参数,包括波特率、数据位、停止位、校验位等。
这些参数需要与外部设备的设置一致。
3.发送数据:串口测试软件一般都具备发送数据的功能。
在发送数据时,可以输入要发送的数据内容,并选择发送的方式,可以是单次发送,也可以是连续发送。
4.接收数据:测试软件提供接收数据的功能,在接收数据时,可以选择接收的数据转换格式,一般包括ASCII码、十六进制等。
接收到的数据会显示在测试软件的接收区域。
5.校验接收数据:校验接收到的数据是否与预期一致。
可以通过查看接收区域中显示的数据,与预期的数据进行对比。
6.错误处理:当发生错误时,需要进行错误处理。
可以查看错误日志或者通过测试软件提供的报错功能,来定位错误的原因。
7.测试功能:测试软件一般还提供了一些功能,如自动测试、循环测试等。
可以使用这些功能对串口进行更全面的测试。
8.测试性能:除了功能测试外,还可以测试串口的性能。
可以测试串口的最大传输速率,保证其能够满足实际需求。
9.测试协议:如果需要验证串口通信协议的正确性,可以编写测试脚本或使用测试工具对协议进行测试。
通过模拟多种情况,测试协议的鲁棒性和稳定性。
10.编写测试报告:对测试过程进行总结,并编写测试报告,描述测试的步骤、结果和问题。
测试报告可以帮助开发人员和工程师更好地改进和优化系统,提高串口的稳定性和可靠性。
总结:串口测试是一项重要的任务,可以帮助验证串口的功能和可靠性,在产品开发和测试中具有重要意义。
M2440有三个串口,USRT0,UART1,UART3。
对串口的操作有三种:串口初始化,串口接收,串口发送1 串口初始化1)串口初始化函数void Uart_Init(int pclk,int baud) // 此段为UART设置可略过不看{int i; //定义一个参数if(pclk == 0) //假定pclk的值为0pclk = PCLK;rUFCON0 = 0x0; //UART channel 0 FIFO control register, FIFO disable rUFCON1 = 0x0; //UART channel 1 FIFO control register, FIFO disable rUFCON2 = 0x0; //UART channel 2 FIFO control register, FIFO disable rUMCON0 = 0x0; //UART chaneel 0 MODEM control register, AFC disable rUMCON1 = 0x0; //UART chaneel 1 MODEM control register, AFC disable //UART0rULCON0 = 0x3; //Line control register : Normal,No parity,1 stop,8 bits //正常模式,无校验位,每帧一个停止位,8位数据// [10] [9] [8] [7] [6] [5] [4] [3:2] [1:0]// Clock Sel, Tx Int, Rx Int, Rx Time Out, Rx err, Loop-back, Send break, Transmit Mode, Receive Mode// 0 1 0 , 0 1 00 , 01 01// PCLK Level Pulse Disable Generate Normal Normal Interrupt or Polling//PCLK时钟发送/接受时分别用电平/脉冲中断方式接收超时中断关接收出错时触发中断不设置回环发送中断发送和接收为中断或者轮询模式rUCON0 = 0x245; // Control registerrUBRDIV0=( (int)(pclk/16./baud+0.5) -1 ); //Baud rate divisior register 0 //波特率设置//UART1rULCON1 = 0x3; //设置UART0无奇偶校验,一位停止位,8位数据rUCON1 = 0x245; //PCLK为时钟源,接收和发送数据为中断方式rUBRDIV1=( (int)(pclk/16./baud+0.5) -1 );//UART2rULCON2 = 0x3;rUCON2 = 0x245;rUBRDIV2=( (int)(pclk/16./baud+0.5) -1 );for(i=0;i<100;i++);}l 串口时钟的设置pclk = PCLK;使用PCLK作为串口的时钟。
l 寄存器进行了设置主要是对三种寄存器进行了设置rUFCONn (n=0,1,2) ——串口FIFO控制寄存器rUMCONn (n=0,1)——串口调制控制寄存器rULCONn (n=0,1,2)——串口线性控制寄存器rUCONn(n=0,1,2)——串口控制寄存器rUBRDIVn(n=0,1,2)——串口Tx,Rx收发速率的设定2)串口的选择void Uart_Select(int ch){whichUart = ch;}2 串口发送串口发送数据通过判断rUTRSTATn (n=0,1,2)的第2位是不是为1来判断发送缓存是否为空。
1)串口发送字节void Uart_SendByte(int data){if(whichUart==0) //选择通道0{if(data=='\n') //遇到结束符{while(!(rUTRSTA T0 & 0x2)); //直到发送缓存区为空//Delay(1); //because the slow response of hyper_terminalWrUTXH0('\r'); //向发送缓存写入转义字符}while(!(rUTRSTA T0 & 0x2)); //等发送完上一个数据//Delay(1); //because the slow response of hyper_terminalWrUTXH0(data); //写入下一个数据到发送缓存}else if(whichUart==1) //选择通道1{if(data=='\n') //遇到结束符{while(!(rUTRSTAT1 & 0x2)); //直到发送缓存区为空//Delay(1); //because the slow response of hyper_terminalrUTXH1 = '\r'; //向发送缓存写入转义字符}while(!(rUTRSTAT1 & 0x2)); //等发送完上一个数据//Delay(1);rUTXH1 = data; //写入下一个数据到发送缓存} else if(whichUart==2) //选择通道2{if(data=='\n') //遇到结束符{while(!(rUTRSTAT2 & 0x2)); //直到发送缓存区为空//Delay(1); //because the slow response ofhyper_terminalrUTXH2 = '\r'; //向发送缓存写入转义字符}while(!(rUTRSTAT2 & 0x2)); //等发送完上一个数据//Delay(1);rUTXH2 = data; //写入下一个数据到发送缓存}}首先是串口通道的选择;然后判断THR是否为空,直到等到发送缓存为空,退出while循环;再要发送的字节data放到发送缓存中。
如果发送的数据是回车的话,直接发送转义字符/r,当然也要等到THR为空才可以发送。
2)串口发送字符串void Uart_SendString(char *pt){while(*pt) //判断是否为空指针Uart_SendByte(*pt++); //发送数据,指针指向下一个数据}把字符串看作是字符数组,字符指针*pt来指代字符数组的首地址,读取指针指向的字符,这样就可以把发送的的字符串逐个进行字节发送了。
2 串口接收串口接收通过判断rUTRSTATn (n=0,1,2)的第1位是不是为1来判断发送缓存是否为空。
1)串口等待接收状态void Uart_TxEmpty(int ch){if(ch==0)while(!(rUTRSTAT0 & 0x4)); //等到发送移位寄存器空else if(ch==1)while(!(rUTRSTAT1 & 0x4)); //等到发送移位寄存器空else if(ch==2)while(!(rUTRSTAT2 & 0x4)); //等到发送移位寄存器空}寄存器rUTRSTATn & 0x4 (n=0,1,2)来判断发送移位寄存器是不是为空3)接收字符char Uart_Getch(void){if(whichUart==0){while(!(rUTRSTAT0 & 0x1)); //直到接收到数据return RdURXH0(); //返回接收缓存地址}else if(whichUart==1){while(!(rUTRSTAT1 & 0x1)); //直到接收到数据return RdURXH1(); //返回接收缓存地址}else if(whichUart==2){while(!(rUTRSTAT2 & 0x1)); //直到接收到数据return RdURXH2(); //返回接收缓存地址}return 0 ;}寄存器rUTRSTATn & 0x1 (n=0,1,2)来判断接收缓存是否收到字符数据,并把接收到的数据写到接收缓存里面。
4)接收字符串void Uart_GetString(char *string){char *string2 = string; // 将string的首地址保存在string2中char c; //定义一个字符变量while((c = Uart_Getch())!='\r') //如果接收到的字符不为回车就一直循环{if(c=='\b') //收到的是退格符{if( (int)string2 < (int)string ) //如果string没有到达首地址{Uart_Printf("\b \b"); //打印两个退格string--; //string指向上一个字符地址}}else{*string++ = c; //将c付给string指向的地址,string指向下一个地址Uart_SendByte(c); //发送c存放的字符}}*string='\0'; //将最后一位赋值为‘\ 0’为字符串结束符Uart_SendByte('\n'); //发送结束}char Uart_GetKey(void){if(whichUart==0) //通道0{if(rUTRSTAT0 & 0x1) //接收到数据return RdURXH0(); //返回接收缓存地址elsereturn 0;}else if(whichUart==1) //通道1{if(rUTRSTAT1 & 0x1) //收到数据return RdURXH1(); //返回接收缓存地址elsereturn 0;}else if(whichUart==2) //通道2{if(rUTRSTAT2 & 0x1) //收到数据return RdURXH2(); //返回接收缓存地址elsereturn 0;}return 0 ;}寄存器rUTRSTATn & 0x1 (n=0,1,2) 来判断接收缓存是否接收到数据,并把接收到的数据写到接收缓存里面。
否则返回空。
与getchar类似,并且也是返回字符类型。
5)接收整形数字函数返回类型:整形int Uart_GetIntNum(void){char str[30];char *string = str;int base = 10; //定义字符类型变量默认是十进制int minus = 0; //定义正负标志变量int result = 0;int lastIndex; //定义字符串长度变量int i; //定义变量iUart_GetString(string); //从串口接收数据,存放在string指向的地址if(string[0]=='-') //接收的是负整数{minus = 1; //符号标记位为1string++; //string增加一个字节, 地址加一去掉负号}if(string[0]=='0' && (string[1]=='x' || string[1]=='X')) //接收的是十六进制数{base = 16; //十六进制数string += 2; //string增加两个字节}lastIndex = strlen(string) - 1; //string的长度if(lastIndex<0) //长度小于0则返回-1return -1;if(string[lastIndex]=='h' || string[lastIndex]=='H' ) //最后一个字符为h或H{base = 16; //十六进制数string[lastIndex] = 0; //将十六进制数的最后一位赋0lastIndex--; //string长度-1}if(base==10) //十进制数{result = atoi(string); //字符串string转化成整型result = minus ? (-1*result):result; //是负数则乘-1}else{for(i=0;i<=lastIndex;i++) //循环整个字符串{if(isalpha(string)) //如果string是英文字母{if(isupper(string)) //如果是大写字母result = (result<<4) + string - 'A' + 10; //转换为大写字母elseresult = (result<<4) + string - 'a' + 10; //转换为小写字母}elseresult = (result<<4) + string - '0'; //转换为16进制数}result = minus ? (-1*result):result; //如果16进制数为负乘以-1}return result;}首先以字符串的形式接收数据Uart_GetString(string); 然后通过判断是不是以‘-’开头来确定是不是负数,是负数则minus=1;再通过以0x,oX开头或者以H,h结尾来判断是不是16进制,否则为10进制;如果是10进制,则通过atoi把字符串转化为数字,并加上正负,如果是16进制,判断是不是字母,再判断大小写字母分别进行转换。