嵌入式开发必备:UART、SPI、IIC通信协议对比与实战选型指南

嵌入式开发必备:SPI、IIC、RS232/485通信协议对比与实战选型指南 本文深入对比了嵌入式开发中四种主流通信协议SPI、IIC、RS232和RS485的核心特性与适用场景,包括传输方式、速率、距离及硬件设计要点。通过实战案例和选型决策树,帮助工程师根据项目需求(如速度、距离、设备数量)科学选择最佳通信协议,提升系统性能和成本效益。 阅读详情

嵌入式开发实战:UART、SPI、I²C三大通信协议深度解析与选型决策

在嵌入式系统的世界里,微控制器与外设之间的对话,几乎都离不开那几条看似简单的物理连线。对于刚入行的工程师来说,UART、SPI、I²C这三个名词可能意味着数据手册里一堆需要配置的寄存器;而对于经验丰富的开发者,它们则代表着不同场景下需要反复权衡的工程决策。选择哪种通信协议,远不止是“能用就行”那么简单,它直接关系到系统的可靠性、成本、功耗乃至未来的可扩展性。今天,我们就抛开教科书式的定义,从项目实战的角度,深入剖析这三种最常用的串行通信协议,帮你构建一套清晰的选型逻辑。

1. 协议本质:从物理层到数据链路层的核心差异

要做出明智的选型,首先得理解这三种协议在设计哲学上的根本区别。这不仅仅是引脚数量或速度的差异,更是它们在同步机制、拓扑结构和控制逻辑上的不同考量。

1.1 同步与异步:时钟信号的博弈

通信的核心在于收发双方如何保持步调一致。SPI和I²C属于同步通信。这意味着数据传输的节奏由一个共享的时钟信号(SCLK或SCL)来严格指挥。发送方在时钟的某个边沿放置数据,接收方在对应的边沿采样数据。这种机制效率高,速度快,但代价是需要额外一根时钟线,并且主设备必须为整个通信过程提供时钟。

相比之下,UART是典型的异步通信。它没有共享的时钟线。双方依靠事先约定好的波特率(Baud Rate)来各自生成内部时钟。每个数据帧以起始位(一个逻辑低电平)开始,这就像一声发令枪,通知接收方:“数据来了,请开始计时!”接收方则根据预设的波特率,在预估的时间点上对数据线进行采样。这种方式省去了一根线,但引入了对时钟精度的高要求。双方波特率的微小偏差会随着时间累积,导致采样错位,因此异步通信通常不适合传输非常长的、不间断的数据流。

提示:在高速或长距离通信中,时钟信号的抖动和偏移会成为同步通信的挑战,而异步通信则对收发两端的本地时钟精度极为敏感。通常,为了保证可靠异步通信,双方波特率的误差应控制在2%以内。

1.2 拓扑结构:点对点、总线与菊花链

协议决定了设备如何连接,这直接影响了系统的扩展性和布线复杂度。

  • UART:纯粹的点对点。一个TX(发送)对一个RX(接收),一对一连接。如果你想让一个MCU与多个UART设备通信,就需要多个独立的UART外设模块或者使用软件模拟多个UART,硬件上无法共享线路。
  • SPI:一主多从的点对点变体。一个主设备可以连接多个从设备,但每个从设备都需要一根独立的片选信号线(SS/CS)。主设备通过拉低某根片选线来激活对应的从设备进行通信。虽然数据线(MOSI, MISO, SCLK)可以共享,但片选线的数量限制了可挂载从设备的数量,且布线随设备增加而变得复杂。此外,SPI还有一种**菊花链(Daisy-Chain)**模式,设备首尾相连,数据像流水一样依次通过每个设备,适用于特定场景(如级联移位寄存器)。
  • I²C:真正的多主多从总线。所有设备(无论主从)都挂载在两根线上:串行数据线(SDA)和串行时钟线(SCL)。每个设备都有唯一的7位或10位地址。主设备通过广播地址来寻址目标从设备。这种总线结构极大地节省了引脚和布线,是连接多个低速传感器、EEPROM等的理想选择。其“线与”特性(通过开漏输出和上拉电阻实现)也巧妙地解决了多主竞争总线的问题。

为了更直观地对比三者在连接方式上的特点,可以参考下表:

特性UARTSPII²C
通信线数量2 (TX, RX) + GND3 (SCLK, MOSI, MISO) + N (SS) + GND2 (SDA, SCL) + GND
拓扑结构严格点对点一主多从(独立片选)或菊花链多主多从总线
寻址方式无(物理线决定)硬件片选线(CS)软件地址(7/10位)
典型应用场景调试日志、GPS模块、蓝牙模组Flash存储器、显示屏、高速ADC温度传感器、RTC时钟、EEPROM

