串口通信调试助手设计
经典串口调试助手源程序及串口通信设置

经典串口调试助手源程序及串口通信设置标题:串口调试助手之经典源程序及通信设置导言:串口调试助手是一种用于串口通信的调试工具,广泛应用于工业控制、测试等领域。
本文将介绍一种基于Windows平台的经典串口调试助手源程序及相关的串口通信设置,旨在帮助读者更好地了解该工具的使用和配置方法。
一、经典串口调试助手源程序1.开发平台:本程序采用C++ Builder 6.0开发。
2.功能概述:(1)串口设置包括设置串口波特率、数据位、校验位、停止位、流控、超时等参数。
(2)发送数据支持以字符串或Hex方式发送数据。
(3)接收数据实时显示串口接收到的数据,并支持数据格式设置。
(4)自动发送数据支持单次或循环发送,可设置发送时间间隔和发送次数。
(5)保存数据支持将接收到的数据保存为文本或二进制文件。
3.源程序结构本程序主要由以下几个模块组成:(1)Main Form:主窗体,包含图形界面显示和基本操作控件。
(2)Serial:串口类,负责串口相关操作,例如打开、关闭、设置参数、发送、接收等。
(3)SaveToFile:文件保存类,负责数据保存到文件中。
(4)Config:配置类,负责程序设置和读取。
(5)Hex:十六进制转换类,用于将字符串转换为Hex格式。
二、串口通信设置1.串口连接串口连接有两种方式:一种是通过RS232串口连接,需要将串口线插入串口,然后将串口线连接到目标设备;另一种是通过USB转串口连接,需要将USB转串口转接器插入计算机USB接口,然后将串口线连接到USB转串口转接器。
2.串口参数设置在使用串口调试助手前,必须先设置串口参数。
打开主窗体后,点击“串口设置”按钮,在弹出的窗口中设置串口的参数,包括波特率、数据位、校验位、停止位、流控和超时等参数。
其中,波特率是指通信时的数据传输速率,常用的有9600、19200、38400、57600、115200等。
数据位是指每次传输的数据位数,常用的有8位、7位、6位等。
基于Linux操作系统下串口调试助手的设计

基于Linux操作系统下串口调试助手的设计黎爱琼;陈家林;谈宏华【摘要】为了方便在Linux操作系统下进行串口调试以及能在嵌入式系统开发板上直观地观察到串行数据传输,在Redhad 9.0下的Qt Designer编程环境下设计了串口调试助手.首先在Qt下以一种图形化的编程方式完成串口调试助手界面的设计,再将其生成源代码,然后在源代码中添加串口驱动,完成串口调试助手的设计.经实践证明,该串口调试助手在Redhad 9.0操作系统上运行良好.利用交叉编译程序将其移植到S3C2410的Linux 2.4上后也能够正常运行极大地方便了调试工作.【期刊名称】《现代电子技术》【年(卷),期】2006(029)016【总页数】3页(P88-90)【关键词】嵌入式系统;Linux操作系统;Qt;串口驱动【作者】黎爱琼;陈家林;谈宏华【作者单位】武汉工程大学,湖北,武汉,430073;武汉工程大学,湖北,武汉,430073;武汉工程大学,湖北,武汉,430073【正文语种】中文【中图分类】TN873串口是计算机一种应用广泛的接口,几乎在每种操作系统以及需要进行数据传送的装置上都支持串口操作。
在Linux操作系统下,如果要进行串口测试,可以使用系统自带的minicom,但这个环境在调试时不方便,设置麻烦,不直观。
如果有像Windows操作系统下的串口调试助手,在Linux下进行串口调试将极大地提高调试效率。
设备驱动程序是构成Linux内核的主要部分,在高特权的内核环境下运行,如果他们出错会导致灾难性的后果。
驱动程序的设计是设备开发的难点之一。
Linux操作系统体现了I/O软件目标分层设计的思想,为应用程序提供了一致的访问接口,Linux I/O系统分层以及各层次的功能如图1所示。
所有与设备相关的代码都要在驱动程序里完成。
Linux操作系统为编程者写好了第4层软件,为用户程序提供了一致的接口,驱动程序则要遵循这种标准。
串口调试助手使用说明

