串口通讯问题

#通讯

芯片和芯片之间,需要通讯才能完成更加复杂的工作。如果不通讯,就只是单端机器,所能够完成的事情也比较单一。

何为通讯?简单说就是人更人之间的交流;人跟人之间的交流就使用自然语言,但是芯片和芯片之间交流,就不能用自然语言,需要一种特殊的“语言”同时也需要“嘴巴”。

芯片之间的通讯大致分如下几种:并行,串行(针对一次性传输数据量)

                                                       同步、异步(针对通讯过程是否需要同步时钟)

                                                       单工、半双工、双工(针对通讯的时候传输数据的方向)

stm32单片机有串口这一个外设,可以充当芯片之间相互通讯的“嘴巴”。在计算机的世界里面,所有的指令、数据、地址等等都是一串二进制数据串。这个外设就可以将通讯中的高低电平的变化转换成数据;存放在指定的寄存器内,供CPU执行的时候调用。

有了“嘴巴”之后,两个芯片之间约定了“语言”(即通讯协议),没有约定协议,那就是类似世界上两种不相同的语言在说话,各自讲各自的,两者都不能从对方的标书中获取到有用的信息,这一种通讯就不能称得上是通讯。

#大端和小端

由于计算机发展历史原因,计算机的框架不同,为了兼容人的阅读习惯和计算机执行的顺序,所以出现了大端序和小端序。

例如数据为0x1234

传输序列如下:

大端序:0x12、0x34 (高字节段在前面,符合人的阅读习惯)

小端序:0x34、0x12 (低字节节段在前面,计算机执行更方便)

#float类型在计算机中表示

IEEE 754标准指明了32位浮点数(float 32)的表示方法,以下是简要介绍。

一个32位浮点数由一下组成:

1.符号位:1位 (用来表明浮点数的正负

2.指数部分:8位 (用以标识浮点数的整数

3.尾数部分:23位 (用于标识浮点数的尾数

浮点数在存储时,其最高位为符号位,其次是8位知数部分,最后是尾数部分。以0.15625为列,其二进制表示:0b0011 1110  0010  0000  0000  0000  0000  0000

\left ( -1 \right )^{b\textup{31}}\times 2^{\left ( b30.....b23 \right )-127}\times \left ( 1.b22....b0 \right )

#综合运用

计算机小端模式发送一串十六进制:00 00 5c 42,转换成十进制:

由于是小端模式,转换成我们自己阅读习惯:42 5c 00 00 

在转换成二进制:0100  0010  0101  1100  0000  0000  0000  0000

套用上面的公式:

1.符号位:0        (正数)

2.指数部分:1000  0100b ==》132d ==》2^(132-127) ==》2^5  == 32

3.尾数部分:101  1100  0000  0000  0000  0000b ==》1+ 1*2^-1 + 1*2^-3 +1*2^-4 +1*2^-5 ==》1+0.5+0.125+0.0625+0.03125 = 1.71875

最终结果:指数部分*尾数部分 = 32 * 1.71875 = 55  

根计算机发出来的数据相等,计算正确!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值