#通讯
芯片和芯片之间,需要通讯才能完成更加复杂的工作。如果不通讯,就只是单端机器,所能够完成的事情也比较单一。
何为通讯?简单说就是人更人之间的交流;人跟人之间的交流就使用自然语言,但是芯片和芯片之间交流,就不能用自然语言,需要一种特殊的“语言”同时也需要“嘴巴”。
芯片之间的通讯大致分如下几种:并行,串行(针对一次性传输数据量)
同步、异步(针对通讯过程是否需要同步时钟)
单工、半双工、双工(针对通讯的时候传输数据的方向)
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
#综合运用
计算机小端模式发送一串十六进制: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
根计算机发出来的数据相等,计算正确!