串口调试助手使用说明为简单明了,有些不言自明的功能不作介绍。
1 串口调试助手1.1 设置串口参数:串口号:1-16波特率:600-256000,>115200 时需要硬件支持。
2 接收区/键盘发送区2.1 接收数据a) 设置串口参数b) 如果要按十六进制形式显示接收数据,将十六进制显示选项选中。
c) 点击打开/关闭串口区中的打开串口按钮。
2.2 显示接收数据的长度因某些限制,显示接收数据的文本不能太长,所以当显示文本长度快达到62K 时会自动将显示文本删减到32K,此时文本可保留32K 的字符或约10K 的十六进制数据显示。
2.3 在键盘上发送英文字符a)在接收区/键盘发送区的输入框中用鼠标点一下。
b)在键盘按下按键立刻发送。
在这里不能发送回车换行,也不能发送汉字,若要发送请在单字符串发送区发送。
3 发送数据可以发送单字符串,多字符串(字符串序列)或直接在键盘上发送英文字符。
有两种发送数据格式,一种是普通的字符串,另外一种是十六进制数据即HEX 格式数据。
发送HEX 格式数据时要在字符串输入区中输入HEX 格式字符串,并且要将相应区内的十六进制发送选项选中。
例:HEX 格式数据字符串12 34 AB CD FF3.1 单字符串发送区3.1.1自动发送,自动发送周期:此项功能可以每隔一段时间反复地自动发送输入框中的数据,点击自动发送按钮后即启动自动发送功能。
自动发送周期最大为65535mS。
3.2 多字符串发送区在多字符串发送区可以发送一个字符串,或者自动地、依次发送所有的字符串。
请把鼠标移到“接收区/键盘发送区”和“多字符串发送区”之间,当鼠标形状发生变化时按下鼠标器的左键不松开,然后移动鼠标,将“多字符串发送区”的宽度调宽一些,让“间隔时间”显露出来。
3.2.1发送一个字符串a) 输入字符串。
b) 如果要发送16 进制数据, 要先在字符串后的HEX 选项框中打上对勾。
c) 点击发送按钮。
友善串口调试助手使用

友善串口调试助手使用导言:友善串口调试助手是一款常用的串口通讯工具,可以用于串口数据的发送与接收,同时还提供了一些其他功能,如数据格式转换、数据保存等。
本文将介绍友善串口调试助手的基本使用方法,帮助用户快速上手并正确使用该工具。
一、安装友善串口调试助手友善串口调试助手可在友善速搭官网上进行下载。
下载完成后,双击安装包进行安装,根据安装向导逐步完成安装。
二、打开友善串口调试助手成功安装完成后,在桌面上会有一个快捷方式图标,双击图标即可打开友善串口调试助手。
打开后,会出现一个简洁的界面,包含多个功能面板。
三、配置串口参数在使用友善串口调试助手之前,首先需要配置串口参数。
点击界面上的“串口设置”按钮,会弹出一个配置面板。
在该面板上,可以设置串口的端口号、波特率、数据位、停止位、校验位等参数。
根据实际需求设置好参数后,点击“确定”按钮保存配置。
四、打开串口配置好串口参数后,需要点击界面上的“打开串口”按钮来打开串口。
成功打开串口后,可以在界面上看到实时接收到的串口数据。
五、发送数据友善串口调试助手支持对串口进行数据的发送。
在界面的发送面板中,可以输入要发送的数据。
支持多种发送方式,可以选择发送字符、发送十六进制、发送文件等。
输入完数据后,点击“发送”按钮即可将数据发送到串口中。
六、接收数据友善串口调试助手实时显示串口接收到的数据。
在界面的接收面板中,可以看到串口接收到的数据,可以选择显示字符、显示十六进制等方式展示数据。
同时,还可以设置数据的显示格式,如设置显示的数据长度、分隔符等。
七、数据格式转换友善串口调试助手还提供了数据格式转换的功能。
可以将接收到的串口数据转换为指定格式的数据。
在界面上的数据转换面板中,可以选择转换的数据格式,如ASCII码、十六进制等,设置好转换后,点击“转换”按钮即可将接收到的数据进行格式转换。
八、数据保存在使用友善串口调试助手时,可以将接收到的数据进行保存。
点击界面上的“保存”按钮,会弹出一个保存对话框,可以选择保存的文件路径和文件名,保存完成后,可以随时打开保存的文件查看数据。
串口调试助手通信调试原理图PCB及使用手册