1.3 全双工、半双工与单工:数据流向的维度

数据能否同时双向流动,决定了通信的灵活性和效率。

  • SPI:全双工。得益于独立的MOSI(主出从入)和MISO(主入从出)数据线,主设备和从设备可以同时发送和接收数据。在交换大量数据时,这能带来理论上的吞吐量优势。
  • I²C:半双工。只有一根SDA数据线,同一时刻只能有一个方向的数据传输。发送和接收必须分时进行。
  • UART:全双工。独立的TX和RX线允许同时收发。但这与SPI的全双工略有不同:UART的两端通常是平等的,可以主动发起传输;而在SPI中,数据传输永远由主设备的时钟驱动,从设备是被动响应。

理解这些底层差异,是我们在具体项目中做出选择的第一块基石。接下来,我们深入到每个协议的操作细节和实战配置中。

2. 实战配置:以STM32CubeMX为例的快速上手

理论再完美,最终也要落地到代码和配置上。我们以意法半导体的STM32系列MCU和其强大的图形化配置工具STM32CubeMX为例,看看如何快速搭建这三种通信的工程框架。这里假设你已基本了解STM32CubeMX的使用。

2.1 UART配置:异步串口的灵活性与陷阱

UART配置相对直观,核心是匹配通信双方的参数。

  1. 引脚分配与模式选择:在CubeMX的引脚分配图中,找到你想要使用的USART/UART外设(如USART1)。将TX引脚设置为Alternate Function Push Pull,将RX引脚设置为Input mode。通常TX对应PA9,RX对应PA10(对于USART1)。
  2. 参数配置:在左侧外设列表选中该UART,进入参数设置。
    • Baud Rate:与对端设备严格一致,常见有9600, 115200, 921600等。
    • Word Length:数据位,通常为8位。
    • Parity:校验位,可选None(无)、Even(偶校验)、Odd(奇校验)。用于简单的错误检测。
    • Stop Bits:停止位,通常为1位。
    • Hardware Flow Control:硬件流控(RTS/CTS)。在高速或不可靠物理链路下防止数据丢失,如果不需要则禁用。
  3. 中断/DMA配置:这是提升效率的关键。在NVIC Settings中使能UART全局中断。更高效的方式是使用DMA。在DMA Settings标签页,为USARTx_RX和USARTx_TX添加DMA通道。对于接收,将模式设为Circular(循环模式),可以自动连续接收数据到缓冲区,无需CPU频繁干预。

生成代码后,HAL库提供了简洁的API。发送数据可以使用阻塞、中断或DMA方式:

// 阻塞式发送(不推荐在主循环中使用,会卡住CPU)
HAL_UART_Transmit(&huart1, (uint8_t*)"Hello\r\n", 7, 1000);

// 中断式发送
HAL_UART_Transmit_IT(&huart1, txBuffer, bufferSize);

// DMA发送(效率最高)
HAL_UART_Transmit_DMA(&huart1, txBuffer, bufferSize);

接收数据通常使用中断或DMA循环模式:

// 启动中断接收,收到指定长度数据后触发回调
HAL_UART_Receive_IT(&huart1, rxBuffer, EXPECTED_SIZE);

// 或者在初始化后启动DMA循环接收
HAL_UART_Receive_DMA(&huart1, rxBuffer, BUFFER_SIZE);

注意:UART通信中,最常见的错误就是波特率不匹配。如果收到乱码,第一个要检查的就是两端的波特率、数据位、停止位、校验位是否完全一致。另外,在高速通信(如921600bps以上)或使用DMA时,要注意缓冲区溢出问题。

2.2 SPI配置:模式与极性的玄机

SPI的配置核心在于主从设备间**模式(Mode)**的匹配,这是很多新手容易栽跟头的地方。

  1. 引脚分配:分配SCK、MOSI、MISO引脚。如果使用硬件片选(NSS),还需要分配一个GPIO作为NSS引脚(通常配置为输出模式)。更常见的做法是使用软件控制任意GPIO作为片选,这样更灵活。
  2. 参数配置:
    • Mode:选择Full-Duplex Master(全双工主机)或Full-Duplex Slave(全双工从机)。
    • Frame Format:通常为Motorola(摩托罗拉格式)。
    • Data Size:数据大小,可选8位或16位。
    • Clock Parameters:这是关键!
      • Prescaler:分频系数,决定SCLK的频率(基于APB总线时钟)。
      • CPOL (Clock Polarity):时钟极性。Low表示空闲时SCLK为低电平;High表示空闲时为高电平。
      • CPHA (Clock Phase):时钟相位。1 Edge表示在第一个时钟边沿采样数据;2 Edge表示在第二个时钟边沿采样数据。
    • NSS:硬件NSS管理,通常选择Disable,使用软件GPIO控制。
  3. CPOL与CPHA的组合:这两者组合成四种SPI模式。你的从设备数据手册会明确要求工作在哪一种模式。主从设备的模式必须完全一致。
