STM32-常见通信总结

本文详细介绍了UART的帧格式、1-wire协议的特点及其在DHT11中的应用,以及SPI和I2C的定义、工作原理和硬件连接。重点展示了这些通信标准在数据传输中的角色和它们在简化硬件设计中的作用。
摘要由CSDN通过智能技术生成

目录

常见通信标准

UART

特点

UART的帧格式

起始位

数据位和奇偶校验位

停止位

单总线协议(1-wire)

定义

特点

优势

实例(DHT11)

​编辑SPI

定义

硬件电路

数据交互原理

SPI时序基本单元

I2C

简介

常见通信标准

常见通信标准
      通信标准     引脚说明      通信方式     通信方向
UART
(通用异步收发器)
TXD:发送端
RXD:接受端
GND:公共地
异步通信
 
全双工
 
单总线
(1-wire)
DQ:发送/接受端异步通信
 

半双工
 
SPISCK:同步时钟
MISO:主机输入,
从机输出
MOSI:主机输出,
从机输入
SS: 片选
同步通信
 
全双工
 
I2CSCL:同步时钟
SDA:数据输入/输出端
同步通信半双工

UART

全称是Universal Asynchronous Receiver/Transmitter。

特点

1.UART没有时钟信号来同步发送和接受设备,是异步传输数据

2.发送设备根据自身的时钟信号生成一定的比特率(位流)代替时钟信号,接收器使用其内部时钟信号对输入数据进行采样。

3.串行通信

小总结:
同步点是通过两个设备的相同波特率(UART和大多数串行通信一样,发送和接收设备需要将波特率(波特率是指信息传输到信道的速率)设置为相同的值。对于串行端口,设定的波特率将用作每秒传输的最大位数)来管理的。
如果波特率不同,发送和接收数据的时序可能会受影响,导致数据处理过程出现不一致。允许的波特率差异最大值为10%,超过此值,位的时序就会脱节。

UART的帧格式

在 UART中,传输模式为数据包形式。数据包由起始位、数据位、奇偶校验位和停止位组成。

起始位

当不传输数据时, UART 数据传输线通常保持高电压电平。若要开始数据传输,发送UART 会将传输线从高电平拉到低电平并保持1 个时钟周期。

当接收 UART 检测到高到低电压跃迁时,便开始以波特率对应的频率读取数据帧中的位。

数据位和奇偶校验位

数据位包含所传输的实际数据。如果使用奇偶校验位,数据帧长度可以是5 位到 8 位。如果不使用奇偶校验位,数据帧长度可以是9 位。

在大多数情况下,数据以最低有效位优先方式发送。

停止位

当数据传输结束时,UART数据线将电平拉高,代表传输数据结束。

单总线协议(1-wire)

定义

        主机和从机用一根总线进行通信,是一种半双工的通信方式,单线=时钟线+数据线+控制线( +电源线)。理想状况下一条总线上的从器件数量几乎不受数量限制。

特点

        只有一根线,可以在一根线上传输时钟,数据,而且传输方向是双向的

优势

因其只有一根线,所以具有线路简单,硬件开销少,成本低廉,便于总线扩展和维护等优点

实例(DHT11)

数字温湿度传感器 DHT11
        DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次 通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数 部分用于以后扩展,现读出为零.操作流程如下:
        一次完整的数据传输为40bit,高位先出。
        数据格式:8bit湿度整数数据+8bit湿度小数数据
        +8bi温度整数数据+8bit温度小数数据
        +8bit校验和
数据传送正确时校验和数据等于“ 8bit湿度整数数据+8bit湿度小数数据 +8bi温度整数数据+8bit温度小数数据” 所得结果的末8位。
        
总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必 须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后, 等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束 后,延时等待20-40us后, 读取DHT11的响应信号,主机发送开始信号后,可以切换 到输入模式,或者输出高电平均可, 总线由上拉电阻拉高。
总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线拉 高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定 了数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有 响应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线 50us,随后总线由上拉电阻拉高进入空闲状态。


SPI

定义

SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线 四根通信线:

SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select)

同步,全双工 支持总线挂载多设备(一主多从)

