学习笔记–STM总结常用协议32
文章目录
- 学习笔记--STM32常用协议总结
-
- 1. One-Wire:一根数据线
- 2. I2C协议:时钟线(SCL)和数据线(SDA)
- 3. UART串口:DB9接口为标准接口,其中(GND,RXD/TXD)必不可少
- 4. SPI协议:MISO、MOSI、SCK、CS
STM根据外设连接的总线数量,32常用协议可分为:
1根线: One-Wire例如,一线协议DHT11温湿度传感器,DS18B20温度传感器; 2根线:I2C协议,比如SHT30温湿度传感器,OLED显示屏; 3根线:UART/串口协议,比如GPS,NB-IoT; 4根线:SPI协议,比如NFC,LoRa。
1. One-Wire:一根数据线
总线空闲时保持高电平,内置上拉电阻 传输时序:
DHT11上电后(),测试环境温湿度数据,同时记录数据DHT11的DATA数据线从上拉电阻一直保持高电平;此时DHT11的DATA引脚处于输入状态,始终检测外部信号。
微处理器的I/0设置为输出同时输出低电平,低电平保持时间不小于18ms(最大不超过30ms),然后是微处理器I/0设置为输入状态,微处理器电阻,微处理器I/0即DHT11的DATA数据线也变高了,等待DHT11发出回答信号。发送信号如下图所示:
DHT11的DATA当引脚检测到外部信号低电时,等待外部信号低电平结束,延迟DHT11的DATA引脚处于输出状态,输出81-85微秒的低电平作为响应信号,然后输出86-88微秒的高电平通知外设准备接收数据,微处理器I/0此时处于输入状态,检测到I/0有低电平(DHT11回应信号后,等待86-88微秒的高电平后的数据接收,发送信号如下图所示:
由DHT11的DATA微处理器根据引脚输出40位数据I位数据0格式为: 低电平54微秒和23微秒- 位数据1格式为27微秒高电平: 54微秒低电平加68-74微秒高电平。位数据0,1 格式信号如下图所示: DHT11的DATA引脚输出40位数据后,继续输出低电平54微秒,继续输出低电平54微秒后转为输入状态。DHT内部重测环境温湿度数据,并记录数据,等待外部信号的到来。
单总线上的所有通信都从初始序列开始,总线的空闲状态被上拉电阻拉到高电平;主机输出低电平,保持至少480us,产生复位脉冲。然后主机释放总线,上拉电阻将总线拉到高电平,延迟15-60us,此时进入接收模式DS18B20拉低总线60-240us,产生低电平响应脉冲,然后释放总线。
总线控制器控制单总线高低电平的持续时间DS18B每次只传输一位数据20中。
想给单片机DS18B20写0时,需要将单片机引脚拉低,保持低电平时间在60~120us然后释放总线。 想给单片机DS18B当20写入1时,需要降低单片机的引脚,降低时间大于1us,然后在15us内拉高总线.。
采用多个DS18B20时,需要写ROM指令控制总线上的某个指令DS18B假如是单个DS18B直接写跳过ROM指令0xCC即可。
DS18B获得温度后,20将储存在内部RAM在内部,控制端需要使用相应的指令RAM进行操作。 读取温度 0xBE,读取高速暂存器存储的数据。 温度转换 0x44.打开温度读取转换,读取的温度将存储在高速临时存储器的第0个和第一个字节中。
读取间隙由主机至少拉低总线电平us然后再释放总线,读取DS18B20发送的1或0。DS18B20检测到总线下降1微秒后,开始发送数据。如果要发送0,将总线拉到低电平,直到读取周期结束。如果要发送1,释放总线为高电平。
2. I2C协议:时钟线(SCL)和数据线(SDA)
在I2C总线上传输的每个数据都由同步时钟脉冲对应,即在SCL在串行时钟的配合下,数据在SDA从高到低依次传输每个数据。
I2C空闲时,总线SDA和SCL均处于高电平状态(由上拉电阻拉高),当主设备开始一次I2C发送一个通信START信号告诉设备开始通信,通信结束时发送STOP通信从设备结束告知信号。
一个I2C从设备、主设备通过物理地址和设备通信,从设备的物理地址到内部电路。 主机在发送START信号发出后,应立即从设备的物理地址通信第二时序。I2C总线是一种实现半双工通信的同步串行通信协议,主要设备应具有读写能力。 因此,I2C除7bit除了物理地址,还有1bit标记阅读/写作方向。I2C读写地址一般为1Byte,高7位为物理地址,最低位为读写方向。(0写,1读)
主机在发送I2C通信请求后,设备将对物理地址的相应响应ACK应答信号。
此外,数据接收器在接下来的通信过程中收到传输的字节数据后,需要给出主/ACK回应,此时在第九个时钟周期,发送端释放SDA总线,将SDA由接收方控制的电平拉高。
继续沟通:回应ACK信号,即SDA为低电平; 结束通信:回应NACK信号,即SDA为高电平。
: 接到设备响应信号后,主设备开始向设备发送数据。SDA数据线上的每个字节必须是8bit,每次传输的总字节数没有限制。每个字节发送完成后,必须遵循响应信号。
I2C总线通信时数据传输采用MSB方式发送,高电平表示1,低电平表示0。当传输的数据位需要改变时,如当前发送1,下一个发送0,必须在SCL另外,在传输过程中,SDA上数据位SCL高电平期间必须保持稳定不变,因为防止误发开始/停止信号,引起数据错乱。 采用I2C协议温湿度传感器,通信顺序:
3. UART串口:DB9接口为标准接口,其中(GND,RXD/TXD)必不可少
注意UART和USART不同的是,前者只支持异步通信,而后者支持异步/同步通信。目前主要采用异步通信模式。 各引脚的作用如下: 现在大部分都是用的USB串口的设备缩小了串口的体积。
至少使用串口通信GND单工通信可以用信号线完成,比如GPS;大多数串口通信都是三条线(GND,RXD,TXD)实现全双工通信。
串口通信时,收发按周期进行,每周期传输N个二进制位。这个周期叫通信单元。通信单元由起始位置组成 数据位 奇偶校验位 停止构成。
波特率是电子通信领域的调制速率,是指有效数据信号调制载波的速率,即单位时间内载波调制状态变化的次数。
串口通信是一种异步通信方式,双方没有同步时钟同意bit数据收发需要多长时间才能保持电平,通过收发双方的速率同步收发数据。这个速率是波特率,单位是bps(bit period second)。
常用速率为115200(3G/4G9600(NB-IoT/GPS)、4800等,双方可以保持一致。>
: 表示发送方要开始发送一个通信单元。总线空闲时维持高电平,一旦产生一个下降沿变为低电平表示起始信号。
表示一个通信单元中有效信息位,一次发送多少位有效数据是可以设定的(6,7,8,9,一般选择8位)。
用来校验数据位,分为奇校验和偶校验: 奇校验保证传输过程中1的个数为奇数,偶校验保证传输过程中1的个数为偶数。
收发双方本单元通信结束的标志,由通信线上的电平变化来反映。常见的有1位/1.5位/2位停止位等,一般用1位停止位。
电平信号是信号线电平减去GND电平的差值,这个电压差决定了传输的是1还是0;
TTL电平(MCU或者芯片电平)标准规定:高电平为5V(51单片机)或者3.3V(ARM)表示1,0V表示0; RS232电平标准规定:-15V至-3V表示1,+3V至+15V表示0;
显然TTL是芯片的串口直接出的电平,适合距离近干扰小的情况;设备与设备之间的远距离通信因为压降和干扰等因素需要使用RS232电平,但它的通信距离一般也小于15M;
4. SPI协议:MISO、MOSI、SCK、CS
SPI是一种同步串行全双工的接口技术,速度快,效率高。通常为一个主设备(Master)和一个或者多个从设备(Slave)构成,主设备通过片选端选择一个从设备进行通信。由四根线构成:MISO(Master input Slave output),MOSI,CLK(时钟),CS(片选)。但其在传输数据时没有像I2C协议有应答机制,在数据的可靠性传输上有一定缺陷。
SPI共有四种传输模式,由CPOL(时钟极性,表示空闲时为低电平还是高电平)和CPHA(时钟相位,表示从结束空闲状态开始第几个跳变沿开始采样数据)决定。
模式0:CPOL=0,CPHA=0。SCK串行时钟线空闲是低电平。在SCK的上升沿采样数据,在SCK下降沿切换。 模式1:CPOL=0,CPHA=1。SCK串行时钟线空闲是低电平。在SCK的下降沿采样数据,在SCK上升沿切换。 模式2:CPOL=1,CPHA=0。SCK串行时钟线空闲是高电平。在SCK的下降沿采样数据,在SCK上升沿切换。 模式3:CPOL=1,CPHA=1。SCK串行时钟线空闲是高电平。在SCK的上升沿采样数据,在SCK下降沿切换。 常用的是模式0和3;
主设备通过拉低相应的NSS(片选)引脚选择相应的从设备进行通信,通信完成后再拉高相应的片选引脚,双方通过交换各自移位寄存器里的数据完成数据交换。主设备的读和写都是这样一种数据交换的模式。