模式CPOLCPHA数据采样时刻数据变化时刻
000时钟上升沿时钟下降沿
101时钟下降沿时钟上升沿
210时钟下降沿时钟上升沿
311时钟上升沿时钟下降沿

配置完成后,通信代码通常遵循“拉低片选 -> 交换数据 -> 拉高片选”的流程:

// 假设片选引脚为 GPIO_PIN_4
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // 选中从设备

uint8_t txData = 0xAA;
uint8_t rxData;
HAL_SPI_TransmitReceive(&hspi1, &txData, &rxData, 1, 1000); // 同时收发一个字节

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); // 释放从设备

2.3 I²C配置:上拉电阻与时钟速度的权衡

I²C配置的难点不在于软件,而在于硬件设计和时序的稳定性。

  1. 硬件设计先行:在画原理图时,必须在SDA和SCL线上各添加一个上拉电阻(通常4.7kΩ - 10kΩ,具体值取决于总线电容和速度)。STM32的I²C引脚必须配置为**开漏输出(Open-Drain)**模式,这与内部的上拉是两回事。开漏输出配合外部上拉电阻,才能实现总线的“线与”功能和多主仲裁。
  2. CubeMX配置:
    • 将SDA和SCL引脚配置为I2C功能。
    • 在I2C参数设置中,主要关注:
      • Clock Speed:时钟速度。标准模式为100kHz,快速模式为400kHz,快速模式+为1MHz。速度越高,对上拉电阻和布线的要求越严格。
      • Duty Cycle:占空比,仅在快速模式下可选择,影响高低电平时间比例。
      • Addressing Mode:寻址模式,7位或10位。
      • Dual Address:是否启用从机双地址,通常禁用。
  3. 软件操作:HAL库的I²C函数相对高层,封装了起始、地址、数据、停止等完整时序。
// 向地址为0xA0的设备(EEPROM)的0x00位置写入一个字节数据0x55
uint8_t devAddr = 0xA0;
uint8_t memAddr = 0x00;
uint8_t data = 0x55;

HAL_I2C_Mem_Write(&hi2c1, devAddr, memAddr, I2C_MEMADD_SIZE_8BIT, &data, 1, 100);

// 从同一地址读取一个字节
uint8_t readData;
HAL_I2C_Mem_Read(&hi2c1, devAddr, memAddr, I2C_MEMADD_SIZE_8BIT, &readData, 1, 100);

注意:I²C总线最常见的问题是通信失败,表现为ACK失败(NACK)。排查顺序通常是:1) 检查硬件上拉电阻是否焊接;2) 用示波器查看SDA/SCL波形,看上升沿是否陡峭(过慢可能是上拉电阻太大或总线电容太大);3) 检查从设备地址是否正确(注意7位地址左移一位后,最低位是R/W位);4) 降低时钟速度试试。

3. 多维度对比与选型决策树

了解了各自的特点和配置方法后,我们需要一个系统的框架来指导实际项目的选型。单纯比较“谁更快”或“谁线少”是片面的,必须结合具体场景。

3.1 核心维度深度对比

让我们从几个关键工程指标进行量化对比:

