串行通信模式与异步通信方式解析

5星 · 超过95%的资源 需积分: 9 10 下载量 149 浏览量 更新于2024-07-31 收藏 764KB PPT 举报
"s3c2440的串口通信" 串口通信是电子和计算机领域中常见的一种数据传输方式,尤其在嵌入式系统中,如s3c2440这样的微处理器中,串口通信扮演着重要的角色。串行接口的基本原理是将数据一位一位地进行传输,与并行通信相比,它需要更少的传输线,成本更低,适合远距离传输。串行通信的时间消耗与数据位数成正比,例如,n位数据在串行通信中至少需要n倍的时间。 串行数据通信有三种基本模式:单工、半双工和全双工。单工通信只允许数据单向流动,从设备A到设备B;半双工通信则支持双向传输,但不能同时进行;全双工通信允许数据同时双向传输,提高了通信效率。 串行通信方式主要分为同步和异步两种。同步通信中,数据以固定的时间间隔发送,整个数据包(如起始位、数据位、校验位和停止位)作为一个整体同步传输。而在异步通信中,数据帧之间的时间间隔是不固定的,每帧数据包含起始位、数据位、奇偶校验位和停止位,数据帧间的同步依赖于起始位。 异步通信的特点包括字符格式、波特率和校验位的设定。字符格式规定了每个字符前后的起始位和停止位,以及可能的奇偶校验位。波特率定义了每秒传输的位数,如1200波特表示每秒传输1200位数据。校验位用于检测数据传输过程中的错误,通过计算字节中的“1”位数来确保数据的完整性,常见的校验方式有奇校验和偶校验。 在实际应用中,s3c2440这样的微处理器通常会配置多个串行通信接口(如UART),以支持不同外设的连接。这些接口可以配置波特率、数据位数、校验位和停止位,以适应不同的异步通信需求。配置完成后,通过编程控制串口发送和接收数据,实现设备之间的通信。 串口通信在嵌入式系统中广泛使用,特别是在s3c2440这样的微控制器中,它提供了一种高效、低成本的远距离数据传输解决方案。理解串行接口的基本原理、通信模式和异步通信的细节,对于设计和调试基于s3c2440的系统至关重要。
2013-07-21 上传
该程序说明: 该程序为W35(320*240)LCD显示屏显示+触摸屏驱动程序+UART0通信 显示文字取模软件使用说明: 该显示程序用到的取模方式为:阴码、列行式、逆向、十六进制。在软件菜单选项中设定。 该程序可以在LCD显示数字、字母、汉字,显示的汉字要先用取模软件进行取模后,才能用。 触摸屏可以识别了,做了个小实例,按左边黄色的矩形框,显示“你好”,按右边的框,显示“LOVE” UART0串口通信 接收上位机发送命令,采用中断方式完成。(1、2、3) 接收为正确指令,发送相应回答。 接收为不正确指令,发送“please input 1/2/3” int main(void) { int i; U8 key; U32 mpll_val = 0 ; Port_Init(); Isr_Init(); i = 2 ; //hzh, don't use 100M! //boot_params.cpu_clk.val = 3; switch ( i ) { case 0: //200 key = 12; mpll_val = (92<<12)|(4<<4)|(1); break; case 1: //300 key = 13; mpll_val = (67<<12)|(1<<4)|(1); break; case 2: //400 key = 14; mpll_val = (92<<12)|(1<<4)|(1); break; case 3: //440!!! key = 14; mpll_val = (102<<12)|(1<<4)|(1); break; default: key = 14; mpll_val = (92<<12)|(1<>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3); ChangeClockDivider(key, 12); cal_cpu_bus_clk(); consoleNum = 0; // Uart 0 select for debug. Uart_Init( 0,115200 ); //串口初始化 Uart_Select( consoleNum ); uart0_int(); //串口中断初始化 #if 0 UsbdMain(); MMU_Init(); //MMU should be reconfigured or turned off for the debugger, #else MMU_Init(); //hzh #ifdef DEBUG_VERSION #endif #endif Uart_Printf("please input 1/2/3 \n"); uarttem=0; while(1) { switch(uarttem) { case '1': Uart_Printf("我是小丑!\n"); uarttem=0; break; case '2': Uart_Printf("但我很自信!\n"); uarttem=0; break; case '3': Uart_Printf("我也有梦想!\n"); uarttem=0; break; default: break; } } }