通信协议

STM32串口如何代码实现更高效的接收消息

半世苍凉 提交于 2020-04-09 20:23:41
这段时间一直在研究多旋翼飞行器,以及其它的事情,博客好外没更新,再不坚持怕真荒废了哦。 在上篇简单实现MAVLink协议的解析,并演示按照设计好的命令执行对应的事件处理,以及又加入 CRC校验,实现更稳定的通信,但在上文结束时也提到当对一个包进行解析及对应 事件 处理时,是不能接收新的数据,直到事件处理完成,Msg_Rev.Get 状态设置为 RECEIVING 后方能再接收新的数据。这时,当事件处理需要一定时间,而又有新的数据不断发送过来时,很容易造成数据丢失现象。 如何提高串口通信效率,并避免丢包现象了? 为提高效率,首先想到采用DMA方式,然而考虑下发现,接收的数据包是不固定的;并且即使采用DMA,若MAVLink接收缓存仍设计成只接收一条消息大小,丢包问题仍然还是会有滴。 这样就想 有没方法软件来实现,就相 到如果开辟一个缓存空间,不断接收的数据都放到那儿,而包的解析处理函数可从这里面依次取出一定数据,来作处理。这样只要设计比较合理,因软件阻塞造成的丢包现象就容易解决了。那么要设计一个怎样的缓存呢 ? 其实很容易想到队列(先进先出的特性),而为了更有效且合理的利用空间,又就会想到环形队列这种数据结构 。 首先是其数据结构设计,以及插入删除操作,不多说,如下代码: #define MAX_QUEUE_LEN (4096) // 4K #define RW_OK 0

STM32串口如何代码实现更稳定的接收消息