对比维度UARTSPII²C分析与选型启示
通信速度低至中速
(常用300bps - 3Mbps)
高速
(可达50Mbps+,取决于MCU)
低速
(标准模式100kbps,快速模式400kbps,Fast+ 1Mbps)
SPI是速度王者,适合存储器、显示屏等大数据量场景。UART速度适中,满足大多数控制指令和调试需求。I²C受限于开源漏和上拉,速度有天花板,适合传感器等低速设备。
硬件复杂度最低
(仅TX/RX/GND)
最高
(3+N线,N为从机数)
低
(2线总线)
引脚资源紧张时,I²C的2线总线优势巨大。SPI的线数随从设备线性增长,在连接多个设备时布线复杂。
软件复杂度低
(帧结构简单)
低
(无复杂协议,直接读写)
最高
(有时序、地址、ACK、仲裁等协议)
UART和SPI的驱动编写简单直接。I²C协议状态多,需要更完善的驱动库处理超时、重试、仲裁失败等情况。
通信距离较远
(RS-232可达15米,RS-485可达千米)
短
(通常板级,<1米)
短
(板级或背板,通常<0.5米)
需要长距离通信时,UART配合RS-485电平转换芯片是经典方案。SPI和I²C本质是板级协议。
功耗考量可低功耗
(空闲时线路静态电流小)
较高
(时钟持续翻转,动态功耗大)
低
(静态功耗低,时钟仅在传输时活动)
电池供电设备中,I²C是连接多个传感器的好选择。SPI持续时钟在高频下功耗可观。
抗干扰能力差
(单端信号,易受共模干扰)
差
(单端信号)
差
(单端信号)
三者均为单端信号,在噪声环境中可靠性一般。若环境恶劣,需考虑CAN、RS-485等差分信号协议。
多设备支持不支持(需多UART口)支持(一主多从,需多片选线)优秀支持(多主多从,总线寻址)I²C在连接多个同类型传感器(如多个温度传感器)时,只需改变地址,布线极其简洁。

3.2 实战选型决策树:从场景出发

光看表格还不够,我们需要一个更直观的决策流程。假设你正在为一个物联网传感节点选型通信协议,可以遵循以下思路:

开始
│
├─ 通信距离是否超过1米?
│   ├─ 是 → 首选UART(配合RS-485/RS-422),或考虑CAN。
│   └─ 否 → 进入下一步。
│
├─ 需要连接的设备数量是否众多(>3个)且引脚资源极度紧张?
│   ├─ 是 → 首选I²C。
│   └─ 否 → 进入下一步。
│
├─ 对通信速率要求是否极高(>1Mbps)?
│   ├─ 是 → 首选SPI。
│   └─ 否 → 进入下一步。
│
├─ 通信对象是哪种常见外设?
│   ├─ 传感器(温湿度、气压、光强等) → 通常I²C或SPI,查数据手册确认。
│   ├─ 存储器(Flash, EEPROM) → SPI(高速)或 I²C(小容量)。
│   ├─ 显示屏(OLED, TFT) → 通常SPI(节省引脚)或并行接口。
│   ├─ 无线模块(Wi-Fi, BLE, LoRa) → 通常UART(AT指令)或SPI。
│   ├─ 调试接口(打印日志) → 必定是UART。
│   └─ 其他专用芯片 → 严格遵循数据手册推荐。
│
└─ 综合考虑功耗、软件复杂度、现有库支持等因素,做出最终选择。

场景化决策示例:

  • 场景一:高精度数据采集系统

    • 需求:MCU需要以1kHz频率读取一个16位ADC(模数转换器)的数据,ADC精度高。
    • 分析:数据量大(每秒2000字节),对速度有要求。ADC芯片通常提供SPI或并行接口。
    • 决策:选择SPI。它能提供足够高的时钟速率(如10MHz),实现实时数据流传输。如果ADC是I²C接口,400kbps的速率可能成为瓶颈。
  • 场景二:智能家居传感器节点

    • 需求:一款电池供电的温湿度计,使用MCU连接一个温湿度传感器和一个OLED小屏幕,并通过LoRa模块上报数据。
    • 分析:引脚资源有限(想用小型封装的MCU),功耗敏感。温湿度传感器(如SHT3x)常用I²C,OLED屏(如SSD1306)常用I²C或SPI,LoRa模块(如SX1278)常用SPI。
    • 决策:优先统一为I²C。寻找I²C接口的OLED屏,这样MCU只需2个引脚(SDA, SCL)即可管理两个外设,极大节省引脚和功耗。LoRa模块如果只有SPI,则单独占用一组SPI引脚。
  • 场景三:工业设备调试接口

    • 需求:为一块电机控制板提供一个人机交互和调试接口。
    • 分析:需要传输调试信息、接收控制命令。协议要简单通用,方便PC端用串口工具连接。
    • 决策:选择UART。这是嵌入式调试的“标准答案”。可以通过USB转UART芯片连接到电脑,使用Putty、Tera Term等任何串口工具进行通信,开发调试极其方便。

4. 进阶话题与避坑指南

掌握了基础选型后,一些进阶问题和“坑点”能让你在设计时更加游刃有余。

4.1 速度瓶颈与优化策略

