0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术串口通讯中数据发送的有关问题分析

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-02-04 11:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

异步串口(UART)通讯是嵌入式设备中最常见的通讯方式之一。本文主要针对预装Windows CE操作系统的英创主板,分析用户层程序在使用UART进行发送时的几个有关问题,供客户在设计应用程序时参考。

问题1:数据是否发送出去了?

WriteFile函数是发送串口数据的基本API,具体函数形式及参数定义如下:

BOOLWriteFile(

HANDLE hFile,//CreateFile返回函数Handle

LPCVOID lpBuffer,//装载发送数据的Buffer指针

DWORD nNumberOfBytesToWrite,//待发送数据的字节长度

LPDWORD lpNumberOfBytesWritten,//返回的实际发送的字节数

LPOVERLAPPED lpOverlapped// = NULL,CE未使用该参数

);

WriteFile的返回值为TRUE并不代表发送Buffer中的数据已全部发送出去了,需要检查返回的实际字节长度lpNumberOfBytesWritten。所以推荐的调用方法为

// 发送缓冲区pTxBuff, 发送长度dwLen

DWORD dwNumberOfBytesWritten = 0;

BOOL bRet = WrietFile(hFile, pTxBuf, dwLen, &dwNumberOfBytesWritten, NULL);

if(bRet && (dwLen == dwNumberOfBytesWritten))

{

//发送缓冲区中的数据已成功送入UART硬件的发送端口,大多数情况数据已从

//物理端口发送出去,但此时可能还有若干字节还在UART的硬件TX FIFO中,等

//待硬件控制器顺序发送。

//… 发送成功 …

}

else

{

//发送出错处理。。。。

}

问题2:WriteFile函数的阻塞问题

CE串口驱动的执行数据发送时,为了保持代码的高效率,没有在驱动程序中层另外分配Buffer,把应用层需发送的数据先Copy到内部再发送,而是直接利用用户层的pTxBuf。因此原则上说,当数据没有发送完前,WriteFile函数是不会返回,处于阻塞挂起状态的。进一步,可能存在某种原因,数据始终没有发送完毕,则WriteFile将永远阻塞而不会返回。不少应用程序并不希望这样的永远阻塞,而是希望WriteFile能在一定时间内返回,即使出错,也让应用程序有机会进行出错处理。CE驱动为此专门设置了超时机制,其数据结构如下:

typedefstruct_COMMTIMEOUTS {

DWORD ReadIntervalTimeout; //与接收有关,本文不讨论

DWORD ReadTotalTimeoutMultiplier; //与接收有关,本文不讨论

DWORD ReadTotalTimeoutConstant; //与接收有关,本文不讨论

DWORD WriteTotalTimeoutMultiplier; //发送超时倍数因子

DWORD WriteTotalTimeoutConstant; //发送超时固定常数值

} COMMTIMEOUTS,*LPCOMMTIMEOUTS;

实际在驱动中,发送超时的计算及使用方法如下:

DWORD dwTimeout =

CommTimeouts.WriteTotalTimeoutMultiplier*dwLen +

CommTimeouts.WriteTotalTimeoutConstant;

if( !dwTimeout )

dwTimeout = INFINITE;

//等待来自发送中断线程的发送结束事件

ULONG WaitReturn = WaitForSingleObject(hTransmitEvent, dwTimeout);

上面的代码中dwTimeout的单位为ms,在第一次打开串口驱动”COM#”时,超时数据结构中的WriteTotalTimeoutMultiplier和WriteTotalTimeoutConstant均为0,所以就有发送超时无穷的问题。为了让dwTimeout为有限值,需要设置超时参数如下:

COMMTIMEOUTS CommTimeouts; //定义局部变量

GetCommTimeouts(hFile, &CommTimeouts); //读取串口的超时参数

//假设应用程序设置的串口波特率为baud

CommTimeouts. WriteTotalTimeoutConstant = baud / BR9600 + 1;

CommTimeouts. WriteTotalTimeoutMultiplier =

CommTimeouts.WriteTotalTimeoutConstant * 2;

SetCommTimeouts(hFile, &CommTimeouts); //重新设置串口超时参数

