如何读取串口设备返回的数据?

Alfheim_Cy 2017-11-01 06:12:04
在做一个项目,需用通过嵌入式开发板控制卫星定位模块与通信模块,将接收到的定位数据传给服务端。
目前的思路雏形大概是,写一个控制软件,向卫星定位模块发送AT指令(我用的是北斗星通)
在这里还算顺利,打开定位模块对应的设备(调用open函数),发送AT指令只需要通过write函数,到这一步,能够顺利运行,配置好定位模块后,在串口调试软件(screen)中能够看到从串口中返回的定位数据。

而我想实现的其实就是串口调试工具的接收部分的功能,于是另外在程序里加上一行接收的代码,想用read函数读取设备文件,把数据存到缓冲区内,再打印到屏幕上。但在这一步失败了,所以存在疑问:

串口设备(如上述的定位模块),其在接受到AT指令后通过串口返回数据,但这些返回的数据要如何读取呢?或者说这些数据临时会存储在哪里、是否能通过读取对应的(串口)设备文件得到?

希望能有熟悉这方面的高手指点迷津。
...全文
2311 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hello Worm 2017-11-06
  • 打赏
  • 举报
回复
首先,串口设备一般都是独享的,如果你用screen打开了,那么可能所有的接收到的信息会都传向screen,你的串口即使能打开,也未必有数据。 其次,从PC角度来看,串口接收确实是read()函数,不需要额外的函数的,至于中断之类的对于你上位机编程不知道也无所谓。一般串口接收会用一个单独的线程,建议楼主也是用另一个线程来接收 第三,关于串口的设置。谨慎猜测一下,对于这种定位设备,即使你不去设置它,它可能也会定期的输出数据的,这是从设备易用性角度猜的。所以,可能,你之前尽管认为你的串口写是有效的,实际未必。这里就涉及到串口的设置问题,最常见的设置如115200bps, 8N1格式,这些还是需要你在串口打开后设置的,具体设置的方法网上一堆,你可以根据你的编译环境查一下。针对你的设备,还是要建议你看一下设备手册,这部分肯定会写的。
tianxj001 2017-11-02
  • 打赏
  • 举报
回复
说明你弄的串口,发送正常,接受出问题了,串口助手能读到,但你的串口读不到。 一般,为了防止占用过多系统资源,串口接受通常采用接受中断函数,每当配置好的串口的RX端口,接受到一个完整的数据(8位),就发出一个接受中断,然后在中断函数里面,将数据送入你开辟的接受缓存区,然后就可以在主函数或者其他过程中对数据进行相应的处理就可以了哈。
「已注销」 2017-11-02
  • 打赏
  • 举报
回复
应该在接收中断里读取,其实还是读取接收缓冲区

27,370

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