单片机通讯协议

参考:江科大单片机教程 STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili

IIC通讯协议SPI通信协议UARTCANUSB
速度100k-400khz4Mhz-
线数2 CLK,DATA4CLK,ENB,IO,OI
额外设备
一主多从一主多从

一般不用自己写,都有相应的库或官方提供相应的,改改就行,没有了再去看视频或是从其它处移植过来,改改;

IIC通讯协议

通信时序 发送数据过程  发送地址 接收1位 发送数据 置高 继续接收 继续发送 

可以软件模拟

因为多设备,并且只有两条线,因为设备内有多个寄存器,从而数据发送,读写时,需要发送设备地址和设备寄存器地址(连接上地线

写时序 : 七位设备地址,和一位读写位 ;设备应答后,发送写入的地址,应答后,写入数据

设备地址和内部寄存器地址

读时序:当前地址读;因为地址为当前地址,从而要读特定地址时,要用写时序写入地址,不发送数据,然后发送重新开始信号,再进行读时序

连续写,连续读,只要接收或读取数据后,给出应答,即会连续

一条CLK 一条DATA线

多个设备

因为时钟线为主机控制,所以可以中断停止后再继续接收,发送

SPI通信协议

可以软件模拟(但软件模拟从机时,容易出现丢帧,导致后续数据都是错的。。。但可以用于LCD等

CLK,MOSI,MISO,CS1,CS2,CS3

一对多;多个设备;对设备的选择通过CS1,CS2,CS3的拉底来实现

采用循环发送数据模式;MOSI 发出一位的同时置换回MISO内的一位,直到一个字节发送完,同时也接收了从机的一个字节

读写格式,依不同的设备而定;没有统一的,按具体设备翻看手册

连续读写,只要cs线没断开就可以连续;断开则停止 

因为时钟线为主机控制,所以可以中断停止后再继续接收,发送

UART通信协议

一对一

TX RX GND 

使用内部时钟作为时钟,导致通信双方需要相同的波特率;

因为内部时钟,从而有校验位,为信息传递进行准备性,抗干扰设置

读写协议格式:自已协定

连续读写:连续

TTL电平:+3.3V或+5V表示1,0V表示0
RS232电平:-3~-15V表示1,+3~+15V表示0
RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)

——来自江科大:PPT

一般不会使用到,使用到时通常有操作系统,或是驱动已经集成了,只需要使用即可;使用于嵌入式,高效,稳定阶段,有专门的驱动,不需

多设备同时传输,从而需要确定传输方是谁,多人同时传输,只有两线,从而决定,谁先谁后,从而协议;

时钟来源:主设备,还是内部时钟

SPI,UART,I2C 因从设备选择由主机控制,实现主从,从而不需要确定传输方和仲裁先后

*CAN通信协议(CAN总线入门教程 - 持续更新中_哔哩哔哩_bilibili

需要额外外部电路

一对多,主从可以变化;一发送,其它的接收,

组成网络结构,任何一方皆可发送;其它方接收;发送方切换

信息稳定性,同时传输

从而有仲裁,信息传输正确;从而使用协议验证

传输距离,稳定性

*USB通信协议

差分电路,抗干扰,运输长度

有多设备,从而有总线仲裁,谁先使用

有多设备,从而信息传递中,信息的传输方来源,使用信息符带地址,验证,信息

一,不需要重新写协议,除非你要移植到新出的产品上,(一般也只需要使用原有的修改一下即可,要了解具体的过程的

二,一般都会提供相应的协议的实现的,不需要再

三,具体场景具体使用,不需要使用高的,一般的需求已经满足了,高的用不到——

总结一下

根据主机挂载从机的数量,与选择从机的方式

uarti2cspicanUSB
一对一两根线选择所有的从机通过各个cs线选择不同的从机形成网络结构任意一方可成为主机可挂载多个设备
只有两个设备地址就不需要了从而需要地址来确定选择哪个设备直接通过csx选择不同的从机,地址可省略了两线,从而需要地一个usb 主机可挂载多个usb设备,D+D-选择,从而需要地址,

连线方式

uart 

rx->tx tx->rx gnd->gnd

spi 

SCL ->SCL ; MISO->MOSI GND->GND

I2C

CLK->CLK; DAT ->DAT

arudino 

I2C 协议 与 移植

asrpro 

1.添加头文件

2.修改函数

SSD1306  移值

ASRPRO - ssd1306的核心函数 按网上的u8g2移植过程,修改代码如下

uint8_t u8x8_avr_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr)
  {
        // Re-use library for delays

        switch(msg)
        {
          //ms
                case U8X8_MSG_DELAY_MILLI:
        delay(1);
      break;
     
      //10 us
      case U8X8_MSG_DELAY_10MICRO:
        delay10us();
      break;
     
      //1 ns
           case U8X8_MSG_DELAY_NANO:
        delay1us();
      break;
     
    case U8X8_MSG_DELAY_100NANO:
      delay1us();
      break;
     
               case U8X8_MSG_GPIO_AND_DELAY_INIT:  // called once during init phase of u8g2/u8x8
        ssd1306_spi_init();
                       break;              // can be used to setup pins
               case U8X8_MSG_GPIO_SPI_CLOCK:        // Clock pin: Output level in arg_int
                       if(arg_int)
                               digitalWrite(SCK,1);
                       else
                               digitalWrite(SCK,0);
                       break;
               case U8X8_MSG_GPIO_SPI_DATA:        // MOSI pin: Output level in arg_int
                       if(arg_int)
                               digitalWrite(MOSI,1);
                       else
                               digitalWrite(MOSI,0);
                       break;
               case U8X8_MSG_GPIO_CS:        // CS (chip select) pin: Output level in arg_int
                       if(arg_int)
                               digitalWrite(CS,1);
                       else
                               digitalWrite(CS,0);
                       break;
               case U8X8_MSG_GPIO_DC:        // DC (data/cmd, A0, register select) pin: Output level in arg_int
      if(arg_int)
                               digitalWrite(DC,1);
                       else
                               digitalWrite(DC,0);
                       break;
              
               case U8X8_MSG_GPIO_RESET:     // Reset pin: Output level in arg_int

               default:
                 break;

        }
        return 1;
}


*PCA9865

*使用官方的softiic修改下发送地址 地址即可 左移一位  0,1( 读写?)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/569893.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mysql用语句创建表/插入列【示例】

一、 创建表 COMMENT表示字段或列的注释 -- 新建student表 CREATE TABLE student (id BIGINT NOT NULL COMMENT 学生id, enroll_date DATE NOT NULL COMMENT 注册时间, NAME VARCHAR(18) DEFAULT NOT NULL COMMENT 学生姓名, deal_flag TINYINT(1) DEFAULT 0 NOT NULL COMM…

linux开发板开机启动向日葵

硬件:orangepi 5 pro 操作系统:ubuntu 20.4 lts 安装向日葵 根据我的实测,arm架构的ubuntu系统只能安装向日葵提供的麒麟系统的那个版本,具体安装方式官网下载页面有 允许任意用户连接到 X11 使用root用户登录后打开终端输入一下…

数据分析学习资源(未完)

1、PDF 数据分析自学攻略 增长黑客(AARRR) 量化思维

Centos7升级编译器

Centos7默认编译器版本: gcc5.1之前的编译器,默认是C98标准的,若是编译一些支持C高版本的软件时,难免会出现问题。例如:编译最新版jsoncpp,会有如下问题:(原因是:std在C9…

从阿里云迁移Redis到AWS的规划和前期准备

在将Redis实例从阿里云迁移到AWS之前,需要进行全面的规划和前期准备。以下九河云提供一些重要的步骤和注意事项: 1. 评估Redis使用情况 首先,您需要评估当前Redis实例的使用情况,包括实例规格、内存使用量、吞吐量、访问模式等。这将有助于选择合适的AWS Redis产品和实例类型…

代码随想录算法训练营day40

题目:343. 整数拆分、96.不同的二叉搜索树 参考链接:代码随想录 343. 整数拆分 思路:五部曲来走。dp数组,dp[i]用于记录拆i得到的最大乘积和,我们要求的也就是dp[n];递推公式,我们想拆分i&am…

薄板样条插值TPS原理以及torch和opencv实现

薄板样条插值TPS原理以及torch和opencv实现 1、薄板样条插值TPS原理概述原理以及公式推导2、torch实现3、opencv实现1、薄板样条插值TPS原理 概述 薄板样条(Thin Plate Spline),简称TPS,是一种插值方法,可找到通过所有给定点的“最小弯曲”光滑曲面。因为它一般都是基于…

Echarts水球图的配置项,掌握后极其简单。

Echarts水球图(Liquid Fill Gauge)是 Echarts 中的一种数据可视化图表类型,用于展示一种类似水球的效果,可以直观地显示一个数值相对于总量的比例。水球图通常用于展示进度、完成率、占比等数据,具有直观、美观的特点&…

Win linux 下配置adb fastboot

一、Win配置adb & fastboot 环境变量 主机:Win10,除了adb fastboot需要设置变量之外,驱动直接安装即可 win下adb fastboot 下载地址:https://download.csdn.net/download/u012627628/89215420 win下qcom设备驱动下载地址&a…

反向海淘代购系统是什么?如何为国外的人代购中国电商平台的商品?

随着全球化的深入发展,跨境购物已成为越来越多人的日常选择。然而,传统意义上的“海淘”主要是指中国消费者从国外电商平台购买商品。近年来,随着中国电商市场的蓬勃发展,越来越多的海外消费者也开始对中国商品产生浓厚兴趣&#…

Memecoin再迎爆发:是本轮牛市大反弹的开始吗?

在加密货币市场上,Memecoin再度掀起了一波热潮,引发了人们对于本轮牛市是否即将到来的猜测和期待。近期,诸如BONK、PEPE和POPCAT等Memecoin的价格出现了显著的上涨,涨幅之大令人瞠目。这一现象引发了广泛的讨论,人们开…

C++之入门

文章目录 1、前言2、C的关键字2.1C语言32关键字2.2C关键字(63个) 3、命名空间4、输入输出(cout、cin)4、缺省参数5、函数重载6 引用6.1 引用的定义6.2 引用的特性6.3引用的使用场景6.4 实际例子6.5、总结 7、内联函数8、auto关键字9、nullptr关键字 1、前言 C语言是结构化和模…

恶意软件狩猎新途径:使用.NET元数据分析跟踪恶意软件

本文由Blaze于2024年3月25日发表于其个人博客网站上。 就在不久前,我们意外发现了一个PureCrypter样本,而PureCrypter则是一款适用于各种类型恶意软件(例如Agent Tesla和RedLine)的加载器和混淆处理工具。深入分析之后&#xff0c…

BDC报错信息查看

1.在事务代码st22的报错信息中下载本地文件 2.打开本地文件查看报错信息 3.在事务代码se91中输入对应消息类和消息编号 4.查看报错信息,根据报错信息取解决问题

GaussDB数据库SQL系列-聚合函数

背景 在这篇文章中,我们将深入探讨GaussDB数据库中聚合函数的使用和优化。聚合函数是数据库查询中非常重要的工具,它们可以对一组值执行计算并返回单个值。例如,聚合函数可以用来计算平均值、总和、最大值和最小值。 这些功能在数据分析和报…

数据结构(七)---树

目录 一.树的基本概念 二.树的性质 三.二叉树 1.二叉树的基本概念 2.特殊的二叉树 (1)满二叉树 (2)完全二叉树 (3)二叉排序树 (4)平衡二叉树 3.二叉树的性质 4.完全二叉树…

【ARMv9 DSU-120 系列 -- Utility bus 详细介绍 2】

文章目录 ARM DSU-120DSU-120 Utiity BusCluster and core PPUPPU寄存器的访问性PPU寄存器的作用系统组件基地址ARM DSU-120 DSU-120 Utiity Bus 在ARMv9架构中,DSU-120(Dynamic Shared Unit 120)是一个关键组件,用于管理核心和系统组件之间的通信与协作。某些系统组件寄存…

嵌入式Linux driver开发实操(二十一):linux device driver basic设备驱动程序基础

linux的架构框图: 内核空间是内核(即操作系统的核心)执行(即运行)并提供其服务的地方。 用户空间是执行用户应用程序的地方。 内核模块是可以根据需要加载和卸载到内核中的代码片段。它们扩展了内核的功能,而无需重新启动系统。自定义代码可以通过两种方法添加到Linux内…

『FPGA通信接口』串行通信接口-IIC(1)接口协议

文章目录 1.IIC简介1.1 IIC概述1.2 总线结构 2.IIC通信协议2.1消息种类2.2通信过程 3.开发思路4.仿真分析5.传送门 1.IIC简介 1.1 IIC概述 IIC即 Inter-Integrated Circuit(集成电路总线),是由 Philips 半导体公司在八十年代初设计出来的一种简单、双向…

字节跳动(社招)三面算法原题

TikTok 喘息 继上月通过强制剥离 TikTok 法案后,美国众议院在当地时间 20 日下午以 360 票赞成 58 票反对通过了新的法案:剥离 TikTok 的期限由生效后 165 天调整至 270 天之内,即今年 11 月的美国总统大选后。 之前我们讲过,TikT…