上述代码大致设置了一个2倍发送时间长度的超时时间,其中选取BR9600为单位时间,是因为9600bps波特率基本对应一个字节的发送时间为1ms。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • WINDOWS
    +关注

    关注

    4

    文章

    3697

    浏览量

    93251
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6107

    浏览量

    36953
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    龙芯中科助力2025教育信息技术应用创新大赛成功举办

    2025年11月13日-15日,由中国教育技术协会主办、浙江大学与中国教育技术协会网络安全专业委员会联合承办,中国电子工业标准化技术协会信息技术应用创新工作委员会、浙江高校信
    的头像 发表于 11-21 16:23 615次阅读

    【道生物联TKB-623评估板试用】TKB-623评估板双机通讯测试_程序开发

    \\\\r\\\\n: 设置完成,开启串口发送AT指令,就可以看到类似途中AT_OK的返回了。 能看到AT_OK,说明和电脑的通讯正常了。 三、配对测试 在两个串口工具
    发表于 10-18 23:54

    易华录入选国家级信息技术应用创新典型解决方案

    全国1040家单位的1324个参选方案成功突围,入选国家级信息技术应用创新典型解决方案。这一荣誉标志着易华录在存储领域的技术实力与创新成果获得国家权威认可,为信息技术应用创新树立了崭
    的头像 发表于 08-07 15:35 1265次阅读

    佛瑞亚如何通过信息技术推动业务增长

    在数字化、信息化的浪潮下,信息技术已经不仅是后台工具,更成为驱动企业发展的关键力量。本期Women Inspiring Mobility,我们采访了佛瑞亚中国区信息技术总监马瑛,了解她和团队如何将
    的头像 发表于 07-29 14:00 737次阅读

    飞腾主板为信产业发展提高硬实力

    信息技术飞速发展的当下,信产业已成为我国实现科技自立自强、保障国家信息安全的关键领域。信,即信息技术应用创新,其核心目标是实现
    的头像 发表于 07-22 18:20 562次阅读

    DEKRA德凯成为沙特通信和信息技术设备技术法规认证机构

    近日,DEKRA德凯成功获得沙特标准、计量和质量组织(SASO)认可,正式成为沙特通信和信息技术设备技术法规(Technical Regulation for Communications
    的头像 发表于 07-15 14:27 743次阅读

    京能信息莅临软国际数字电力科中心调研

    近日,北京京能信息技术有限公司(以下简称“京能信息”)党总支书记、董事长胡耀宇,党总支副书记、总经理梁锦华一行赴能源谷数字电力科中心调研交流,与软国际开展战略合作洽谈。
    的头像 发表于 06-26 17:46 1306次阅读

    科普|信是什么?一文读懂“信息技术应用创新”战略

    什么是信?信,即“信息技术应用创新”,是国家推动IT系统自主可控、安全可控的重要战略工程。它不仅是技术层面的创新,更承载着保障国家网络安全、推动产业升级和实现数字主权的重任。简单来
    的头像 发表于 06-13 10:06 6472次阅读
    科普|信<b class='flag-5'>创</b>是什么?一文读懂“<b class='flag-5'>信息技术</b>应用创新”战略

    Labview串口通讯,使用SerialPort

    发送与接收功能,在循环里面做两个事件,一个是发送按钮事件,用于调用接口发送数据,另外一个是接收数据事件,用于接收回调
    发表于 03-08 18:38

    串口通讯隔离器的定义与作用

      在现代工业自动化、通信系统和嵌入式设备串口通讯(Serial Communication)是一种常见的数据传输方式。由于其简单、可靠且成本低廉,
    的头像 发表于 02-06 16:01 2091次阅读

    芯盛智能荣获2024年信息技术应用创新工作委员会卓越贡献成员单位

    日前,中国电子工业标准化技术协会信息技术应用创新工作委员会(以下简称 “信工委会”)2024 年度总结座谈会于北京隆重举行。此次会议对在信工作
    的头像 发表于 01-20 09:56 936次阅读

    串口在物联网的应用

    物联网(IoT)是指通过互联网将各种设备连接起来,实现信息交换和通信的技术。这些设备包括传感器、执行器、智能设备等,它们可以收集数据发送命令或执行任务。
    的头像 发表于 12-27 09:54 1606次阅读

    飞腾助力首届教育信息技术应用创新大赛圆满落幕

    近日,由中国教育技术协会主办,教育部教育管理信息中心教育信实验室、公安部第三研究所、中国电子工业标准化技术协会信工委会支持,北京航空航天
    的头像 发表于 12-24 09:57 773次阅读

    有方科技参编的信息技术团体标准发布

    能力评价》团体标准由中国计算机行业协会正式发布实施,明确了信息技术产品供应链成熟度共性指标企业背景、技术掌控、供给能力评价一级指标框架以及评价指标项描述,为制定元器件、软件等基础评估标准,部件、整机等产品的供应链成熟度评价指标
    的头像 发表于 12-23 10:44 911次阅读

    龙芯中科助力2024首届教育信息技术应用创新大赛成功举办

    近日,2024首届教育信息技术应用创新大赛在北京航空航天大学成功举办。本次大赛由中国教育技术协会主办,教育信实验室、公安部第三研究所、中国电子工业标准化技术协会信
    的头像 发表于 12-19 17:02 838次阅读