通过单总线实现单片机之间的数据传输

单总线、没有时钟线的通信时,不能使用简单的高低电平来通信,因为接收方不知道此时发送的数据是第几位数据,容易造成错乱。

因此在使用一根线对外传输数据时,需要自定义一个通信协议,它至少要包含格式头+数据,格式头应该占整个数据发送周期的20%左右(时间不用很严谨,因为不同的单片机内部的时钟不同,可以允许一定范围内的误差)。

例如:发送16位的数据,总共要12.8ms,那么可以在它前面加个5ms的格式头。

一个简单的格式头可以根据引脚空闲状态的低电平来设置,假设引脚的空闲状态为高电平,那么可以使用连续的低电平来作为格式头。

数据位肯定是不能用高电平和低电平来表示逻辑1和0了。这里要用稍微复杂一些的信号,例如使用600us的高电平+200us的低电平表示逻辑1,用200us的高电平+600us的低电平来表示逻辑0。

这样组合起来,可以轻易的分辨出当前接收的是0还是1,也可以避免当多个相同的0或1连续发送/接收时,对于接收方来说无法分辨这其中有几个0和1的情况。

自定义的单总线协议使用案例:

  1. 自定义逻辑1和逻辑0对应的有规律的电平组合

假设用600us的高电平+200us的低电平表示逻辑1 ,用200us的高电平+600us的低电平来表示逻辑0

  1. 确定整个数据发送所要的周期

那么发送一位信号要800us,一共要发送16位,一帧(16位)要12.8ms。

  1. 确定格式头的电平和时间长度

假设引脚空闲时由外部的上拉电阻将总线电平拉高,即引脚空闲时为高电平 ,那么使用5ms(占整个数据帧发送周期的25.6%)的低电平来作为格式头

补充:在两帧信号之间,应该加一个时间间隔,方便发送方准备数据、接收方处理上一次收到的数。在这里,对信号的传输速度没有严格要求,便使用5~10ms的时间间隔。

最后,试着使用它来发送信号,在逻辑分析仪上可以看到:

相关推荐
学习噢学个屁34 分钟前
基于STM32物联网智能鱼缸智能家居系统
c语言·stm32·单片机·嵌入式硬件·物联网·智能家居
一月千帆2 小时前
基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
stm32·单片机·嵌入式硬件
passer__jw7673 小时前
【51单片机】4. 模块化编程与LCD1602Debug
单片机·51单片机
千年糊涂3 小时前
STM32使用水位传感器
stm32·单片机·嵌入式硬件
三三十二4 小时前
STM32简易示波器/逻辑分析仪设计指南
stm32·单片机·嵌入式硬件
Mapleay4 小时前
STM32 _main 里做了什么
stm32·单片机·嵌入式硬件
平凡灵感码头4 小时前
走进离线语音:安信可 VC‑01 智能模块全面拆解与 MCU 实战
单片机·嵌入式硬件
田甲4 小时前
【STM32】G030单片机开启超过8个ADC通道的方法
stm32·单片机·嵌入式硬件
切糕师学AI5 小时前
节拍定时器是什么?
单片机·嵌入式硬件
网易独家音乐人Mike Zhou5 小时前
【无人机】MavLink通讯协议的回调解析函数及状态机
单片机·mcu·物联网·嵌入式·无人机·iot