串口调试助手通信调试原理图PCB及使用手册【简要说明】一、尺寸:长170mmX宽72mmX高18mm二、主要芯片:单片机,MAX485,MAX232三、工作电压:6V至40V,功耗小于1W四、特点:1、具有稳压电路,输入电压广,具有电源指示灯。
2、具有485通信和232通信及TTL通信。
3、具有数码管数据显示,蜂鸣器提示音4、波特率可调分别是 2400 4800 9600 192005、采用大按键,机械寿命长。
6、单片机编程,提供源代码7、可发送20组数据8、具有系统复位按键9、端子采用螺旋压接端子10、工作温度-40度至 +70度11、工作湿度 40% ~ 80%RH12、板子静态功耗小于1W13、具有续流保护14、具有电磁抗干扰能力15、板子稳定工作可靠16、板子可安装在DIN导轨上面使用说明:【标注说明】【功能描述】【原理图】【PCB图】【元件清单】【应用举例】【应用举例2】例如:将下面一组数据通过串口发送给电脑。
波特率是9600,电脑用串口助手显示出来。
数据是:A0 B2 CC FF EF D8 90 88第一步:板子供电,串口连接电脑,查看串口号。
如下图:我的电脑--属性--硬件---设备管理器---端口设备。
下图:第三步:从发送板,按下下面一组数据,数据是:A0 B2 CC FF EF D8 90 88数据按完之后,按发送键“S2”,如果数据输入错误,可以按”S1”按键清零,重新输入。
如果要发送多遍,重复按“S2”按键。
单遍发送如下图。
【源代码程序】/*一次最多发送20组数据,大于这个数据就不再发送*/#include <STC12C5A60S2.H>#define uchar unsigned char#define uint unsigned int/**************************************************************/unsigned char T0RH = 0; //T0重载值的高字节unsigned char T0RL = 0; //T0重载值的低字节extern void UartDriver(); //串口驱动函数,监测数据帧的接收,调度功能函数,需在主循环中调用extern void ConfigUART(unsigned int baud); //串口配置函数,baud-通信波特率extern void ConfigUART1(unsigned int baud1); //串口配置函数,baud-通信波特率extern void UartRxMonitor(unsigned char ms); //串口接收监控,由空闲时间判定帧结束,需在定时中断中调用,ms-定时间隔extern void SendString(char *s) ;extern void UartWrite(unsigned char *buf, unsigned char len); //串口数据写入,即串口发送函数,buf-待发送数据的指针,len-指定的发送长度extern void fengming();uchar zh[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};uchar jieshou[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; uchar jj = 0;/*****************************************************************/sbit out0 = P2^0;sbit out1 = P2^1;sbit out2 = P2^2;sbit out3 = P2^3;sbit in0 = P2^4;sbit in1 = P2^5;sbit in2 = P2^6;sbit in3 = P2^7;sbit smgk = P3^6;sbit boma1 = P1^1;sbit boma2 = P1^0;bit d1 = 1;bit d2 = 1;sbit in4 = P1^6;sbit in5 = P1^5;uchar code xianshi [] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};uchar dangqianzhuangtai[4][4] = {{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};void t0 () interrupt 1{uchar i;static uchar lie = 0;static uchar sao[2] = {1,1};static uchar saomiaobaocun [4][4] = {{0xff,0xff,0xff,0xff},{0xff,0xff,0xff,0xff},{0xff,0xff,0xff,0xff},{0xff,0xff,0xff,0xff}};TH0 = 0xfc;TL0 = 0x67;UartRxMonitor(1); //串口接收监控sao[0] = (sao[0]<<1) |in4;sao[1] = (sao[1]<<1) |in5;saomiaobaocun [lie][0] = (saomiaobaocun [lie][0]<<1) | in0; saomiaobaocun [lie][1] = (saomiaobaocun [lie][1]<<1) | in1; saomiaobaocun [lie][2] = (saomiaobaocun [lie][2]<<1) | in2; saomiaobaocun [lie][3] = (saomiaobaocun [lie][3]<<1) | in3;if(sao[0] == 0x00){d1 = 0;}else if(sao[0] == 0xff){d1 = 1;}if(sao[1] == 0x00){d2 = 0;}else if(sao[1] == 0xff){d2 = 1;}for (i=0;i<4;i++){if ((saomiaobaocun [lie][i] & 0x0f) == 0x00){dangqianzhuangtai[lie][i] = 0;}else if ((saomiaobaocun [lie][i] & 0x0f) == 0x0f){dangqianzhuangtai[lie][i] = 1;}}lie++;lie = lie & 0x03;switch (lie){case 0 : out1 = 1; out2 = 1; out3 = 1; out0 = 0; break;case 1 : out0 = 1; out2 = 1; out3 = 1; out1 = 0; break;case 2 : out0 = 1; out1 = 1; out3 = 1; out2 = 0; break;case 3 : out0 = 1; out1 = 1; out2 = 1; out3 = 0; break;}}void main (){uchar i,j;bit q1 = 1;bit q2 = 1;uchar qianyicizhuangtai[4][4] = {{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};smgk = 0;TMOD = 0x01;TH0 = 0xfc;TL0 = 0x67;TR0 = 1;EA = 1;ET0 = 1;P0 = xianshi[16];// ConfigUART(9600); //配置波特率为9600while (1){UartDriver(); //调用串口驱动if((boma1 == 0)&&(boma2 != 0)){ConfigUART(2400); //配置波特率为1200}if((boma2 == 0)&&(boma1 != 0)){ConfigUART(4800); //配置波特率为4800}if((boma1 == 0)&&(boma2 == 0)){ConfigUART(9600); //配置波特率为9600}if((boma1 != 0)&&(boma2 != 0)){ConfigUART1(19200); //配置波特率为19200 }if(d1 != q1){q1 = d1;if(d1 == 0){if((jj != 0)&&(jj <= 2)){zh[0] = jieshou[0] | jieshou[1];UartWrite(zh, 1);fengming();}if((jj > 2)&&(jj <= 4)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];UartWrite(zh, 2);fengming();}if((jj > 4)&&(jj <= 6)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];UartWrite(zh, 3);fengming();}if((jj > 6)&&(jj <= 8)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];zh[3] = jieshou[6] | jieshou[7];UartWrite(zh, 4);fengming();}if((jj > 8)&&(jj <= 10)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];zh[3] = jieshou[6] | jieshou[7];zh[4] = jieshou[8] | jieshou[9];UartWrite(zh, 5);fengming();}if((jj > 10)&&(jj <= 12)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];zh[3] = jieshou[6] | jieshou[7];zh[4] = jieshou[8] | jieshou[9];zh[5] = jieshou[10] | jieshou[11];UartWrite(zh, 6);fengming();}if((jj > 12)&&(jj <= 14)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];zh[3] = jieshou[6] | jieshou[7];zh[4] = jieshou[8] | jieshou[9];zh[5] = jieshou[10] | jieshou[11];zh[6] = jieshou[12] | jieshou[13];UartWrite(zh, 7);fengming();}if((jj > 14)&&(jj <= 16)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];zh[3] = jieshou[6] | jieshou[7];zh[4] = jieshou[8] | jieshou[9];zh[5] = jieshou[10] | jieshou[11];zh[6] = jieshou[12] | jieshou[13];zh[7] = jieshou[14] | jieshou[15];UartWrite(zh, 8);fengming();}if((jj > 16)&&(jj <= 18)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];zh[3] = jieshou[6] | jieshou[7];zh[4] = jieshou[8] | jieshou[9];zh[5] = jieshou[10] | jieshou[11];zh[6] = jieshou[12] | jieshou[13];zh[7] = jieshou[14] | jieshou[15];zh[8] = jieshou[16] | jieshou[17];UartWrite(zh, 9);fengming();}if((jj > 18)&&(jj <= 20)){zh[0] = jieshou[0] | jieshou[1];zh[1] = jieshou[2] | jieshou[3];zh[2] = jieshou[4] | jieshou[5];zh[3] = jieshou[6] | jieshou[7];zh[4] = jieshou[8] | jieshou[9];zh[5] = jieshou[10] | jieshou[11];zh[6] = jieshou[12] | jieshou[13];zh[7] = jieshou[14] | jieshou[15];zh[8] = jieshou[16] | jieshou[17];zh[9] = jieshou[18] | jieshou[19];UartWrite(zh, 10);fengming();}}}if(d2 != q2){q2 = d2;if(d2 == 0){jj = 0;jieshou[0] = 0x00;jieshou[1] = 0x00;jieshou[2] = 0x00;jieshou[3] = 0x00;jieshou[4] = 0x00;jieshou[5] = 0x00;jieshou[6] = 0x00;jieshou[7] = 0x00;jieshou[8] = 0x00;jieshou[9] = 0x00;P0 = xianshi[16];fengming();}}for (i=0;i<4;i++){for (j=0;j<4;j++){if(dangqianzhuangtai[i][j] != qianyicizhuangtai[i][j] ){qianyicizhuangtai[i][j] = dangqianzhuangtai[i][j];if(qianyicizhuangtai[i][j] != 0){jj++;if((i*4+j) < 9){P0 = xianshi[i*4+j+1];}if((i*4+j) == 9){P0 = xianshi[0];}if((i*4+j) > 9){P0 = xianshi[i*4+j];}fengming();/******************1组**************************/if(jj == 1){//jieshou[0] = i*4+j;//jieshou[0] = jieshou[0] << 4;if((i*4+j) < 9){jieshou[0] = i*4+j+1;if((i*4+j) == 9){jieshou[0] = 0;}if((i*4+j) > 9){jieshou[0] = i*4+j;}jieshou[0] = jieshou[0] << 4;}if(jj == 2){//jieshou[1] = i*4+j;if((i*4+j) < 9){jieshou[1] = i*4+j+1;}if((i*4+j) == 9){jieshou[1] = 0;}if((i*4+j) > 9){jieshou[1] = i*4+j;}}/******************2组**************************/ if(jj == 3){//jieshou[2] = i*4+j;if((i*4+j) < 9){jieshou[2] = i*4+j+1;}if((i*4+j) == 9){jieshou[2] = 0;}if((i*4+j) > 9){jieshou[2] = i*4+j;jieshou[2] = jieshou[2] << 4;}if(jj == 4){//jieshou[3] = i*4+j;if((i*4+j) < 9){jieshou[3] = i*4+j+1;}if((i*4+j) == 9){jieshou[3] = 0;}if((i*4+j) > 9){jieshou[3] = i*4+j;}}/******************3组**************************/ if(jj == 5){//jieshou[4] = i*4+j;if((i*4+j) < 9){jieshou[4] = i*4+j+1;}if((i*4+j) == 9){jieshou[4] = 0;}if((i*4+j) > 9){jieshou[4] = i*4+j;}jieshou[4] = jieshou[4] << 4;}if(jj == 6){//jieshou[5] = i*4+j;if((i*4+j) < 9){jieshou[5] = i*4+j+1;}if((i*4+j) == 9){jieshou[5] = 0;}if((i*4+j) > 9){jieshou[5] = i*4+j;}}/******************4组**************************/ if(jj == 7){//jieshou[6] = i*4+j;if((i*4+j) < 9){jieshou[6] = i*4+j+1;}if((i*4+j) == 9){jieshou[6] = 0;}if((i*4+j) > 9){jieshou[6] = i*4+j;}jieshou[6] = jieshou[6] << 4;}if(jj == 8){//jieshou[7] = i*4+j;if((i*4+j) < 9){jieshou[7] = i*4+j+1;}if((i*4+j) == 9){jieshou[7] = 0;}if((i*4+j) > 9){jieshou[7] = i*4+j;}}/******************5组**************************/{//jieshou[8] = i*4+j;if((i*4+j) < 9){jieshou[8] = i*4+j+1;}if((i*4+j) == 9){jieshou[8] = 0;}if((i*4+j) > 9){jieshou[8] = i*4+j;}jieshou[8] = jieshou[8] << 4;}if(jj == 10){//jieshou[9] = i*4+j;if((i*4+j) < 9){jieshou[9] = i*4+j+1;}if((i*4+j) == 9){jieshou[9] = 0;}if((i*4+j) > 9){jieshou[9] = i*4+j;}}/******************6组**************************/ if(jj == 11){//jieshou[10] = i*4+j;if((i*4+j) < 9){jieshou[10] = i*4+j+1;}if((i*4+j) == 9){jieshou[10] = 0;if((i*4+j) > 9){jieshou[10] = i*4+j;}jieshou[10] = jieshou[10] << 4;}if(jj == 12){//jieshou[11] = i*4+j;if((i*4+j) < 9){jieshou[11] = i*4+j+1;}if((i*4+j) == 9){jieshou[11] = 0;}if((i*4+j) > 9){jieshou[11] = i*4+j;}}/******************7组**************************/ if(jj == 13){//jieshou[12] = i*4+j;if((i*4+j) < 9){jieshou[12] = i*4+j+1;}if((i*4+j) == 9){jieshou[12] = 0;}if((i*4+j) > 9){jieshou[12] = i*4+j;}jieshou[12] = jieshou[12] << 4;}if(jj == 14){//jieshou[13] = i*4+j;if((i*4+j) < 9){jieshou[13] = i*4+j+1;}if((i*4+j) == 9){jieshou[13] = 0;}if((i*4+j) > 9){jieshou[13] = i*4+j;}}/******************8组**************************/ if(jj == 15){//jieshou[14] = i*4+j;if((i*4+j) < 9){jieshou[14] = i*4+j+1;}if((i*4+j) == 9){jieshou[14] = 0;}if((i*4+j) > 9){jieshou[14] = i*4+j;}jieshou[14] = jieshou[14] << 4;}if(jj == 16){//jieshou[15] = i*4+j;if((i*4+j) < 9){jieshou[15] = i*4+j+1;}if((i*4+j) == 9){jieshou[15] = 0;}if((i*4+j) > 9){jieshou[15] = i*4+j;}}/******************9组**************************/ if(jj == 17){//jieshou[16] = i*4+j;if((i*4+j) < 9){jieshou[16] = i*4+j+1;}if((i*4+j) == 9){jieshou[16] = 0;}if((i*4+j) > 9){jieshou[16] = i*4+j;}jieshou[16] = jieshou[16] << 4;}if(jj == 18){//jieshou[17] = i*4+j;if((i*4+j) < 9){jieshou[17] = i*4+j+1;}if((i*4+j) == 9){jieshou[17] = 0;}if((i*4+j) > 9){jieshou[17] = i*4+j;}}/******************10组**************************/ if(jj == 19){//jieshou[18] = i*4+j;if((i*4+j) < 9){jieshou[18] = i*4+j+1;}if((i*4+j) == 9){jieshou[18] = 0;}if((i*4+j) > 9){jieshou[18] = i*4+j;}jieshou[18] = jieshou[18] << 4;}if(jj == 20){//jieshou[19] = i*4+j;if((i*4+j) < 9){jieshou[19] = i*4+j+1;}if((i*4+j) == 9){jieshou[19] = 0;}if((i*4+j) > 9){jieshou[19] = i*4+j;}}}}}}}}void UartAction(unsigned char *buf, unsigned char len){//在接收到的数据帧后添加换车换行符后发回// buf[len++] = '\r';//buf[len++] = '\n';UartWrite(buf, (len-2));}【真值表】【图片展示】。
如何使用串口调试助手Keil软件仿真的串口调试技巧

