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

    文章

    3545

    浏览量

    88716
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6085

    浏览量

    35345
收藏 人收藏

    评论

    相关推荐

    串口在物联网的应用

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

    飞腾助力首届教育信息威廉希尔官方网站 应用创新大赛圆满落幕

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

    有方科技参编的信息威廉希尔官方网站 团体标准发布

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

    龙芯中科助力2024首届教育信息威廉希尔官方网站 应用创新大赛成功举办

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

    中科达荣获2024年软件和信息威廉希尔官方网站 服务优秀企业

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

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

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

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

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

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

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

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

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

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

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

    股份今日登陆科

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

    股份在上交所科板上市

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

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

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

    dma和串口直接发送的区别

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

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

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