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”);
}

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

相关内容

热门资讯

走进小城看消费丨江西资溪:低碳...   夏日时节下午4点,江西省抚州市资溪县大觉山景区漂流终点依然热闹。来自南昌的游客余鑫漂流结束后没有...
【中原晨会0625】市场分析专... 来源:市场资讯 (来源:中原证券研究所) 本期重点研报目录 【中原策略】市场分析:电子半导体领涨 ...
南向资金连买4日!低费率+可月... 6月25日早盘,港股红利资产震荡整理。截至11时14分,港股红利低波ETF招商(520550)下跌0...
618成交破百万!紫荆花用一套... 一年一度的618年中大促,是消费市场的晴雨表,也是品牌间最激烈的角力场。当各大品牌在直播间里铆足了劲...
原创 黄... 2026年6月25日的国际金价已经从前期的5500美元高点跌到4200美元下方,累计跌幅超过22%,...
英伟达CEO:Vera Rub... 截至9:38,中证半导体材料设备主题指数(931743)涨2.36%创新高;权重股中,中微公司涨3....
再被催债16亿!“钢铁大王”戴... 澎湃新闻记者 贺梨萍 因“铁本事件”入狱五年的戴国芳重返钢铁行业,但他并没有完成从阶下囚再到“钢铁大...
周三原油价格下跌 随着美国和伊朗在和平谈判中取得进展,越来越多的油轮公开穿越霍尔木兹海峡,原油在战时的价格上涨已经蒸发...
这种蛋白是大脑衰老的开关 这种蛋白是大脑衰老的开关 清晨,假设一位五十岁左右的王女士发现自己常常把手机放在熟悉的抽屉里又找不到...
信通院牵头算力Token出海生... 盘面上,截至11:04,中证科创创业50指数(931643)涨1.68%,创历史新高;权重股中,芯原...
海外 774 亿营收背后:日本... 文 | 游戏价值论 6月23日,彭博社报道了腾讯正在围绕出售多家日本游戏工作室少数股权开展谈判,包...
餐饮“抢人”大战:把店开到公交... 作者 |餐饮老板内参 内参君 医院、公交站、演唱会…餐饮品牌,正在无孔不入 在北京儿童医院,肯德基...
快讯 | 外资扫货!陈翊庭:港... 港交所行政总裁陈翊庭在接受《中国证券报》专访时指出,国际资本对中国资产的看法已彻底扭转,布局中国市场...
2777.77元!A股“股王”... 25日早盘,昨天创下历史新高的A股“股王”联讯仪器,今天上午继续走强,盘中股价再度刷新历史新高。 截...
原创 今... 欧洲自己的媒体直接下结论,欧盟衰退躲不掉,内部分裂拦不住,现在就连欧洲顶尖工业巨头,都偷偷在用中国的...
黄仁勋股东大会放言:本轮AI基... 在当地时间6月24日的英伟达(NVDA.O)2026年度股东大会上,股东批准了该公司全部10名董事会...
国际油价大跌 新华社消息, 纽约原油期货主力合约价格24日盘中跌破每桶70美元,为伊朗战事爆发以来首次。 市场分析...
马云带队插秧,什么信号? 一场别开生面的“务农”,让外界看到了一个不一样的阿里巴巴。 近日,阿里巴巴合伙人、高德董事长刘振飞在...
全球最大产能,最高丰度达99.... 本文转自【科技日报】; 6月23日,高丰度硼-10同位素技术暨产业化成果发布会在山东省东营市举办,全...
黄金大跳水!金饰克价年内暴跌近... 25日,现货黄金盘中震荡,截至发稿,报3985.070美元/盎司,跌0.17%。 当地时间24日,...