你以为选定了协议,速度就定了吗?实际吞吐量往往远低于理论值。

  • SPI的实际速度:理论速度可达几十Mbps,但受限于以下因素:
    • 软件开销:频繁的片选操作、函数调用、数据搬运会消耗大量CPU时间。对于高速SPI Flash,务必使用DMA进行数据传输,并配合**内存映射(Memory-Mapped)**模式(如Quad-SPI)才能接近理论带宽。
    • 布线质量:高速SPI对PCB走线有要求,需注意等长、阻抗控制,避免过孔,防止信号反射和失真。
  • I²C的速度陷阱:标准100kHz在很多应用中感觉“慢”。切换到快速模式(400kHz)能提升不少,但要注意:
    • 总线电容:线上挂的设备越多,走线越长,等效电容越大,信号上升沿越缓,可能导致通信失败。解决方法是减小上拉电阻值(如从4.7kΩ降到2.2kΩ),但会增加静态功耗。
    • 软件延迟:标准的HAL库HAL_I2C_Mem_Write/Read函数为了通用性,包含了很多状态检查和超时等待。在极端要求速度的场合,可能需要直接操作寄存器编写更精简的驱动。
  • UART的“软”瓶颈:UART的瓶颈常在软件处理上。使用115200波特率时,每秒最多传输约11.5KB数据。如果使用阻塞式发送大量调试信息,会严重拖慢主程序。务必使用DMA或中断+环形缓冲区来处理接收数据,发送调试信息时也应使用非阻塞方式或降低发送频率。

4.2 可靠性与错误处理

通信不可能永远完美,鲁棒的系统必须考虑错误处理。

  • UART:
    • 帧错误:起始位/停止位检测错误。检查波特率是否匹配,线路干扰是否过大。
    • 溢出错误:数据接收过快,缓冲区被新数据覆盖。增大接收缓冲区或提高处理速度。
    • 奇偶校验错误:简单的位错误检测。可在通信协议层增加更强大的校验(如CRC)。
  • SPI:
    • 协议层简单,没有内置的错误检测机制。数据正确性完全由应用层保障。在关键数据传输中,必须在数据包中添加校验和或CRC。
    • 片选信号干扰可能导致从设备误触发。确保片选信号在非活动期间保持稳定高电平,并考虑在PCB布局上减少与其他高速信号的并行走线。
  • I²C:
    • ACK/NACK:从设备无响应(NACK)是最常见的错误。原因可能是地址错误、设备未上电、总线被锁死(某个设备SDA一直拉低)。
    • 总线锁死:这是I²C的经典故障。当从设备在时钟线为低时异常拉低数据线,主设备会永远等待。很多MCU的I²C外设具有超时或从设备复位功能。软件上可以实现一个“总线恢复”序列:模拟9个时钟脉冲,尝试让故障设备释放SDA。
    • 多主仲裁:当两个主设备同时发起传输时,硬件会自动仲裁失败一方退出。你的驱动需要能处理这种仲裁丢失错误,并进行重试。

4.3 超越基础:特殊模式与变体

  • SPI的变体:
    • Dual-SPI / Quad-SPI:除了MOSI/MISO,还利用其他IO口同时传输2位或4位数据,成倍提升吞吐量,广泛用于外部Flash和RAM。
    • 3线SPI:省去MISO或MOSI,用于只需单向通信的场景,如驱动简单的DAC或LED驱动器。
  • UART的“亲戚”:
    • USART:通用同步异步收发器。在UART基础上增加了同步时钟输出功能,可以像SPI一样工作。
    • LIN总线:基于UART的单线、低速汽车网络协议,成本极低。
    • Modbus RTU:工业领域广泛应用的协议,物理层通常基于RS-485(本质是UART)。
  • I²C的拓展:
    • SMBus:系统管理总线,基于I²C但更严格,定义了超时、协议格式等,常用于电脑主板管理。
    • PMBus:电源管理总线,基于SMBus,用于数字电源管理。

在实际项目中,我常常发现工程师会过度依赖某一种熟悉的协议。比如习惯用UART做所有事,导致项目后期引脚不够用;或者为了追求速度在所有地方都用SPI,忽视了布线的复杂度和功耗。最好的策略是根据核心需求(速度、引脚、距离、功耗)划定可选范围,再结合具体外设的芯片选型(它支持什么接口)做出最终决定。有时候,为关键的高速设备单独分配一组SPI,而将一群低速传感器挂在一条I²C总线上,是一种非常高效且实用的混合架构。记住,没有“最好”的协议,只有“最适合”当前场景的方案。多动手搭电路、写代码、用逻辑分析仪抓波形,积累的经验会让你在面对下一个设计时更加自信。

