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
    +关注

    关注

    3

    文章

    3544

    浏览量

    88668
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6085

    浏览量

    35322
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    中科达荣获2024年软件和信息技术服务优秀企业

    及前百家企业”名单。中科达凭借非凡的技术实力与持续的创新能力,成功入选“2024年度软件和信息技术服务竞争力百强企业”以及“2024年软件和信息技术服务优秀企业”。
    的头像 发表于 10-30 11:44 484次阅读

    软国际信服务助力大连信产业发展

    为进一步激发大连本地信产业生态的活力与潜力,搭建一个高效、开放的交流平台。由大连软件行业协会携手大连市信息技术应用创新综合服务中心主办,软国际协办的,2024年大连市信息技术应用创
    的头像 发表于 08-27 16:49 877次阅读

    LABVIEW串口通讯

    labview实现串口通讯
    发表于 08-19 14:37 7次下载

    ESP32串口接收和发送数据,会有延迟是怎么回事?

    测试环境:串口波特率600bps,串口接收256字节数据。 在调试串口时,发现发送多于120字节时,串口
    发表于 06-26 08:07

    BIG WALNUT大核桃全面响应国家“信”号召,倾力“智”造国产芯片+国产加密安全系统通讯产品

    信息化高速发展的今天,信息技术的自主可控和信息安全已经成为国家发展的重要基石。国家信战略的提出,旨在推动国产信息产业的崛起,实现
    的头像 发表于 06-18 17:42 543次阅读

    使用STM8S103系列单片机的串口通讯,发现串口发送数据后一直进入接收中断为什么?

    使用STM8S103系列单片机的串口通讯,发现串口发送数据后一直进入接收中断??是什么原因所致的???
    发表于 04-30 07:25

    中兴通讯中标2023年中移动信息IT云系统框架采购项目

    近日,移(动)信息技术有限公司(以下简称中移动信息)公布2023年IT云资源池SDN系统框架采购项目招标结果,中兴通讯以第一名50%份额中标。
    的头像 发表于 03-15 10:20 441次阅读

    股份今日登陆科

    山东软件商用中间件股份有限公司(以下简称“股份”)近日在上海证券交易所科板成功上市,标志着这家国内知名的民营软件和
    的头像 发表于 03-13 14:19 535次阅读

    股份在上交所科板上市

    山东软件商用中间件股份有限公司(以下简称“股份”)近日在上海证券交易所科板成功上市,标志着这家国内知名的民营软件和
    的头像 发表于 03-13 14:02 542次阅读

    串口通讯时的数据帧格式和通讯协议有什么区别?

    串口通讯时的数据帧格式和通讯协议是两个不同的概念,它们在串口通讯
    的头像 发表于 01-30 09:21 2020次阅读

    dma和串口直接发送的区别

    ,我们先来介绍一下DMA和串口直接发送的原理和工作方式。 DMA是一种高速数据传输技术,它允许外设直接与内存进行数据交换,而不需要CPU的介
    的头像 发表于 01-07 17:43 2895次阅读

    USB虚拟串口串口1可以同时发送

    可以同时发送,USB虚拟串口和物理串口1都可以作为数据传输的通道,可以同时操作和发送数据。 US
    的头像 发表于 01-04 11:26 1565次阅读