好久不见. 提交于 2020-04-09 12:13:28
在 《STM32串口向世界问好》 介绍过如何发送消息,那么又如何接收消息呢? 也很简单,只需要配置好串口接收,配置好中断,并在串口中断函数里面进行数据接收就可以了。通用配置代码如下: /** * @brief 初始化IO 串口1 * @param bound:波特率 * @retval None */ void USART1_Debug_Init(u32 bound) { //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; assert_param(bound >0 && bound <= 256000); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); USART_DeInit(USART1); //复位串口1 //USART1_TX PA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure

5.通信协议

南楼画角 提交于 2020-03-30 18:55:14
目的: 为了解决计算机之间如何交流 协议: 约定,就好比我们现在说的是普通话。如果说英语,就有人听不懂了。 网络通信协议: 速率,传输码率,代码结构,传输控制...... 问题: 非常的复杂 太多了,我们就大事化小:分层! TCP/IP协议簇:实际上是一组协议 重要的两个: TCP: 用户传输协议,就像打电话,需要建立连接,通了才能聊天。 UDP: 用户数据包协议,好比发短信,发出去就不管了。 有两个出名的协议:所以才叫TCP/IP协议簇 TCP:用户传输协议 IP:网络互连协议 TCP和UDP对比: TCP:打电话 连接,稳定 三次握手 四次挥手: 1 最少需要3次,保证稳定连接! 2 A:你瞅啥? 3 B:瞅你咋地? 4 A:干一场! 5 6 A:我要断开了! 7 B:我知道你要断开了! 8 B:你真的要断开了吗? 9 A:我真的要走了! 客户端、服务端 传输完成,释放连接,效率低 UDP:发短信 不连接,不稳定 客户端、服务端:没有明确的界限 不管有没有准备好,都可以发给你... DDOS:洪水攻击!就是我给你的电脑上,发一堆的垃圾包,造成端口堵塞,堵住了线路,于是你的网络就炸了。 来源: https://www.cnblogs.com/duanfu/p/12600104.html

嵌入式开发常用通信协议(总结)

痞子三分冷 提交于 2020-03-17 07:54:01
在嵌入式系统中,板上通信接口是指用于将各种集成电路与其他外围设备交互连接的通信通路或总线。 以下内容为常用板上通信接口:包括I2C、SPI、UART、1-Wire 1. I2C总线(Inter Integrated Circuit) I2C总线是一种同步、双向、半双工的两线式串行接口总线。这里,半双工的含义 是指在任意给定的时刻,只有一个方向上是可以通信的 。I2C总线最早由Philips半导体公司于20世纪80年代研发面市。I2C最初的设计目标是为微处理器/微控制器系统与电视机外围芯片之间的连接提供简单的方法。 I2C总线由两条总线组成:串行时钟线SCL和串行数据线SDA。 SCL线——负责产生同步时钟脉冲。 SDA线——负责在设备间传输串行数据。 I2C总线是共享的总线系统,因此可以将多个I2C设备连接到该系统上。连接到I2C总线上的设备既可以用作主设备,也可以用作从设备。主设备负责控制通信,通过对数据传输进行初始化/终止化,来发送数据并产生所需的同步时钟脉冲。从设备则是等待来自主设备的命令,并响应命令接收。主设备和从设备都可以作为发送设备或接收设备。无论主设备是作为发送设备还是接收设备,同步时钟信号都只能由主设备产生。在相同的总线上,I2C支持多个主设备的同时存在。图1-1显示了I2C总线上主设备和从设备的连接关系。 图1-1                   图1-2

数据传输通信协议总结

断了今生、忘了曾经 提交于 2020-03-12 02:13:53
在数据传输时,总是存在丢包、分包、误包的情况。针对这一问题,则必须引进一套数据通信协议,来保证数据的完整性与准确性。 通常,针对 丢包、误包问题 都会采用 数据长度 和 校验码 比对的方式来判断一包数据的准确性。针对 分包问题 ,则采用 报文头、报文尾 的方式(即采用某两个特定的值作为一包的数据开始和结尾的标志),但采用这种方法来标记要保证数据中不会有与报文头、尾相同的字符,这便又涉及到了 数据转义 。 如下为自己总结的一个简单的数据通信协议,可用于串口、网络等通信,供大家参考。 一、数据传输格式 位置 长度(Byte) 定义 说明 0 1 报文头 报文头,固定值0x5B,即字符’[’ 1 2 数据长度 数据体的长度( 传输的数据实际长度 ) 3 X 数据体 传输的数据 3+X 1 校验位 XOR从数据长度到数据体的异或值 4+X 1 报文尾 报文结束,固定值0x5D,即字符’]’ 二、报文转义 除报文头和报文尾外,其它数据域出现 0x5B 、 0x5C 或 0x5D 时,进行如下报文转义 (0x5C 后面只能跟 0x00 、 0x01 、 0x02 ,其它值为非法 ) 转义前 转义后 0x5B 0x5C + 0x01 0x5C 0x5C + 0x00 0x5D 0x5C + 0x02 三、数据处理流程 发送数据前处理流程:数据体->计算数据体长度->计算校验位->数据转义-

基于STM32之UART串口通信协议(三)接收

蹲街弑〆低调 提交于 2020-03-12 02:00:20
一、前言 1、简介   回顾上一篇 UART发送 当中,已经讲解了如何实现UART的发送操作了,接下来这一篇将会继续讲解如何实现UART的接收操作。 2、UART简介   嵌入式开发中,UART串口通信协议是我们常用的通信协议之一,全称叫做通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)。 3、准备工作   在 UART详解 中已经有了详细的说明,按照里面的说明即可。 注:   建议每次编写好一个相关功能且测试功能成功使用后,保存备份并压缩成一份Demo例程,方便日后有需要的时候可以直接使用。   例如: 二、CubeMx配置及函数说明 说明:   如果有看过我写的 UART发送 的兄弟姐妹们应该会知道,在 UART发送 和 UART详解 中的CubeMx配置都是一样的。   但这一次不同,会在原本配置CubeMx的基础上,添加一些UART的中断配置来实现中断接收操作。 1、CubeMx配置 1)按照 UART详解 配置UART(若配置过,可以继续使用) 2)使能串口中断 3)设置中断优先级(如果没开启其他中断,那就默认即可,直接跳过) 4)代码生成(点击前最好把原本的工程关掉,不然有可能会有问题) 2、函数说明 1)CubeMx生成的UART初始化(在usart.c中) 说明:   会与上一篇 UART发送

Javaweb学习(二):Http通信协议

