stm32串口自定义协议接收一串十六进制数据(将其中两个 ...

      最后更新:2022-01-05 22:23:54 手机定位技术交流文章

      文章目录

      • 一、基本储存单元
      • 二、通信协议
        • (一) 以平行和序列模式进行通信
        • (二)三种工作方式
        • (三) 数据同步或天体传输的进出数据同步或数据传输
        • (四)通信速率
      • 三、串口通信协议
        • (一)RS232
        • (二) USB转让(TTL标准)
        • (三)串口到串口(TTL->TTL)
        • (四) 系列数据包的基本结构
      • 四、寄存器
        • (一) USAART_SR地位登记册
        • (二) USAART_DR数据储存库
        • (三) 第1号管制登记册(USART_CR1)
        • (四) 系列数据接收和传输
      • STM32 固态储存库的功能
      • 六、USART应用
        • (一)发送数据
            • 1. 字符字符串函数 1 发送一字节数据
            • 2. 职能2:发送两个字节的数据。
            • 函数 3 - 传送数据阵列
            • 4. 发送字符串函数(职能4)
            • 5. 职能5:将打印f函数用于输出数据。
            • 6. Getchar职能在职能6中的使用情况
        • (二)接收数据
            • 1. 数据中断功能由序列助手发送和返回。
            • 2. 引导的序列数据传输控制已经失效。
            • 3. STM32 接受十六进制数据的海关协议(用于确定CO2浓度的三气传感器)

      一、基本储存单元

      • 位(bit):

        计算机中最小的数据单位是二进制整数的数字之一,可以是 0 或 1 。

      • 字节(Byte):

        计算机中的基本数据单位为1个字节,有8位数,信息必须用至少一个字节的计算机储存和处理。

        例如,字节代表 ASCII 代码,而两个字节代表中文词。

      • 字(Word):

        A 字被定义为两个字节。中文为单字。

      1 字节等于 8 位元
      中文单词由一个单词、两个字节和16位数据组成。

      二、通信协议

      方框图表 - 参考链接 - 通信

      (一) 以平行和序列模式进行通信

      • 并行通信

        八位数传输,加上八位数传输,需要传输八条线路。

        SDIO、FSMC(16位) - 传输数据通过同时传输所有数据位实现。
        在这里插入图片描述

      • 串行通信

        只有一条线可以一次传送八位数信号

        例如,USART、IIC和SPI均为序列,一个人在传输时发送数据。
        在这里插入图片描述

      • 系列通信和平行通信的特点

      在这里插入图片描述

      (二)三种工作方式

      • 全双工

        有两条数据线,一条用于接收数据,另一条用于在不受干扰的情况下传输数据,可以同时传输和接收。

        Usart(半时或全时通信),例如,或SPI(半时或全时通信)。

      • 半双工

        有两条数据线,但不能同时传输,可以随时传送和接收。

      • 单工

        仅有一条数据线,单向传输(仅向先前的一个方向)

        例如:IIC

      - 单一、半和全时系列通信服务的定义、区分和适用

      (三) 数据同步或天体传输的进出数据同步或数据传输

      • 同步通信

        当两个设备的时钟信号相同(时钟信号有时同步)时,数据同步就会发生。

        为了确保传输期间数据传输的正确性:
        (1) 当时钟设定为高时,数据有效。
        (2) 在低空时,时钟信号无效。
        (3) 时钟的要求特别高(如果时钟有峰值或杂货,数据传输是不正确的)。

        例如,SPI是一个通信界面。
        在这里插入图片描述

      • 异步通信

        没有时钟信号:增加有帮助的身份证可以确保数据传输的正确性。

        例如,UART是一辆公共汽车。
        在这里插入图片描述

      • 通信与非同步通信同步

        (1) 数据信号在同步通信中提供的绝大多数材料是合法数据。
        (2) 在非对称通信中,发送的数据将包括各种与框架有关的身份证。
        (3) 因此,通信同步效率更高,但时钟对症状通信的误差幅度较小,无症状通信的误差幅度较大。

      (四)通信速率

      • 位速率: 每秒发送二进制单位数: 比特/秒

        IIC、SPI(同步通信、由时钟控制的数据传输)

      • 波特速率:每秒代码件数(单一港口)。

        二进制位表示代码( 例外) 。

      三、串口通信协议

      物理层要求我们用嘴唇或肢体交流。
      我们讲普通话还是英语,是由协议决定的。

      (一)RS232

      公寓的差数是1套,RS 232和TTL。

      TTL水平直接来自单纤维机(或芯片):高3.3V或5V。 最低水平为零。
      RS232, 1 in 15V, 0 in +15V, 逻辑是反的,低与高之间的差别相当大。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

      (二) USB转让(TTL标准)

      在这里插入图片描述

      (三)串口到串口(TTL->TTL)

      在这里插入图片描述

      (四) 系列数据包的基本结构

      在这里插入图片描述

      • 奇校验

      在这里插入图片描述

      • 偶校验

      在这里插入图片描述

      四、寄存器

      (一) USAART_SR地位登记册

      在这里插入图片描述

      • TXE - 发送的数据登记册为空 。

        当从TDR注册处获得的数据移到移动注册处时,TXE比特由硬件定位。
        如果TXEE在USART_CR1登记册中为 1, 就会发生中断。 USART_ DR 的写作操作, 清除空格 。

        - 没有向移动登记册发送任何数据。
        1-数据已转到移动登记册。

      • TC-发送完成

        当数据框架被传输时, TXE=1, 硬件将 TC 位置设置为 “% 1 ” 。
        当 TCIE = 1 在 USART_CR1 中出现中断时, 使用软件序列删除比特( 先读 USART_ SR, 然后写入 USART_ DR ) 。 TCBet 也可以通过写入 '0'来删除, 但只在多缓存信件中建议 。

        0-发送还没有完成
        1-发送已经完成

      • RXNE - 读取的数据登记册似乎不是空的。

        当RDR移动登记册的数据转移到USART_DR登记册时,该位置(RXNE)储存在硬件中。
        如果 RXNEIE = 1 在 USART_CR1 登记簿中, 中断发生。 读取 USART_ DR 以清空空位 。 RXNE 位元也可以通过写入 0 来清除, 但仅在多缓存信件中建议 。

        0-数据没有收到
        1 - 收到数据待读

      (二) USAART_DR数据储存库

      在这里插入图片描述

      (三) 第1号管制登记册(USART_CR1)

      在这里插入图片描述

      • UE是一个模块推进器连接器。
      • 能源转移至TE(0-残疾,1可操作)。
      • RE是一种接收能量(0允许接收,1禁止接收)。
      • PEIE是PE中断能力(0 - 禁止中断,1 - USART - USART_SR的PE为1, USART中断发生)
      • 当USART_SR的TC设为“1”时,TCIE会被传输到完全中断(0个禁止中断,1个产生USART中断)。
      • RXNIE: 非高度中断接收缓冲区(0 - 无中断,1 - 当USART_SR或RXNE的ORE为“1”时发生USART中断)

      (四) 系列数据接收和传输

      • 发送数据流程

      在这里插入图片描述

      UE=1和TE=1
      上图对应的顺序依次是1->2->3,数据来源于CPU或者DMA,随着数据的出现,它首先储存在发件人登记册(TDR)中。此后,它将储存在数据传输登记册中。由于数据是8位的,数据将由单个个人(通过TX/英尺)传送。

      • 当数据从发件人传送给发件人时,给TXE1或TXE=1,表明发件人为空,但没有发送数据。
      • 当通过发送迁移登记册发送逐个传输数据时,如果所有迁移存储数据都已交付,则给TC分配1或TC=1, 表示传送数据已完整。

      **

      • 接收数据流程

      **

      在这里插入图片描述
      RX=1,UE=1
      资料是由一个人从RX获得的。

      • 首先,将其置于接收转移地点登记册的数据中。
      • 数据随后发送到数据接收登记册(RDR),RXNE设于一个登记册,或RXNE=1,表明数据接收登记册不是空的(数据可以读出)。

      STM32 固态储存库的功能

      在这里插入图片描述
      许多经常使用的硬件图书馆功能
      在这里插入图片描述
      在这里插入图片描述

      • 串口初始化函数

      • 串口使能

      • 中断使能

      • 发送数据

        为了使用USART_DR登记器提交数据, STM32 图书馆功能必须向序列发件人USART_DR撰写数据电文。

      • 接收数据

        STM32库函数读取来自使用USART_DR登记册的序列端口的数据:可以从使用此函数读取来自序列端口的数据。

      • 获取标志位

        此函数仅检测符号位置。 如果没有匹配的断开函数, 通常用于确定符号位置是否设置为 1 。

      • 中断状态位获取函数

        它不仅将确定标记是否位于一个位置, 而且还将确定它是否能够创建匹配中断。 如果您想要获得断开符, 您通常会使用序列中断功能 。

      • 清楚中断标志位

      注释 - 与各种符号-位函数的链接

      六、USART应用

      串口初始化函数

      (一)发送数据

      1. 字符字符串函数 1 发送一字节数据

      在主函数中,写下以下语句:

      连环调试协助没有显示100个,只显示一个字母。
      无论收到什么数据 序列调试辅助器都变成字符
      只有在序列助理收到以十六进制形式提供的数据时才被视为字符的十六进制数据。

      连环帮手进行字符交流,无论是接收还是发送。

      如果序列助理发送数字1, stm32 嘴,如果收到,则必须在数据解析过程中根据字符“1”解构(以字符1取代十进制1),在数据解析过程中解构。

      2. 职能2:发送两个字节的数据。

      传感器数据有时可能只有16位元。 发送两个字节的最佳方式是什么?

      发送两个字节的数据需要16位元。

      在主函数中,发送十六进制数据:

      连续助理显示字符,为了获得他们所提供的同样数据,他们必须选择连续助理,以16步程序接收这些字符。
      序列援助获得56 ff 56 这是16位数据 但它被显示为字节 十六进制的字节是56 ff。字节是56 ff。
      在这里插入图片描述

      函数 3 - 传送数据阵列

      发送了一个字节数据标记(USAART_FLAG_TXE)。
      交付由一字节组成的数据标记: USAART_ FLAG_TC

      在主函数中,定义数组。

      将数据内容发送出去

      序列助理:十六进制数据接收
      在这里插入图片描述

      以非十六进制格式接收的数据: ASCII 1-10 无法查看 。
      在这里插入图片描述

      4. 发送字符串函数(职能4)

      在主函数中调用函数发送字符串。

      5. 职能5:将打印f函数用于输出数据。

      直接通过打印功能发送并非总是可行的。
      打印法函数的底部有一个fputc。如果您想要使用它,您必须重新定义它。

      在主函数中编写代码

      6. Getchar职能在职能6中的使用情况

      gechar () 等于scanf () 。
      如果使用加分函数,它也会重新定义。
      将 CB 函数扫描转换到序列, 然后重建以使用扫描和获取功能 。

      如果您想要在主函数中使用 Getchar (), 请使用以下语法 。中断设置代码( 见下文图片) 注释,否则会冲突
      因为它不需要被打断。

      在这里插入图片描述
      在主要职能的整个(1)周期中,包括接收和传输数据的代码。

      如果您提供了字符串助手, 它将会得到一台返回字符的机器 。
      在这里插入图片描述

      (二)接收数据

      一旦收到数据,就会造成混乱。

      如果出现中断,则必须确定中断的优先顺序。

      编写中断服务函数

      1. 数据中断功能由序列助手发送和返回。

      序列助理向自动将收到的数据返回序列助理的单一机器发送的数据是什么?

      当外部设备或序列调试协助将数据传送到一台计算机时,则无法提供数据。如单件机器所示,数据接收器不是空的。这是数据第一次结束,表明数据中断。输入以停止服务功能, 并引用固态软件库函数来实际放置一个功能 。以免产生误中断,如果真的产生1时,要接收数据,请使用 USART_ ReceiveData (USART1)。空格填充来自 ucTemp 变量的数据 。
      要将数据传送回序列助理,请使用 USART_SendData (USART1, ucTemp) 。

      2. 引导的序列数据传输控制已经失效。

      这样你就可以不用打断它, 引导光受通过序列获得的数据控制。 你可以通过查询来达到这个目的, 然后给音符提供回折。

      在主要方法中,增加以下编码:

      如果发生错误,请联系此链接。
      解决方案-链接
      你可以用一个连环助理 发送一个和两个信号 关闭灯光
      在这里插入图片描述

      3. STM32 接受十六进制数据的海关协议(用于确定CO2浓度的三气传感器)

      如前所述,如果不选择接收和传输十六进制数据,则所有其他情况均按性质传输和接收,因此在发送和接收数据时选择了十六进制选择。

      三重气体传感器的序列数据流格式如下:
      在这里插入图片描述

      前两个字节是固定的模块地址,可用于创建接收数据的规程:数据只有在第一和第二字节都符合条件时才放在数组中。

      2C E4 04 00 AD 03 38 FC 模块数据流

      因为数据流是九字节长的, 我们必须首先创建一个八位数的数组, 以维持九字节 。

      编写中断服务函数

      上述成就是利用专利协议接收和储存数据。

      要提取其中两个字节并将其转换为十进制数据,请先创建十六进制转换函数:(输入十六进制数据返回十进制数据)

      页眉中的信息如下:

      在这里插入图片描述
      验证如下:
      如下图所示,十六进制数据通过系列助手发送:
      2C E4 04 00 00 AD 03 38 FC
      第七位字节比CO2高8个位数,第八位比CO2低8个位数,而CO2浓度是使用公式计算的。
      在这里插入图片描述

      完整代码下载链接

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/15686.html

          热门文章

          文章分类