嵌入式开发必备:UART、SPI、I2C通信协议全对比(附典型应用场景) 本文深度解析嵌入式开发中UART、SPI、I2C三大通信协议的架构差异、传输效率及典型应用场景,提供实战选型指南。通过对比电气特性、协议开销和优化技巧,帮助工程师在板内板间通信中做出高效决策,提升系统稳定性和开发效率。 阅读详情

相关推荐

嵌入式工程师必备:UART/SPI/I2C三种串口通信协议到底怎么选?实测对比告诉你答案

本文深入对比了UART、SPI、I2C三种串口通信协议的核心特性与性能差异,通过STM32平台实测数据揭示选型要点。针对串口通信场景,详细分析物理层差异、协议栈结构及抗干扰能力,并提供典型应用案例与选型决策树,帮助嵌入式工程师优化通信方案设计。

weixin_29231027的博客 376

ESP32 五大通信接口实战详解(串口+SPI+I2C+ADC+USB)

本文针对ESP32芯片详细介绍了五大核心通信接口的实战应用:1. UART串口通信:详解异步通信原理,提供接线图与纯C代码实现双向通信;2. SPI高速同步通信:讲解主从架构,实现OLED屏幕驱动;3. I2C两线制通信:演示连接BH1750光照传感器的数据采集;4. ADC模数转换:说明电位器模拟信号采集与电压转换;5. 各接口均包含硬件准备、接线方案、代码实现(ESP-IDF框架)、测试步骤和常见问题排查。全文采用"原理+代码+实操"模式,代码可直接复制使用,既适合新手入门,也能满足

630

过程挖掘(Process Mining)1——始于颜值

下周开始每周1-2篇的过程挖掘分享 过程挖掘是什么? 过程挖掘与过程管理的关系? 过程挖掘与数据挖掘的关系? 管理学还是计算机科学?

hyhy12580的博客 6231

嵌入式必备总线协议 UART、IIC、SPI、RS232、RS485、CAN

针对嵌入式总线协议进行展开的文章

你要拥有一个你喜欢并且热爱的人生 1万+

嵌入式硬件实战:RC、LC与RL滤波电路的设计与选型指南

本文深入探讨了嵌入式系统中RC、LC与RL滤波电路的设计与选型策略。通过生活化比喻和实战案例,详细解析了三种滤波电路的工作原理、应用场景及工程注意事项,帮助工程师根据电流大小、频率特征和成本预算选择最优方案,提升嵌入式硬件设计的稳定性和抗干扰能力。

kiwi8的博客 279

pycharm添加Anaconda解释器显示不出来

因为我之前下载的是pycharm最新版本2024.1的,所以我抱着试一试的心态卸载重装了2021.3.3的,创建新文件的时候立刻就自己识别好了conda环境。就是图中画圈的地方,之前一直显示为python的图标,但是再Python Interpreter后面跟的路径确实是我下载anaconda的地方。另外一种方法就是使用Virtualenv Environment方式配置,但是我的pycharm还是没有识别出conda的图标。首先是这位的方法,先添加系统解释器,再重启,但是我的图标还是python。

2202_75803271的博客 4000

IIC、SPI、USART、RS485、RS232、CAN外设通信总结《面试必备》

硬件上为4根线。主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。串行移位寄存器通过MOSI信号线将字节传送给从机,也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换。外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。

qq_58662017的博客 4662

动手学Moveit2 | 运行配置好的机械臂功能demo

通过这个小demo你可以直观的感受moveit2的强大,但还有很多需要我们探索的,比如机械臂是如何规划的,规划的过程中如何结合环境信息,规划的时候机械臂如何求解,如何和真实的机械臂对接等等,这些都需要你来进一步探索,今天就到这里,明天给大家秀一下小仙女焊的fishbot运控板。

生活不止眼前的苟且 8873

有了UART,为什么还有IIC和SPI?

回到最初的问题:有了UART,为什么还需要IIC和SPI?答案很简单:因为它们各有所长,适用于不同的应用场景。UART适合点对点、中低速、需要简单可靠通信的场景。它的优势在于实现简单、使用方便、几乎所有MCU都支持。如果你只需要连接一两个设备,不需要很高的速度,UART是最好的选择。IIC适合连接多个低速外设的场景。它的最大优势是节省GPIO资源,一条总线可以挂载多个设备。如果你的项目需要连接多个传感器、EEPROM等低速设备,IIC是不二之选。SPI适合需要高速数据传输的场景。

码到成功 649

