Vector - CAPL - RS232串口处理
创始人
2025-05-31 08:56:10
0

摸鱼聊天、答疑解惑首选之地 --- 车载网络哪些事儿

你是否还在为VT板卡系统昂贵而发愁?是否为MCU log没办法而烦恼?当前车载网络协议测试这块,vector可以说是一家独大,因此各种骚操作一年比一年多,然而对于我们测试工程师来说,我们只想最快、最准确的完成测试,但是VT板卡的价格让大部分公司望而却步。但是对于测试网络唤醒、CAN总线短路等,我们又必须使用CANoe的高精度测试,这也形成了一个矛盾体;那该如何解决呢?继电器是个好东西,时延和准确度都是1ms左右,完全能够满足我们的测试需求,因此我们可以通过控制继电器来实现控制硬线唤醒或者其他硬线的操作,在保证测试结果的情况下做个折中的替代。

另外一方面,在测试过程中,测试工程最烦恼的一件事就是没有MCU log,我们没办法分析,你去复现一下 ,把MCU log抓取一下吧;如果是必现问题还好,但是如果是低概率问题,那无论是谁我想都是痛苦面具了,这不仅浪费我们的时间,实际情况是还不一定有很好的工作产出,那我们该如何去做呢?是的,我们可以直接通过自动化抓取MCU log,这样在每次测试完成,就可以同时抓取MCU log,减少我们的无意义工作量了,因此通过串口抓取log非常有必要了。 那RS232有非常有必要提上日程了,今天我们就来介绍下RS232相关函数。

RS232Open

功能:打开一个串口端口

说明:串行端口在当前执行CAPL代码的节点上可用,同一个端口可以由多个节点使用,如果端口已打开,其他程序将无法再访问串行端口。

port:串口端口号,取值范围1 - 255

返回值:

0:系统上不存在具有给定编号的串行端口或者另一个程序正在占用该串口端口号

1:打开成功

代码示例

if ( 1==RS232Open(1) ) 
{write("open serial port 1 success");TestStepPass("Check","open serial port 1 success");
}
else
{write("open serial port 1 fail");TestStepFail("Check","open serial port 1 fail");
}

RS232Close

功能:关闭一个已打开串口

说明:所有节点的串行端口都将关闭。同一个端口可以由多个节点关闭(或重复关闭);关闭后,其他程序可以使用串行端口。关闭串行端口后,端口的配置将丢失。下次打开端口时,将使用系统默认值进行配置。

总结起来就是一旦关闭port串口,CAPL与该串口断开连接,无法被使用;且配置全部恢复为默认配置,再次打开如果有特殊配置需要重新进行配置。

port:串口端口号,取值范围1 - 255

返回值:

0:系统上不存在具有给定编号的串行端口

1:打开成功

代码示例

if ( 1==RS232Close(1) ) 
{write("Close serial port 1 success");TestStepPass("Check","Close serial port 1 success");
}
else
{write("Close serial port 1 fail");TestStepFail("Close","open serial port 1 fail");
}

RS232Configure

功能:配置串口参数

说明:

如果是不使用该函数则使用默认配置

默认配置信息:默认波特率 9600,8个数据位,1个停止位,无奇偶校验。

port:串口端口号,取值范围1 - 255

baudrate:用于接收和传输的波特率,通常使用9600。一般根据设备支持的波特率进行设置。通常,115200是允许的最大值。

numberOfDataBits:传输帧内的数据位数;最多使用8,默认一般也是使用8。只有介于5和8之间的值是可能的。串行端口不支持所有值,也不支持与其他帧参数的所有组合。

numberOfStopBits:一种设置传输帧内停止比特数的值。

1

使用1个停止位

2

使用2个停止位

parity:标识要使用的奇偶校验模式的值

0

未使用奇偶校验,即帧不包含奇偶校验位

1

奇数奇偶校验

2

偶数奇偶校验

enableParityCheck:指示是启用还是禁用奇偶校验。如果参数奇偶校验设置为0(未使用奇偶校验),则忽略此参数。

0:奇偶校验已禁用

!=0 (≠0):奇偶校验已启用

返回值:

0:如果端口不存在或者端口未打开,则返回0

1:配置成功

代码示例

if (0!=RS232Configure(1,9600,8,1,0)) 
{write("configuration serial port 1 success");TestStepPass("Check","configuration serial port 1 success");
}
else
{write("configuration serial port 1 fail");TestStepFail("configuration","open serial port 1 fail");
}

RS232Send

功能:在串行端口上发送数据块。

