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

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

因此在使用一根线对外传输数据时,需要自定义一个通信协议,它至少要包含格式头+数据,格式头应该占整个数据发送周期的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的时间间隔。

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

相关推荐
niuTaylor3 小时前
STM32平衡车开发实战教程:从零基础到项目精通
stm32·单片机·嵌入式硬件
可待电子单片机设计定制(论文)12 小时前
【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)
stm32·单片机·嵌入式硬件
不可思议迷宫13 小时前
Verilog编程实现一个分秒计数器
单片机·嵌入式硬件·fpga开发
life_yangzi15 小时前
关于单片机IAP升级的那点事儿|智能设置中断向量表
单片机·嵌入式硬件
了一li17 小时前
STM32实现一个简单电灯
stm32·单片机·嵌入式硬件
march_birds20 小时前
FreeRTOS 与 RT-Thread 事件组对比分析
c语言·单片机·算法·系统架构
触角010100011 天前
STM32F103低功耗模式深度解析:从理论到应用实践(上) | 零基础入门STM32第九十二步
驱动开发·stm32·单片机·嵌入式硬件·物联网
昊虹AI笔记1 天前
使用STM32CubeMX和Keil在STM32上创建并运行一个简单的FreeRTOS多任务程序
stm32·单片机·嵌入式硬件
王光环1 天前
单片机使用printf,不用微库
单片机·嵌入式硬件
西城微科方案开发1 天前
体重秤PCBA电路方案组成结构
单片机·嵌入式硬件