こ雲淡風輕ζ 提交于 2020-02-17 20:11:39
  当我们开始jsp/servlet编程之旅之前,我们还需要知道一些关于网络通讯方面的一些知识。这样能更加有助于我们的理解,希望大家能看懂我的描述,而不至于在学习的路上一知半解。(手动比❤)   认识Http通信协议    http也叫做超文本传输协议,是网页基本的通信协议,也是我们进行网页开发的基础,因此,我们首先要对其进行学习。    我们可以通过一个基本的客户端与服务器的通信过程来对其进行学习:        由图中我们可以看出http是基于请求/响应的通讯模型,并且只能是客户端向服务器端来发送请求,从而获得我们所需要的文件或者文本。同时由于客户端在发送请求时只需发送请求方法和路径,因此http协议极大限度的提高了通信速度。   从http方面来讲,我们编程是要认识到其几个个基本但是非常重要的特点:一个是上文所说的基于请求/响应的通讯模型,还有就是http通信协议是无连接,无状态的。无连接是指每次连接只会处理一次请求,如果服务器处理完成并且收到客户端应答后会立即断开连接。无状态则是指其对于传输的文件没有记忆能力,一旦后续的处理需要前面所传信息,则其必须重新进行传输。   同时,我们在浏览器端使用Http发出请求时,可能会使用以下请求方法,如get、post、head、put、delete方法等,而我们编写jsp/servlet时最最主要是学习两种方法,即get、post方法。

基于STM32之UART串口通信协议(一)详解

99封情书 提交于 2020-02-12 02:04:44
UART —— Universal Asynchronous Receiver/Transmitter —— 通用异步收发器。 一、UART简介 UART是异步串口通信协议, 工作原理是将传输数据的每个字符一位接一位地传输,它能将要传输的资料在串行通信与并行通信之间加以转换,能够灵活地与外部设备进行全双工数据交换。 USART是UART的升级版,其支持同步模式,用法与UART相同 二、概念辨析 ------------------------------------UART COM口 串口 USB口 RS - 232 TTL--------------------------------------------- UART,在硬件上表现为串口收发的逻辑电路,可被集成为独立地模块化芯片 COM口,串行通信端口,有时也称为串口,是一种连接器的结构,这里区别于USB的“通用串行总线”和硬盘的“SATA”,串口的接口标准规范和总线标准规范是 RS-232    常见的有两种物理标准,D型9针插头,和4针杜邦头, USB口:通用串行总线,和串口完全是两个概念。虽然也是串行方式通信,但由于USB的通信时序和信号电平都和串口完全不同,因此和串口没有任何关系。USB是高速的通信接口,用于PC连接各种外设,U盘、键鼠、移动硬盘、当然也包括“USB转串口”的模块。(USB转串口模块

stm32之IIC通信协议

…衆ロ難τιáo~ 提交于 2020-01-28 03:57:12
1 //³õʼ»¯IIC 2 void IIC_Init(void) 3 { 4 GPIO_InitTypeDef GPIO_InitStructure; 5 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); //ʹÄÜGPIOBʱÖÓ 6 7 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; 8 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //ÍÆÍìÊä³ö 9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 10 GPIO_Init(GPIOB, &GPIO_InitStructure); 11 GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7); //PB6,PB7 Êä³ö¸ß 12 } 13 //²úÉúIICÆðʼÐźŠ14 void IIC_Start(void) 15 { 16 SDA_OUT(); //sdaÏßÊä³ö 17 IIC_SDA=1; 18 IIC_SCL=1; 19 delay_us(4); 20 IIC_SDA=0;//START:when CLK is high,DATA

http应用层协议详解

余生颓废 提交于 2020-01-15 05:42:38
微信公众号: 小白图像与视觉 关于技术、关注 yysilence00 。 有问题或建议,请公众号留言。 tags: client http protocol server tcp-ip HTTP —应用程序级协议 介绍 在不丹,人们见面时,他们通常会问对方“你的身体好吗?”,在日本,他们可能会视情况而低头。在阿曼,男人经常握手后互相亲吻对方。在柬埔寨和泰国,他们经常像祈祷一样齐心协力。所有这些都是通信协议,一个简单的代码序列,具有一定的意义,并且可以使双方做好有意义的交换。 在Web上,我们有一个非常有效的应用程序协议,该协议为遍及全球的计算机进行有意义的交换做好了准备: 超文本传输​​协议或HTTP 。HTTP是基于 TCP / IP (一种通信协议)的应用程序级协议。在讲授Web设计和开发时,HTTP似乎常常被人们遗忘,这是一个遗憾:理解它可以帮助您定义更好的用户交互,实现更好的站点性能以及创建用于管理Web信息的有效工具。 什么是通讯协议? 在查看细节之前,让我们考虑一个基本的交流方案。为了能够进行通信,两个方面(他们是软件,设备,人员等)需要: 语法(数据格式和编码) 语义(控制信息和错误处理) 计时(速度匹配和排序) 当两个人见面时,他们使用通信协议进行互动:例如,在日本,一个人将对身体做出特定的手势。弓是一种这样的手势,它是用于交互的语法。在日本习俗中,鞠躬的手势