项目介绍 MATLAB实现基于LSTM-XGBoost长短期记忆网络(LSTM)结合极端梯度提升(XGBoost)进行多变量时序预测的详细项目实例(含模型描述及部分示例代码)

本项目基于MATLAB平台,实现LSTM-XGBoost混合模型进行多变量时序预测。通过LSTM网络自动提取时序特征,结合XGBoost强大的回归能力,有效解决多变量时序数据的高维复杂性、长短期依赖捕捉等难题。项目包含完整的数据预处理流程、模型构建与训练方法,以及性能评估指标。提供的GUI界面支持参数调整、训练监控和结果可视化,适用于能源、金融、气象等多领域预测任务。配套代码详细注释,便于理解模型实现细节,为时序预测研究提供实用参考框架。

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 98

MATLAB 控制 E4438C 信号源的研究

通过 MATLAB,我们可以实现对 E4438C 的远程控制,从而实现更高的自动化和可编程性。总结起来,通过使用 MATLAB 和 Instrument Control Toolbox,我们可以轻松地控制 E4438C 信号源并生成各种类型的信号。需要注意的是,以上代码仅为示例,实际应用中可能需要根据具体情况进行更详细的配置和错误处理。此外,MATLAB 还提供了一系列函数和命令,可用于控制 E4438C 信号源的其他功能,如频率调谐、功率设置、调制设置等。您可以根据自己的需求进行相应的配置和控制。

RswtPerl的博客 1007

嵌入式开发必知:UART、IIC、SPI三大串行总线实战解析

本文深入解析嵌入式开发中UART、IIC、SPI三大核心串行总线协议的工作原理、实战应用与配置技巧。通过对比通信方式、速率、硬件复杂度和典型应用场景,为工程师提供全面的协议选型指南,帮助其在项目中高效运用这些串行总线进行设备间通信。

www00的博客 184

2025届程序技术类笔试题

希尔排序在直接插入排序的基础上进行了改进,它通过比较相距一定间隔的元素来进行,各轮比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一轮排序为止。某人逆着水流的方向向岸边划船,每次行进前进x米后需要休息一下,休息期间船会自行倒退y米,每次休息后再次行进,前进距离缩短1/5,若起始距离岸边为m米,问:能否到达岸上,需要行进多少次才能上岸。直接插入排序的原理是将第i个元素插入前面i-1个已排好序的记录中,将比第i个元素大的记录依次向后移动一个位置,将第i个元素插入空位。第二轮相邻比较,后移2次。

博客 588

RS232、RS485、SPI、IIC 4种嵌入式经典通信总线协议

UART、RS232、RS485、IIC、SPI是最常用的5种通信总线协议,广泛应用于项目开发之中,可以说只要是智能终端产品,都会使用到它!智能时代,它不仅是嵌入式物联网、智能硬件开发的必备技能,也是进一步学习TCP/IP等复杂通信协议的基础。从本质上来说,RS232,RS485都是依附于UART,只不过是在电气层或者物理层上的规定不同,目的是为了提高抗干扰能力,提高传输距离和传输的速度。SPI,IIC则是独立的总线协议,但两者之间也有相同之处,我们可以将两放在一起相互比较学习,体会这两种协议之间优缺点。

wa_chao_的博客 2936

Jetson nano 系列之2—板载摄像头IMX219启动

我选用的是亚博科技jetson nano的开发板。

驽马十驾,功在不舍;锲而不舍,金石可镂。 4264

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

RS485 CAN SPI IIC UART RS232这些通信协议传输距离、传输速度对比给出比较顺序-笔记(面试必备)

传输距离排序(长到短)传输速度排序(快到慢)根据具体应用场景和需求,可以选择合适的通信协议来实现有效的通信。

qq_58662017的博客 3398

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

嵌入式软件必备知识--通讯协议(UART、I2C、SPI、CAN)

UART是异步,全双工串口总线。它比同步串口复杂很多。有两根线,一根TXD用于发送,一根RXD用于接收。UART的串行数据传输不需要使用时钟信号来同步传输,而是依赖于发送设备和接收设备之间预定义的配置。UART全称是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),它通常称作UART,是一种异步收发传输器, 是设备间进行异步通信的关键模块。UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;

m0_73482095的博客 3680

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

对比SPI、UART、I2C通信的区别与应用

SPI通信是一种单主多从的通信方式,通信时需要指定从机地址。UART通信只需要两根线(TX、RX)实现即可,其中TX线是发送方向,RX线是接收方向。I2C通信采用两根线(SDA、SCL)实现,其中SDA线是数据线,SCL线是时钟线。I2C通信一般用于多主多从的通信方式,由于它采用了“主从”结构,可以实现多个主机在总线上进行数据通信。SPI、UART、I2C通信是常用的数字通信协议,它们在不同的场景下有不同的应用。UART通信的应用场景主要集中在需要点对点通信,数据传输速率较低的场合。

