无线传感器网络实验教程串口实验主讲教师:柯宗武2012年12月Copyright:柯宗武本章内容实验内容:上位机发送“a”,目标机返回“Iamasensornode!”Copyright:柯宗武串口通信的基本概念串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。接收设备发送设备8位顺次传送D0D7Copyright:柯宗武串口通信的基本概念一、异步通信与同步通信1、异步通信异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。Copyright:柯宗武串口通信的基本概念异步通信的数据格式:停止位数据位校验位起始位LSBMSB空闲下一字符起始位空闲一个字符帧异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加2~3位用于起止位,各帧之间还有间隔,因此传输效率不高。Copyright:柯宗武串口通信的基本概念2、同步通信同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,即保持位同步关系,也保持字符同步关系。发送方对接收方的同步可以通过两种方法实现。计算机乙计算机甲01101数据时钟计算机乙计算机甲01101数据时钟数据+时钟外同步自同步Copyright:柯宗武面向字符的同步格式:此时,传送的数据和控制信息都必须由规定的字符集(如ASCII码)中的字符所组成。图中帧头为1个或2个同步字符SYN(ASCII码为16H)。SOH为序始字符(ASCII码为01H),表示标题的开始,标题中包含源地址、目标地址和路由指示等信息。STX为文始字符(ASCII码为02H),表示传送的数据块开始。数据块是传送的正文内容,由多个字符组成。数据块后面是组终字符ETB(ASCII码为17H)或文终字符ETX(ASCII码为03H)。然后是校验码。典型的面向字符的同步规程如IBM的二进制同步规程BSC。SYNSYNSOHSTXETB/ETX块校验标题数据块Copyright:柯宗武面向位的同步格式:此时,将数据块看作数据流,并用序列01111110作为开始和结束标志。为了避免在数据流中出现序列01111110时引起的混乱,发送方总是在其发送的数据流中每出现5个连续的1就插入一个附加的0;接收方则每检测到5个连续的1并且其后有一个0时,就删除该0。典型的面向位的同步协议如ISO的高级数据链路控制规程HDLC和IBM的同步数据链路控制规程SDLC。同步通信的特点是以特定的位组合“01111110”作为帧的开始和结束标志,所传输的一帧数据可以是任意位。所以传输的效率较高,但实现的硬件设备比异步通信复杂。8位8位8位8位16位≥0位0111111001111110校验场信息场控制场地址场Copyright:柯宗武串口通信的基本概念波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。Copyright:柯宗武串口通信的基本概念数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是6、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。Copyright:柯宗武串口通信的基本概念停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。Copyright:柯宗武串口通信的基本概念奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。Copyright:柯宗武USB转串口原理图Copyright:柯宗武Copyright:柯宗武外设端口映射图Copyright:柯宗武相关SFR介绍P0.2,P0.3需要配置成外设端口Copyright:柯宗武相关SFR介绍对于一些复用的端口可以使用P2DIR.PRIP0设置确定优先使用何功能。Copyright:柯宗武相关SFR介绍Copyright:柯宗武CC2530串口通信模式异步模式UART模式(全双工通信)同步模式SPI模式模式设置方式由UxCSR.MODE位设置,为1时选择UART模式Copyright:柯宗武相关SFR介绍串口进行通信的方式有两种:同步通信方式UART和异步通信方式SPI。Copyright:柯宗武UART模式数据发送当串口数据缓冲寄存器UxBUF中写入数据时,UART模式数据发送被触发。并从TX引脚输出。UxBUF是一个双向数据缓冲寄存器。当一个字节开始传输时,UxCSR.ACTIVE位被置一,传输结束该位置零。当传输结束时UxCSR.TX_BYTE位置一。当UxBUF准备写入新的一个字节时,立即产生中断请求。Copyright:柯宗武U0CSR在数据发送时的状态开始发送时,ACTIVE位置1.发送完一个字节ACTIVE位置0发送结束时,TX_BYTE位置1.Copyright:柯宗武UART模式数据接收当UxCSR.RE位置一时.开始从RX引脚接收数据。从RX引脚寻找有效的起止位,UxCSR.ACTIVE被置一。寻找到有效的起止位时,数据写入到接收缓冲区,UxCSR.RX_BYTE位置一,并产生接收中断,同时UxCSR.ACTIVE为置零。UxDBUF数据被读出时,UxCSR.RX_BYTE位被硬件清零。Copyright:柯宗武U0CSR在数据接收时的状态准备接收数据前,RE位应置1。Copyright:柯宗武UART硬件流控制当UxUCR.FLOW置一时,硬件流控制使能。当接收寄存器为空且接收使能时,RTS输出为低电平,当CTS变低电平之前,不会发生数据传输。Copyright:柯宗武系统时钟选择SFRCopyright:柯宗武系统时钟选择SFRCopyright:柯宗武睡眠模式控制寄存器Copyright:柯宗武睡眠模式控制状态寄存器Copyright:柯宗武相关SFR介绍Copyright:柯宗武相关SFR介绍Copyright:柯宗武相关SFR介绍波特率的计算其中f是系统时钟Copyright:柯宗武波特率参数设置速查表Copyright:柯宗武相关SFR介绍Copyright:柯宗武中断使能SFR一览表Copyright:柯宗武INE0中断控制器Copyright:柯宗武IEN1中断控制器Copyright:柯宗武INE2中断控制器Copyright:柯宗武串口中断标志位中断pending是什么含义?。Copyright:柯宗武实例程序讲解Copyright:柯宗武Copyright:柯宗武DMA模式下串口初始化HalDriverInit()ZMain.c中调用HalDmaInit()hal_drivers.c中HalDriverInit()HalUARTInit()hal_dma.c中HalUARTInitDMA_hal_uart_dma.c中HalUARTOpenDMA(halUARTCfg_t*config)_hal_uart.c中串口配置函数