如何使用串口调试助手Keil软件仿真的串口调试技巧在嵌入式系统开发中,串口调试是一项非常重要的技术。
Keil软件是一个广泛应用于嵌入式系统开发的软件平台,通过其内置的串口调试助手,我们可以方便地进行仿真的串口调试。
本文将介绍如何使用串口调试助手Keil软件仿真的串口调试技巧。
1. 了解串口基础知识在开始使用串口调试助手之前,首先需要了解一些串口的基础知识。
串口通信是一种通过串行传输数据的通信方式,常用的串口通信标准有RS232、RS485等。
了解波特率、数据位、停止位、校验位等串口通信参数的含义和选择是必要的。
2. 配置串口参数打开Keil软件后,选择对应的工程文件,并进入工程配置页面。
在这里,我们可以找到串口调试助手的配置选项。
根据实际需求,设置串口通信的参数,如波特率、数据位、停止位、校验位等。
确保与目标设备的串口参数一致,才能正常进行串口通信。
3. 编写串口发送与接收代码在代码中,我们需要编写串口发送和接收的相关代码。
通过Keil软件提供的API函数,我们可以方便地实现数据的发送和接收。
在发送数据时,需要将数据写入到相应的寄存器,以便传输到串口。
而在接收数据时,需要从寄存器中读取数据。
通过合理设计代码,可以实现稳定可靠的串口通信。
4. 仿真运行程序完成代码编写后,我们可以进行仿真运行,以验证串口调试功能的正确性。
在Keil软件中,可以选择进行单步调试、断点调试或连续运行调试。
通过监视寄存器的值变化、观察串口发送与接收的数据情况,可以帮助我们进行串口调试。
5. 使用串口调试助手测试在完成仿真运行后,我们可以使用串口调试助手进行测试。
打开串口调试助手,并选择与目标设备串口参数一致的配置。
点击打开串口,即可开始接收串口发送的数据。
通过观察串口调试助手输出的数据,可以验证串口通信的正确性。
6. 调试技巧与注意事项在使用串口调试助手Keil软件进行串口调试时,还需要注意一些调试技巧与注意事项。
首先,确保串口连接正确可靠,避免松动或接触不良导致数据传输错误。
串口调试助手源程序及编程详细过程