weixin_46094676的博客 1370

【嵌入式】---- SPI, IIC,UART,USART

IIC SPI IIC,SPI,UART,USART区别与联系 这篇文章涉及时序图较多,为了更详细表达,全文都是贴的图片,望见谅。 尾附博客一个大牛文章的一段,觉得写得很好,和大家分享: 在数字通信协议簇中,IIC和SPI常称为“小”协议,相对Ethernet, USB, SATA, PCI-Express等传输速度达数百上千兆字节每秒的总线。但是,我们不能忘记的是各种总线的用途...

wyifan_的博客 1604

【嵌入式开发必备知识汇总】:嵌入式概念、平台、iic协议介绍

【嵌入式开发必备知识汇总】:嵌入式概念、平台、iic协议介绍

深耕嵌入式领用多年, 致力于分享嵌入式领域技术! 949

单片机面试知识点汇总

前言:基本覆盖了单片机面试的问题,也是学习单片机的必备知识,不能死记硬背,最好是理解其工作原理,然后背逻辑框架。 GPIO IO有哪三种常用方式? 状态怎么转换? 中断 什么是中断? 中断的触发方式有哪些? 哪些函数不能在中断中使用? 什么叫不可重入函数? 中断与异常有何区别? 中断的响应执行流程是什么? 写一个中断服务需要注意哪些? 中断和轮询哪个效率高?怎样决定是采用中断方式还是采用轮询方式去实现驱动? 中断优先级有哪些? 单片机这种没有操作系统的,中断处理函数不能有输入参数也不

weixin_44173189的博客 5424

IIC通信协议深度解析:从两根线到多主机系统的实战指南

串行通信协议是嵌入式系统设备间数据交换的基础技术,通过同步时钟信号实现可靠数据传输。IIC协议采用开漏输出和线与逻辑,仅用两根双向线(SDA和SCL)构建多主多从总线,通过软件寻址机制支持多个设备高效通信。其核心价值在于以最小硬件资源实现灵活可扩展的低速外设连接,广泛应用于传感器、EEPROM、RTC时钟芯片等场景。本文聚焦IIC协议层与硬件层实战,深入解析上拉电阻计算、开漏输出配置、总线仲裁等关键工程问题,并提供软件模拟与硬件IIC的选型策略,帮助开发者规避常见通信故障,提升系统稳定性。

weixin_34199405的博客 508

通信协议

首先我是在嵌入式软件工程师的招聘要求里面看到上面总线协议基本都是必写的。 这个可以看我的博文:https://blog.csdn.net/sinat_16643223/article/details/106818859 另外华清的课程里面再将STM32的串口时也说到了如下:再一次印证了我上面的发现。 串口的通信协议我希望大家学完本章节之后能够背述通信协议,这是一个最基本的一个要求,因为通信协议是非常重要的,不管你是去其他公司面试,还是说进行一些什么样的考试,我们通信协议基本是都是一个必考的内容。

自主无人机 PX4 ROS SLAM 路径规划 MVS等技术分享 361

《嵌入式硬件从入门到精通:电源 / 模电 / 数电 / 通信核心全解析》

嵌入式硬件工程师知识体系精华摘要 电源设计核心要点 LDO与DCDC对比:LDO纹波小但效率低(η≈Vout/Vin),适合小电流场景;DCDC效率高(85%-95%)但纹波大,适合大电流应用。关键选型因素包括压差、电流和纹波要求。 BUCK电路设计: 拓扑:Vin→开关管→电感→输出电容→负载 电感计算:L=(Vout×(Vin-Vout))/(ΔIL×Fs×Vin),ΔIL取20-40%Io 电容选型:Cout≥ΔIL/(8×Fs×ΔVout),需低ESR电容 电源稳定性: 环路补偿:通过RC网络调整相

C++,Java,Python,C#编程选手,偶尔刷刷leetcode 2983

【蓝桥杯单片机客观题知识点汇总】

程序设计题相关文章:constcodeinline。

S13352784013的博客 3913
上一篇: ECharts Y轴分段控制避坑指南:为什么splitNumber不生效?5种精准控制方法
下一篇: PX4固件刷机避坑指南:从固件下载到参数调试全流程详解
Mars5
博客等级 码龄15年 556粉丝 1544原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值