不同终端通信用c语言实现,采用蓝牙技术的北斗终端通信模块的设计

北斗导航系统是我国自主研发的卫星导航系统,具有精确授时,短信通信及快速定位的特点。针对北斗天线和射频信号处理模块体积较大等问题,提出了一种利用蓝牙模块与北斗模块通信的便携式终端。系统以STM32F103RBT单片机为核心,在北斗射频信号处理模块和北斗信息处理模块之间加入蓝牙通信的模块,实现这两部分的无线互联,从而解决了北斗终端系统携带不便的问题。

0 引言

北斗卫星导航系统(BDS)是中国正在实施的自主发展、独立运行的全球卫星导航系统,致力于向全球用户提供高质量的定位、导航、授时服务,并能向有更高要求的授权用户提供进一步服务,军用与民用目的兼具。

中国在2003年完成了具有区域导航功能的北斗卫星导航试验系统,之后开始构建服务全球的北斗卫星导航系统,于2012年起向亚太大部分地区正式提供服务,并计划至2020年完成全球系统的构建。

北斗卫星导航系统除能够获取时间信息和位置信息外,其主要特点是备有短报文通信功能,使得在系统覆盖区域内的终端用户可以进行双向通信,这是其他卫星导航系统所没有的创新性功能,具备了通信与导航相结合的特色服务。而目前市场上以北斗卫星作为导航系统的商品尚不是很多,特别是民用产品目前还处于起步阶段,因此北斗相关应用的巨大潜在市场还有待挖掘和开发。本文提出的基于蓝牙模块的北斗通信便携式终端亦是在北斗应用市场的一个积极尝试。

1 北斗终端系统简介

北斗导航定位系统和其他的导航定位系统一样,用户应用终端设备始终是其一个重要组成部分,主要负责完成北斗信息接收,实现用户特定的应用需求。从卫星导航终端的应用对象来划分,用户应用终端通常包括手持式终端、车载式终端、舰载式终端以及嵌入式终端等多种类型,提供实时的导航定位、报文通信和授时业务。其主要组成部分为北斗接收天线、北斗射频信号处理模块以及北斗基带信息解析处理模块,完成对北斗射频信号的接收,解调以及数据解析的功能。

北斗卫星通信采用BCD 编码长报文,每帧报文长度大于200 B/次。通信主要有两种类型:一种是用户终端设备向北斗空间终端发出的控制指令;一种是北斗空间终端发送回来的北斗信息数据信息。这些通信数据帧格式如下:

b73c0224f6060b940d094b68bb2550ae.png

帧头:控制指令中的帧头包含同步头和指令类型,而接收信息数据帧的帧头则包含同步头和接收信息类型;帧长:表明数据帧长度;源地址:表明控制指令发送地址或是接收信息接收地址;数据帧内容:包含控制指令通信申请信息或是接收信息帧的信息内容;校验码:控制指令数据帧和接收信息帧都采用校验和的方式对内容进行校验,即将校验码之前的数据异或和,与校验码做比较,检测数据帧的正确性。

2 系统硬件模块设计

2.1 系统整体设计

北斗终端系统可分为北斗射频信号处理模块和北斗用户信息解析处理模块。目前市面上的这两部分多采用有线方式相连,而北斗射频信号处理模块的天线和射频基带部分体积较大,若是将此部分与北斗用户信息解析处理模块结合在一起,在实际应用中会有诸多不便。针对这一应用现状,本课题研究的北斗终端在射频信号处理部分与北斗用户信息解析处理部分加入了蓝牙通信功能模块,通过蓝牙无线传输的方式相连,使得北斗用户信息解析处理模块体积大大减小,便于用户携带。因此,本论文设计的北斗终端系统由北斗射频信号处理模块、北斗用户信息解析处理模块以及蓝牙通信模块组成。系统总体结构设计北斗终端总体结构框如图1所示。

adc1c032cae50ea774c9b94970353a90.png

2.2 北斗终端射频信号处理模块

北斗终端射频信号解调接收模块主要负责接收北斗空间工作站发来的北斗射频信息,调理和解调输出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过 C 语言实现两个终端之间的相互聊天,可以使用命名管道(named pipe)来实现管道通信。以下是一个简单的实现: 1. 首先,需要创建两个命名管道,一个用于从终端1发送消息到终端2,另一个用于从终端2发送消息到终端1。可以使用`mkfifo`函数来创建命名管道: ```c mkfifo("pipe1", 0666); mkfifo("pipe2", 0666); ``` 2. 然后,可以在两个进程中分别打开相应的管道,并执行读取和写入操作。例如,在终端1中可以运行以下代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> int main() { int fd1 = open("pipe1", O_WRONLY); // 打开管道1,写入消息 int fd2 = open("pipe2", O_RDONLY); // 打开管道2,读取消息 char message[100]; while (1) { printf("Enter message: "); fgets(message, 100, stdin); write(fd1, message, strlen(message) + 1); // 写入管道1 read(fd2, message, sizeof(message)); // 从管道2读取 printf("<terminal2>: %s", message); } close(fd1); close(fd2); return 0; } ``` 在终端2中可以运行以下代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> int main() { int fd1 = open("pipe2", O_WRONLY); // 打开管道2,写入消息 int fd2 = open("pipe1", O_RDONLY); // 打开管道1,读取消息 char message[100]; while (1) { printf("Enter message: "); fgets(message, 100, stdin); write(fd1, message, strlen(message) + 1); // 写入管道2 read(fd2, message, sizeof(message)); // 从管道1读取 printf("<terminal1>: %s", message); } close(fd1); close(fd2); return 0; } ``` 这些代码将从标准输入读取消息,并通过相应的管道发送消息。然后,从另一个管道中读取消息,并将其输出到标准输出。注意,在每个管道上,一个进程读取数据,另一个进程写入数据。 现在,你可以在两个终端上相互聊天了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值