int hexdata,lowhexdata;
int hexdatalen=0;
int len=str.GetLength();
senddata.SetSize(len/2);
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
3.利用ClassWizard定义CMSComm类控制对象 打开ClassWizard->Member Viariables选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1添加控制变量:m_ctrlComm,这时你可以看一看,在对话框头文件中自动加入了//{{AFX_INCLUDES() #include "mscomm.h" //}}AFX_INCLUDES (这时运行程序,如果有错,那就再从头开始)。
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
}运行程序,在发送编辑框中随意输入点什么,单击发送按钮,啊!看看,在另一端的串口调试助手(或别的调试工具)接收框里出现了什么。如果你真是初次涉猎串口编程,又一次成功,那该说声谢谢我了,因为我第一次做串口程序时可费劲了,那时网上的资料也不好找。开开玩笑,谢谢你的支持,有什么好东西别忘了给我寄一份。最后说明一下,由于用到VC控件,在没有安装VC的计算机上运行时要从VC中把mscomm32.ocx、msvcrt.dll、mfc42.dll拷到Windows目录下的System子目录中(win2000为System32)龚建伟 2001.6.20
VC编写串口调试助手(含VC6工程源文件)

纯业余者用VC(MFC)编写串口调试助手1.序毕业到现在,转眼就做射频开发10年了,一直从事直放站、干放等通信边缘行业,从低噪放、锁相源、选频、功放到整机,射频就那么点东西,而且越来越集成化,软件无线电是必然趋势。
做射频从业面会越来越窄,我知道所有人都会说,当你成为专家的时候,一切就都不是问题,可有几个真正的专家,再者说,射频需要经验的积累,只有实际项目做的越多越广,经验也就积累得越多,并不是一朝一夕能达到的。
前不久突然觉得,我的射频模块控制要是也是自己来编程控制多好啊!那就得学单片机编程,学习上位机编程了,可我都不会啊,要不就先来整整上位机,windows方面的。
大学唯一学的编程语言是C语言,可根本不能理解用C做什么,还都还给老师10多年了,这怎么办?从BASIC,C/C++,JAVA,PASCAL搜索了一圈,还是选C++吧,毕竟是C 语言发展而来,用VC环境,身边有可以请教的人。
在网上转悠了很久,发现《windows程序设计》是必看,《MFC Windows程序设计》是学MFC最经典的书籍。
OMG,这些书啊,都是上千页的,白天都在上班,哪有时间看哦,只有先下载下来作为参考资料了。
扯远了啊。
这也不行那也不行,怎么办呢?干脆硬着头皮上吧,找几个实例照搬,再修修改改加深理解吧。
第一个目标,自己编写个串口调试助手,掌握串口通信编程,这样上位机的编写就有希望了。
好了,目标定下来了。
网上下载了个串口调试助手,确定基本功能:1.自动寻找串口,并自动添加到下拉框中共选择;2.有波特率、数据位、停止位、校验位的选择设置;3.串口打开控制按钮;4.发送、清除按钮;5.接收是自动实现的;6.有定时自动发送功能;7.有传送文件功能;8.有状态栏显示,指示串口状态,设置参数和发送接收显示。
下面就一步步实现,本人纯业余,只是记录下来这个学习过程,请勿拍砖。
开发平台Visual C++6.0英文版,电脑是i7-2670Q四核8G内存1G独显的笔记本,装的win764位旗舰版,因此VC6兼容不是太好,有些小毛病,不过不影响编写。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串口通信调试助手设计学生:(宋体五号居中)指导教师:(宋体五号居中)(楷体五号居中)1 发展历史和由来串口的出现是在1980年前后,数据传输率是115kbps~230kbps。
串口出现的初期是为了实现连接计算机外设的目的,初期串口一般用来连接鼠标和外置Modem以及老式摄像头和写字板等设备。
串口也可以应用于两台计算机(或设备)之间的互联及数据传输。
由于串口(COM)不支持热插拔及传输速率较低,目前部分新主板和大部分便携电脑已开始取消该接口。
目前串口多用于工控和测量设备以及部分通信设备中。
2 串口通信划分种类串口通信的两种最基本的方式:同步串行通信方式和异步串行通信方式。
同步串行是指SPI(Serial Peripheral interface)的缩写,顾名思义就是串行外围设备接口。
SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息,TRM450是SPI接口。
异步串行是指UART(Universal Asynchronous Receiver/Transmitter),通用异步接收/发送。
UART是一个并行输入成为串行输出的芯片,通常集成在主板上。
UART包含TTL电平的串口和RS232电平的串口。
TTL电平是3.3V的,而RS232是负逻辑电平,它定义+5~+12V为低电平,而-12~-5V为高电平,MDS2710、MDS SD4、EL805等是RS232接口,EL806有TTL接口。
串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS485等。
RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。
3 各类串口协议简介3.1 各类串口的比较从其发展历史、各自特点来介绍各种协议,RS232和RS485的区别和接法。
首先是发展历史。
最开始出现的串口通信协议是RS232,1962年发布的。
由于其传输速度、单向传递、传输距离短等多方面的制约,因此使用受到限制。
于是人们在RS232的基础上做了相应的改进,提高了相应的传输速度、传输距离,于是出现了RS422的雏形,并在工业上得到了相应的应用。
但由于任然是单向传输的,使构成的网络只能是单向的。
既只能是主机给从机发送指令或数据,从机只能接受并处理相应的消息,不能反映相应的结果。
于是人们又做了相应的调整。
最后于1983年发布了RS485通信协议。
正如前面所说的。
RS232协议是一种简单的串口通信协议,也是最基本的。
一般用在实验室等短距离、对传输速度等要求不高的场合,并且与TTL电平不兼容。
RS422有了相应的提高。
是一种单机发送,多机接收的平衡通信协议接口,传输速度最高可以达到10Mbps,传输距离最远可达到4000英尺,并且在这条平衡总线上能最多带10个从机,但是任然是单向的传输。
RS485是一种多点,双向通信的平衡通信协议接口。
再RS422的基础上增加了网络中接点(多机)的数量和双向通信能力,同时还增加了驱动器的传输能力和冲突保护特性,扩展了总线共模范围。
传输速度最高可以达到10Mbps,标准距离可以达到4000英尺,实际能达到3000米,并且在这条线上最多可以带128个收发器。
RS232和RS485的区别: 1.传输速度不同。
RS485可以达到10Mbps,高于RS232的速度。
2.电气特性不同。
RS485采用的是平衡驱动器和差分接收器的组合。
RS485是输出的是差分信号,抗共模干扰能力强。
逻辑“1”是两输出信号的+(2~6)V,“0”是-(2~6)V表示。
电气信号低于RS232的电气信号,不容易损坏接口芯片,并且与TTL电平兼容。
3.传输距离不同。
RS485标准距离为4000英尺,实际可以达到3000米。
远远大于RS232的距离。
4.接收器数量不同。
RS485接收器最多可以达到128个,即多站能力。
而RS232只能是一个,即单站接点。
5.RS232是全双工的通信协议,RS485是半双工的通信协议。
接口方法:一般RS232和RS485都采用屏蔽双绞线传输。
RS485和RS232都采用DB9的接头3.2 各类串口的协议串行通信协议:计算机与外设或计算机之间的通信通常有两种方式:并行通信和串行通信。
并行通信指数据的各位同时传送。
并行方式传输数据速度快,但占用的通信线多,传输数据的可靠性随距离的增加而下降,只适用于近距离的数据传送。
串行通信是指在单根数据线上将数据一位一位地依次传送。
发送过程中,每发送完一个数据,再发送第二个,依此类推。
接受数据时,每次从单根数据线上一位一位地依次接受,再把它们拼成一个完整的数据。
在远距离数据通信中,一般采用串行通信方式,它具有占用通信线少、成本低等优点。
1、串行通信的基本概念(1)同步和异步通信方式串行通信有两种最基本的通信方式:同步串行通信方式和异步串行通信方式。
同步串行通信方式是指在相同的数据传送速率下,发送端和接受端的通信频率保持严格同步。
由于不需要使用起始位和停止位,可以提高数据的传输速率,但发送器和接受器的成本较高。
异步串行通信是指发送端和接受端在相同的波特率下不需要严格地同步,允许有相对的时间时延,即收、发两端的频率偏差在10%以内,就能保证正确实现通信。
异步通信在不发送数据时,数据信号线上总是呈现高电平状态,称为空闲状态(又称MARK状态)。
当有数据发送时,信号线变成低电平,并持续一位的时间,用于表示发送字符的开始,该位称为起始位,也称SPACE状态。
起始位之后,在信号线上依次出现待发送的每一位字符数据,并且按照先低位后高位的顺序逐位发送。
采用不同的字符编码方案,待发送的每个字符的位数不同,在5、6、7或8位之间选择。
数据位的后面可以加上一位奇偶校验位,也可以不加,由编程指定。
最后传送的是停止位,一般选择1位、1.5位或2位。
(2)数据传送方式①单工方式。
单工方式采用一根数据传输线,只允许数据按照固定的方向传送。
图8(a)中A只能作为发送器,B只能作为接收器,数据只能从A传送到B,不能从B传送到A。
②半双工方式。
半双工方式采用一根数据传输线,允许数据分时地在两个方向传送,但不能同时双向传送。
图8(b)中在某一时刻,A为发送器,B为接收器,数据从A传送到B;而在另一个时刻,A可以作为接收器,B作为发送器,数据从B传送到A。
③全双工方式。
全双工方式采用两根数据传输线,允许数据同时进行双向传送。
图8(c)中A和B具有独立的发送器和接收器,在同一时刻,既允许A向B 发送数据,又允许B向A发送数据。
(3)波特率波特率是指每秒内传送二进制数据的位数,以b/s和bps(位/秒)为单位。
它是衡量串行数据传送速度快慢的重要指标和参数。
计算机通信中常用的波特率是:110,300,600,1200,2400,4800,9600,19200bps。
(4)串行通信的检错和纠错在串行通信过程中存在不同程度的噪声干扰,这些干扰有时会导致在传输过程中出现差错。
因此在串行通信中对数据进行校验是非常重要的,也是衡量通信系统质量的重要指标。
检错,就是如何发现数据传输过程中出现的错误,而纠错就是在发现错误后,如何采取措施纠正错误。
①误码率误码率是指数据经传输后发生错误的位数与总传输位数之比。
在计算机通信中,一般要求误码率达到10-6数量级。
误码率与通信过程中的线路质量、干扰、波特率等因素有关。
②奇偶校验奇偶校验是常用的一种检错方式。
奇偶校验就是在发送数据位最后一位添加一位奇偶校验位(0或1),以保证数据位和奇偶校验位中1的总和为奇数或偶数。
若采用偶校验,则应保证1的总数为偶数;若采用奇校验,则应保证1的总和为奇数。
在接受数据时,CPU应检测数据位和奇偶校验位中1的总数是否符合奇偶校验规则,如果出现误码,则应转去执行相应的错误处理服务程序,进行后续纠错。
③纠错在基本通信规程中一般采用奇偶校验或方阵码检错,以重发方式进行纠错。
在高级通信中一般采用循环冗余码(CRC)检错,以自动纠错方式来纠错。
一般说来,附加的冗余位越多,检测、纠错能力就越强,但通信效率也就越低。
2、串行通信接口标准串行通信接口按电气标准及协议来分包括RS-232、RS-422、RS485、USB等。
RS-232、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。
USB是近几年发展起来的新型接口标准,主要应用于高速数据传输领域。
(1)RS-232串行接口目前RS-232是PC机与通信工业中应用最广泛的一种串行接口。
RS-232被定义为一种在低速率串行通信中增加通信距离的单端标准。
RS-232采取不平衡传输方式,即所谓单端通信。
①脚定义RS-232物理接口标准可分成25芯和9芯D型插座两种,均有针、孔之分。
其中TX(发送数据)、RX(接受数据)和GND(信号地)是三条最基本的引线,就可以实现简单的全双工通信。
DTR(数据终端就绪)、DSR(数据准备好)、RTS(请求发送)和CTS(清除发送)是最常用的硬件联络信号。
RS-232接口定义及连线RS-232/串口/异步口/com(通信)口严格的讲RS-232接口是DTE(数据终端设备)和DCE(数据通信设备)之间的一个接口。
远程通信终端设备DTE ( Date Terminal Equipment )数据通信设备DCE ( Data Communcation Equipment )DTE包括计算机、终端、串口打印机等。
(针输出)DCE通常有调制解调器(MODEM)和某些交换机com口。
(孔输出)RS-232C 标准中提到的“发送”和“接收”,都是站在DTE立场立场上。
1.电气特性TxD RxD逻辑1(MARK)= -3v ~ -15v逻辑0(MARK)= +3v ~ +15vRTS CTS DSR DTR DCD 等信号有效(接通,ON状态,正电压)= +3v ~ +15v信号无效(断开,OFF状态,负电压)= -3v ~ -15v与TTL以高低平表示逻辑状态的规定不同。
因此,为了能同计算机接口或终端的TTL器件连接,必须进行电平和逻辑关系的变换。
广泛采用集成电路转换器件,MC1488、SN75150(TTL->EIA)、MAX232(TTL<->EIA)。
2.连接器的机械特性DB-9连接器:AT机以后,不支持20MA电流环接口,使用DB-9,作为提供多若功能I/O卡或主板上COM1/COM2两个串口的连接器。
电缆长度:通信速率低于20kb/s时,RS-232C直接连接最大15m。
最大传输距离:若不使用MODEM,码元畸变小于4%的情况下,最大15m。
3.RS-232C的接口信号常用的只有9根,标准25根,4条数据、11条控制线、3条定时、7条备用。