硬件电路

所有SPI设备的SCK、MOSI、MISO分别连在一起 主机另外引出多条SS控制线,分别接到各从机的SS引脚 输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入

这是spi的连线图,其中MOSI是主机输出从机输入线,MISO是从机输入主机输出线,SCK提供大家共用的时钟信号,SS是片选线,决定着主机跟哪个从机进行通信,相关的片选线置低电平有效。

所有的输出口在输出的时候要配置成推挽输出,这样在没有外部上拉电阻的情况的也可以有较强的输出高低点平的能力。但需要考虑一点:当主机跟从机3进行通信的时候,从机2和从机1的MISO线如果是推挽输出(推挽必输出高电平或低电平的一种)那肯定会影响主机跟从机三的正常通信,所以为了消去这一影响,让从机SS片选线为高电平,即非选中状态时置为高阻态,这样既不是高电平也不是低电平不会影响主机跟所选中从机的正常通信。

数据交互原理

如上图:数据移除和移入,先移出,再移入,当进行八次时,便完成了数据的交换

SPI时序基本单元

CPOL: 时钟极性

CPHA:时钟相位

(模式0)

CPOL=0:空闲状态时,SCK为低电平      

CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据    

(模式1)

CPOL=0:空闲状态时,SCK为低电平

CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据

 (模式2)

CPOL=1:空闲状态时,SCK为高电平

CPHA=0:SCK第一个边沿移入数据,第二个边沿移出数据

(模式3)

CPOL=1:空闲状态时,SCK为高电平

CPHA=1:SCK第一个边沿移出数据,第二个边沿移入数据

I2C

简介

IIC(Inter-Integrated Circuit)是一个多主从的串行总线,又叫I2C,是由飞利浦公司发明的通讯总线,属于半双工同步传输类型总线。IIC总线是非常常见的数据总线,仅仅使用两条线就能完成多机通讯,一条SCL时钟线,另外一条双向数据线SDA。

串行数据线SDA——负责在设备间传输串行数据  串行时钟线SCL——负责产生同步时钟脉冲

通信双方约定好通信时钟后,SCL来输出时钟,主机会首先发送要通信的从机地址,然后通过SDA线发送数据。

下图是STM32的MCU和E2PROM芯片AT24C02芯片连接的一个典型电路图。通过程序控制MCU的IIC控制器来完成对E2PROM的读写。

  • 33
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
江涛带你玩STM32-CubeMX红外NEC解码实战(上)--外部中断方式。 NEC红外协议是一种常见的红外信号通信协议,利用这个协议我们可以实现遥控器对单片机的控制。在STM32开发中,可以使用外部中断方式来实现NEC红外码的解码。 首先,我们需要在CubeMX中配置外部中断引脚。选择对应的GPIO引脚,将其配置为外部中断输入模式。然后将中断触发方式设置为上升沿触发,这样当红外接收模块接收到红外信号时,引脚上的电平会从低电平跳变到高电平,触发外部中断。 接下来,我们在代码中初始化外部中断。使用HAL库提供的函数HAL_GPIO_Init()初始化GPIO引脚。然后使用HAL库提供的函数HAL_NVIC_SetPriority()设置中断优先级,通过HAL_NVIC_EnableIRQ()使能中断。 然后,我们需要编写中断处理函数。在中断处理函数中,我们首先可以通过读取GPIO引脚的电平状态来判断是否收到了红外信号。然后可以使用定时器计数器来计算红外信号的时长,根据时长判断是0还是1,进而解码出红外码。可以使用计时器中断来实现时长的计算,并将计算结果保存在一个数组中,用于后续的红外码解析。 最后,我们可以通过串口或者其他方式将解码后的红外码输出,在串口助手上看到红外码的内容。 总结一下,使用STM32-CubeMX和外部中断方式实现NEC红外码解码实战的步骤包括配置外部中断引脚、初始化外部中断、编写中断处理函数、计算红外信号的时长并解码出红外码、输出解码后的红外码。通过这种方式,我们可以通过遥控器来控制单片机的各种功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花田里的泪光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值