找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 14798|回复: 0
收起左侧

关于stm32外设通信协议的一些总结(高手绕道)

[复制链接]
ID:128229 发表于 2016-6-29 20:27 | 显示全部楼层 |阅读模式
是时候总结一下最近所学的协议了,就stm32的片内外设资源来说,stm32有3个是关于通信的:usart、spi 、iic


通过这次的学习和以前学习对比,我发现一个极大而又特别让人忽视的特点:那就是“时序”,因为往往许多初学者,对所谓的时序表示困惑,不得不承认 我也困惑过,甚至不能理解,往往如常人所说的脑洞大开,一个质的飞跃,让我对所谓的通信协议一通百通。在我看来任何数字芯片都需要时序,既然有时序,那就有时钟信号。所以接下来要说的是关于stm32的时序通信(在这里 我仅代表个人理解成时序协议)。
我先说说
Usart:所谓的同步异步收发器,通常需要3根线,rx、tx、和GND,有人提出疑问了,明明没有时钟信号还敢瞎说,说错时序协议,又或许嘲笑我。可我们不得不承认一个事实,在我们配置串口的时候,波特率的配置其实就是所谓的时钟信号,每秒发送多少位(或字节),这就是时钟信号.。有人又要问了那为什么不把时钟信号单独做成时钟总线给其他通信设备,这是我们千万不能被这种死脑筋的人给问蒙了,串口通信还要拉出一条时钟总线给通信的另一端么?怎么可能需要??通信的另一端也是单片机,要想收到正确的数据,必须是相同的波特率,这就好像有种无形的时钟总线,只不过波特率双方都一样罢了。还有要说的是,在我看来usart通信协议最简单的时序,那就是双方波特率调成一致、你只要敢发数据我就能收数据,至于我要不要回答你,我说了算,这也就是为啥自定义协议要用串口通信(如modbus通信协议),我相信时序越简单的设备,才会使用方便的协议。
再说说IIC
通常用于读写dataflash的一种协议,当然也可以用作单片机之间的通信协议,IIC本身就是个时序稍微复杂的协议。I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。大家可以看到SCL时钟总线,这就是正儿八经的时序协议,根据时钟信号,进行数据读写,数据传输是根据高低电平来判断的,所以它就是时序,在stm32中IIC也属于外设,不过我们也可以利用IO口来模拟IIC,个人觉得模拟IIC来的更好当然前提是(你不需要连续读取数据,对IIC时序熟悉)。如果需要大量读写的flash的话,这是可以利用STM32的DMA通道,这里就不细讲了。
最后来说一说
SPI又叫做串行外设接口,为何这样说呢?首先看过它的协议的人都知道,8位或16位数据传输时是根据时钟总线高低跳变来传输,主设备在时钟信号上升沿发送,而在下降沿接受数据,SPI既可以全双工双向通信,又可以单向通信(此模式下只能主设备发送,不接受,而从设备接受不发送)。对于全双工来说,属于四线制,为啥呢?对于主设备,有发送,要有接受,还有使能,还有个时钟总线(该时钟总线只能是主设备给从设备,当主从切换的时候也是一样)。而单向数据传输只要2根线就可以解决了 我认为,sck和SDO。那可以说SPI的数据交换可就是玩玩全全按照时钟信号的高低电平来传输了,这也就是为什么 我把它也看作是时序协议了。至于具体的还是要看时序协议。这里需要注意:








通过以上可以看出,这些协议都是和时序有着密不可分的关系,时钟信号就相当于一个载体。没有它,就没有数据传输。
最终我有个以前的想法得说一下,在以前没学过单片机通信的时候,不会用串口,更没有听过IIC,那时我假想过两个单片机的通信可不可以通过IO口设置高低电平来通信呢,其实我就是想得到一个标志,无奈用单片机的IO口输出高电平,而另一个单片机接受这个电平,如果能收到高电平,那我就任务这个标志就出现了。其实现在想想 这并不好笑,这类方式就类似IIC,只不过高低信号没时序罢了,我只需检测这个高低信号就好,其实IIC也是基于这个想法而来的,只不过为了更规范,有时钟总线,规定了更详细的时序,这就好比,我们通信可以,必须按照规约通信。呵呵,基于这些天的突然开窍,我觉得SCCB协议也是非常简单的了。总结完毕,这里再贴出外设地址 以便日后查询:





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表