说明:向串行端口发送一个字节块,该操作开始发送块,回调处理程序RS232OnSend将通知节点完成。

要了解操作后期发生的错误,请使用RS232OnError;出现错误时,不会自动重试。

port:串口端口号,取值范围1 - 255

buffer:将发送其数字的字节数组。

number:要发送的字节数。

返回值:

0:系统上不存在具有给定编号的串行端口;

端口尚未打开;

之前不久使用了另一个非阻塞发送操作;

前一个发送操作可能尚未完成,从而导致错误;

1:成功发送了串口数据。

代码示例

char text[20] = “Hello World !”;
byte buffer[20];
int i;
int length;
length=strlen(text)+1;
//初始化发送buffer
for (i=0;i

RS232Receive

功能:设置串行端口的接收器缓冲区。

说明:如果接收到任何数据,则回调处理程序RS232OnReceive将通知节点。

如果将给出另一个接收操作,则结果缓冲区将更改为上次接收操作给出的缓冲区。

要了解操作后期发生的错误,请使用RS232OnError。接收的重试将持续启动,但如果再次发生错误,将不会通知您。

port:串口端口号,取值范围1 - 255

buffer:接收串口数据的数组。

number:可接受的最大字节数。

返回值:

0:系统上不存在具有给定编号的串行端口;

端口尚未打开;

之前不久使用了另一个非阻塞发送操作;

前一个发送操作可能尚未完成,从而导致错误;

1:成功接收到了串口数据

代码示例

byte mybuffer[20];
int mysize=20;
if ( 1==RS232Receive(1,mybuffer,mysize) )write(“It works with port 1.”);if(1 == RS232Receive(F_PowerPort,receivebyte,30))
{testWaitForTimeout(150);Byte2Str(gReceiverBuffer,receivebuf,30);ReSleCur = (atodbl(receivebuf))*500;if(gReceiverBuffer[0] == 0x22&&gReceiverBuffer[1] == 0x01&&gReceiverBuffer[2] == 0x11){testWaitForTimeout(888);ReSleCur = 255; return ReSleCur;}else{if((ReSleCur < @NM_test::Sleep_Current)&&(ReSleCur>=0)){testWaitForTimeout(3000);testStepPass("Check","DUT enter sleep success,current: %fmA",ReSleCur);}}
}

RS232OnSend

功能:在RS232Send发出的请求完成后,将调用处理程序。

说明:

用于完成对串行端口的发送操作的回调处理程序。

将仅在发出发送操作的节点上调用。

只有在成功时才会调用处理程序

port:串口端口号,取值范围1 - 255

buffer:将发送其数字的字节数组。

number:要发送的字节数。

返回值:

0:如果不使用发送操作,则会发生错误

1:发送成功

代码示例

char text[20] = “Hello World !”;
byte block[20];
int i;
int length;
length=strlen(text)+1;
for (i=0;i

RS232OnReceive

功能:如果在端口接收到数据,将定期调用处理程序,从调用RS232Receive开始。

说明:

用于在串行端口接收数据的回调处理程序。

将仅在为给定端口发出RS232Receive操作的节点上调用,只有在成功时才会调用处理程序

缓冲区可能比数字大得多。对于非常慢的连接,可能会调用几个字节的处理程序。至少给出了一个字节。可以在多个节点监听同一个端口,将使用相同的数据调用所有节点。

port:串口端口号,取值范围1 - 255

buffer:接收串口数据的数组。

number:可接受的最大字节数。

返回值:

0:如果没有启动接收操作,则会发生错误

1:接收成功

代码示例

// at sender node
char text[20] = “Hello World !”;
byte block[20];
int i;
int length;
length=strlen(text)+1;
for (i=0;i

RS232OnError

功能:如果发生错误,将调用处理程序。

说明:

用于在串行端口接收错误的回调处理程序。

将仅在发出发送/接收操作的节点处调用。

对于重复错误(稳定错误条件),只返回第一个错误。这种情况可能发生在接收错误的情况下,即在两个连接端的配置不匹配的情况下。

在配置不匹配的情况下,错误可能不会同时发生,例如,一个端口9600/8/1/无奇偶校验,另一端115200/8/1/没有奇偶校验的配置可能看起来有效(尽管接收到垃圾)。

port:串口端口号,取值范围1 - 255

errorFlags:位被设置为标记条件。

Bit

Error

0

发送操作失败。

1

接收操作失败。

2

帧错误,可能由奇偶校验失配或任何其他帧失配(例如停止位的数量)引起。

3

帧奇偶校验错误,是由奇偶校验不匹配引起的。

4

缓冲区溢出,如果发送方的驱动程序发送速度不够快,如果是接收方在太短的时间内获得了太多数据,或者其他任何情况,都没有指定。

5

接收器缓冲区溢出。

6

中断状态,另一端请求暂停。

7

超时,可能是由于错误设置的超时时间太短造成的。请参阅RS232SetHandshake以设置超时。

代码示例

RS232OnError(dword port, dword errorFlags)
{if ( errorFlags & 1 )writeLineEx(0,3,“send failed”);if ( errorFlags & 2 )writeLineEx(0,3,“receive failed”);
}

串口处理函数用的好能够在工作中帮助我们解决很多不必要的麻烦和问题,大家可以深度研究,我们一起交流!!!

相关内容

热门资讯

无需预约、提供插座,星巴克回应... 华声在线7月22日讯(全媒体记者 仝若楠 通讯员 万家忻)近日,有网友在社交媒体上发帖表示,广东部分...
黑天鹅突袭!7个跌停! 【导读】*ST苏吴控股孙公司独家经销权将被撤销,拟撤销方被爱美客接手不久 中国基金报记者 闻言 7月...
鲍威尔:美联储须专注于确保大型... 来源:智通财经网 美联储主席鲍威尔周二表示,美联储的监管实践“必须集中在决定安全与稳健的关键领域”。...
香港黄金交易所优势加持,金荣中... 香港作为国际金融中心,凭借高度开放的金融市场、成熟完善的监管体系以及与国际接轨的投资环境,成为亚洲及...
股市必读:惠泰医疗(68861... 截至2025年7月22日收盘,惠泰医疗(688617)报收于295.66元,下跌0.2%,换手率0....
独家|外汇展业改革参与银行增至... 新媒体编辑 | 实习生 宋语菡 7月22日,国新办举行新闻发布会,国家外汇局副局长、新闻发言人李斌,...
今年以来12大类家电以旧换新销... 商务部7月22日消息,商务部流通发展司负责人表示,上半年,我国以旧换新成效显著,国货“潮品”深受欢迎...
AI英语教育站上风口 “伴鱼阅... 本报讯 (记者贾丽)国内在线教育企业北京读我科技有限公司(以下简称“伴鱼”)旗下核心产品“伴鱼阅读营...
罕见一幕!六大期货品种集体涨停... 在“反内卷”政策的刺激下,工业品期货全线大涨! 7月22日,商品期货午后大爆发,焦煤、焦炭、多晶硅、...
Club Med换帅落定:法国... Club Med换帅风波终落定。7月21日夜,复星旅文旗下核心资产Club Med正式任命法国籍高管...
金价又“疯”了!克价1021元... #热点新知#家人们谁懂啊!一觉醒来,金饰克价直接蹦回1021元 !咱楼下金店那电子屏,数字跳得比我工...
读懂IPO|穿透明略科技盈利表... 来源丨时代商业研究院 作者丨陈丽娜 编辑丨郑琳 当前人工智能行业普遍面临盈利难题,例如,素有中国人工...
大摩高管“抄底”香港楼市,一次... 据媒体报道,摩根士丹利董事总经理戴维·约翰·赖特(David John Wraight)以1.473...
山西打造“专精特新”专板 首批... “‘专精特新’企业是培育新质生产力的核心引擎,山西‘专精特新’专板建设是打通金融活水精准灌溉的关键通...
【数据发布】2025年上半年辽... 根据辽宁省地区生产总值统一核算结果,2025年上半年全市实现地区生产总值457.0亿元,按不变价格计...
赴港上市潮起,半导体企业为何扎... 【大河财立方 记者 王磊彬】2025年以来,港股IPO市场迎来新一轮半导体企业上市热潮。 据不完全统...
煤炭板块异动拉升,多只资源主题... 7月22日,市场全天震荡走高,三大指数盘中均创年内新高。板块方面,超级水电、工程机械、煤炭、水泥等板...
中国太平李可东“履新”,兼任2... 中国太平总经理李可东“履新”,兼任旗下两家子公司董事长。 7月21日,太平财险公告称,经国家金融监管...
胜宏科技回应赴港二次IPO,受... 瑞财经 吴文婷7月22日,据媒体报道,胜宏科技证券部工作人员回应筹划港股IPO一事,称公司主要基于资...
洪灏:港股如约创新高,向上空间... 洪灏系莲华资产管理公司管理合伙人&CIO,中国首席经济学家论坛理事 知名经济学家、 莲花投资公司合伙...