TMS320F28335串行通信接口(SCI/SPI/I2C)配置与实战指南

📅 2026/7/26 14:49:24
TMS320F28335串行通信接口(SCI/SPI/I2C)配置与实战指南
1. 项目概述与串行通信核心价值在嵌入式系统开发尤其是工业控制、电机驱动和复杂传感器网络领域微控制器与外部世界的数据交换是构建智能系统的基石。这种交换的“语言”就是通信协议而串行通信因其简洁、可靠和成本效益成为了最广泛使用的“方言”。我接触过不少项目从简单的温湿度传感器数据读取到多轴伺服驱动器之间的高速同步再到复杂的上位机监控系统其底层的数据流几乎都离不开串行通信接口。今天我们就以德州仪器TI的明星产品——TMS320F28335这款高性能数字信号控制器DSC为例深入拆解其内置的三种核心串行通信接口SCI、SPI和I2C。为什么是这三种因为它们几乎覆盖了嵌入式开发中90%的串行通信场景。SCI串行通信接口是你与电脑串口助手、Modbus设备对话的桥梁SPI串行外设接口是你驱动屏幕、读写Flash存储器、连接高速ADC/DAC的利器I2C内部集成电路则是你管理板上各种传感器、EEPROM的优雅总线。F28335作为一款面向实时控制的高性能DSC其通信模块的设计绝非简单的功能堆砌而是深度考虑了工业应用的严苛要求例如高可靠性、实时性和配置灵活性。理解它们不仅是学会配置几个寄存器更是掌握如何让芯片在复杂的系统中高效、稳定地“说话”。对于正在使用或打算使用F28335的工程师、学生以及爱好者来说本文将带你越过数据手册的简单罗列直击三种接口的设计精髓、配置要点和实战中的“坑”。我们将从最根本的波特率计算、数据帧格式聊到提升效率的双缓冲与FIFO机制再到具体的寄存器配置步骤和代码片段。无论你是正在调试一块电机驱动板还是试图让控制器与多个传感器稳定通信这里的细节和经验都可能成为你解决问题的关键。2. 串行通信基础与F28335的架构总览在深入每个模块之前我们必须建立统一的认知框架。串行通信的本质是在一根或一组数据线上按时间顺序一位一位地传输数据。这与并行通信一次性传输8位、16位数据形成对比。串行的优势显而易见节省引脚资源、降低布线复杂度、成本更低、传输距离更远配合适当电平转换。但其代价是需要严格的时序同步和额外的控制信息如起始位、停止位。所有串行通信都需要解决三个核心问题速度波特率、数据格式帧结构和同步方式时钟。F28335的三种接口对此给出了不同的答案SCI (Asynchronous Serial Communication Interface): 异步通信。通信双方没有共享的时钟线依靠预先约定好的波特率进行时序同步。每帧数据包含起始位、数据位、可选的校验位和停止位。它简单、通用是“慢速、可靠、远距离”场景的代表如RS-232/485通信。SPI (Synchronous Peripheral Interface): 同步通信全双工。主从设备之间通过时钟线SPICLK严格同步。数据在时钟边沿被采样和输出。它通常需要四根线时钟、主机输出从机输入MOSI、主机输入从机输出MISO和从机片选SPISTE。SPI以高速、全双工、协议简单著称是连接板级外设的首选。I2C (Inter-Integrated Circuit): 同步通信半双工。它仅用两根线——串行数据线SDA和串行时钟线SCL——就实现了多主多从的总线架构。通过地址寻址和开漏输出配合上拉电阻实现“线与”功能支持仲裁和时钟拉伸非常适合连接多个低速外设。F28335为这三种接口提供了硬件级的支持这意味着你不需要用GPIO口去模拟时序大大减轻了CPU负担并提高了通信的精确性。其外设时钟系统是理解波特率配置的关键。SCI和SPI模块的运行依赖于低速外设时钟LSPCLK而I2C模块则直接使用系统时钟输出SYSCLKOUT。LSPCLK通常由SYSCLKOUT经过分频得到通过外设时钟控制寄存器PCLKCR配置。在计算目标波特率时你必须首先明确当前的LSPCLK或SYSCLKOUT频率这是所有配置的起点。注意在系统初始化时务必正确配置系统时钟和外设时钟。一个常见的错误是未使能相应外设的时钟例如忘记设置PCLKCR0寄存器中的SPIENCLK或SCIENCLK位导致无论怎么配置寄存器模块都无法工作。建议在初始化序列中将外设时钟使能作为第一步。3. SCI模块异步串口的深度配置与实战SCI是嵌入式工程师最熟悉的老朋友。F28335提供了三个独立的SCI模块SCI-A SCI-B SCI-C每个都可以被灵活地映射到特定的GPIO引脚上。3.1 波特率生成从公式到寄存器配置SCI的波特率由低速外设时钟LSPCLK和一个16位的波特率选择寄存器BRR共同决定。数据手册给出了两个公式当BRR ! 0时波特率 LSPCLK / [(BRR 1) * 8]当BRR 0时波特率 LSPCLK / 16这里的BRR是一个16位的值但它被拆分成两个8位寄存器进行设置SCIHBAUD高8位和SCILBAUD低8位。BRR (SCIHBAUD 8) | SCILBAUD。实操计算示例假设你的系统LSPCLK 37.5 MHz目标波特率是115200。首先尝试BRR ! 0的公式BRR LSPCLK / (波特率 * 8) - 1 37500000 / (115200 * 8) - 1 ≈ 40.64 - 1 39.64。取最接近的整数BRR 40。代入验证实际波特率37500000 / [(401)*8] 37500000 / 328 ≈ 114332 Hz。误差约为(115200-114332)/115200 ≈ 0.75%在异步通信可接受的误差范围内通常要求2%。因此需要设置SCIHBAUD 0SCILBAUD 40。如果计算出的BRR值非常大例如大于65535或者你希望获得极低的波特率可以考虑先降低LSPCLK的分频系数如果系统允许再进行计算。3.2 数据帧格式与通信控制寄存器详解配置好波特率接下来需要定义数据包的格式。这通过SCI通信控制寄存器SCICCR来完成SCICHAR (Bits 2-0): 选择数据位长度1-8位可选。PARITY ENABLE (Bit 5): 奇偶校验使能。PARITY (Bit 6): 奇偶校验类型0为奇校验1为偶校验。STOP BITS (Bit 7): 停止位数量0为1个停止位1为2个停止位。例如配置为8位数据位、无校验、1位停止位即最常见的8N1格式则写入SCICCR的值为0x07。SCI控制寄存器1SCICTL1和控制寄存器2SCICTL2则用于管理模块的使能和中断SCICTL1包含收发器使能位RXENA,TXENA、休眠模式位SLEEP等。上电后必须将RXENA和TXENA置1才能使能收发功能。SCICTL2主要控制发送中断TXINT ENA和接收中断RX/BK INT ENA的使能。3.3 双缓冲与FIFO模式提升吞吐量的关键这是F28335 SCI模块的高级特性对性能影响巨大。基本双缓冲这是SCI的标准模式。发送和接收各有一个移位寄存器Shift Register和一个缓冲寄存器Buffer Register。当CPU向发送缓冲寄存器SCITXBUF写入数据后硬件会自动将其加载到发送移位寄存器中并开始发送。在此期间CPU可以立即准备下一个数据写入SCITXBUF从而实现“背靠背”发送减少了CPU等待时间。接收过程类似。16级FIFO模式增强特性这是F28335的亮点。通过设置SCIFFTX、SCIFFRX和SCIFFCT寄存器可以启用深度为16的先进先出队列。这意味着你可以连续写入最多16个字节到发送FIFO或从接收FIFO中连续读取最多16个字节然后才需要产生一次中断服务CPU。这极大地减少了中断频率在高波特率或大数据量传输时能显著降低CPU开销让CPU有更多时间处理核心控制算法。配置FIFO的典型步骤通过SCIFFTX寄存器的SCIFFEN位使能FIFO模式。通过SCIFFTX和SCIFFRX寄存器设置发送和接收FIFO的中断触发级别例如当发送FIFO为空或接收FIFO中有8个数据时产生中断。可选通过SCIFFCT寄存器设置自动波特率检测或发送延迟。实操心得在电机控制等实时性要求极高的应用中我强烈建议启用FIFO模式。将接收FIFO中断触发级别设置为1即收到1个字节就中断可以保证响应及时性而将发送FIFO中断触发级别设置为较低值例如为空时中断可以在中断服务程序中一次性填充多个数据平衡了实时性和中断效率。避免在每次发送一个字节时都产生中断那会浪费大量CPU周期。3.4 数据收发流程与状态查询数据收发可以通过查询或中断两种方式驱动。查询方式发送while (SciaRegs.SCICTL2.bit.TXRDY ! 1) {} // 等待发送缓冲器就绪 SciaRegs.SCITXBUF myData; // 写入数据启动发送查询方式接收if (SciaRegs.SCIRXST.bit.RXRDY 1) { // 检查是否有数据收到 receivedData SciaRegs.SCIRXBUF.all; // 读取数据 // 同时错误标志位如FE, OE, PE也会被更新读取SCIRXST寄存器可获取 }中断方式需要配置PIE外设中断扩展模块将SCI的接收或发送中断向量映射到具体的CPU中断并在中断服务程序ISR中处理数据。结合FIFO中断服务程序应一次性读取FIFO中所有可用数据。错误处理SCI硬件会自动检测多种错误状态体现在SCIRXST寄存器中FE (Framing Error)帧错误未检测到有效的停止位。通常由波特率不匹配或线路干扰引起。OE (Overrun Error)溢出错误新数据覆盖了尚未被读取的旧数据。说明CPU处理速度跟不上接收速度需要优化代码或启用FIFO。PE (Parity Error)奇偶校验错误。BRKDT (Break Detect)检测到线路中断Break条件。在中断服务程序中应优先检查这些错误标志并进行相应处理如清空缓冲区、重发、上报错误等然后再处理有效数据。4. SPI模块高速同步通信的配置精髓SPI是一种高速、全双工的同步通信接口在F28335上以SPI-A模块的形式存在。它的核心思想是主从设备在同一个时钟SPICLK的节拍下交换数据。4.1 主从模式与引脚功能SPI通信必须有一个主机Master和一个或多个从机Slave。F28335的SPI模块可通过配置SPICTL寄存器的MASTER/SLAVE位来设定模式。主机模式产生时钟信号SPICLK控制通信的启动和结束。SPISIMO是主机输出线SPISOMI是主机输入线。从机模式接收主机提供的时钟。SPISIMO变为从机输入线SPISOMI变为从机输出线。SPISTE引脚通常用作从机片选信号低电平有效。引脚复用SPI的四个引脚SPISIMO SPISOMI SPICLK SPISTE与GPIO复用。在使用前必须通过GPAMUX1或GPBMUX1等寄存器将相应引脚配置为SPI功能而非普通的GPIO。4.2 时钟极性与相位SPI的四种模式这是SPI配置中最容易混淆也最关键的部分。通信双方必须严格匹配时钟极性CPOL和时钟相位CPHA它们共同定义了数据采样和驱动的时钟边沿。在F28335中通过SPICCR.6CLOCK POLARITY和SPICTL.3CLOCK PHASE位控制。模式CPOL (SPICCR.6)CPHA (SPICTL.3)时钟空闲状态数据采样边沿数据驱动边沿000低电平上升沿下降沿101低电平下降沿上升沿210高电平下降沿上升沿311高电平上升沿下降沿通俗理解CPOL0时钟空闲时为低。第一个边沿是上升沿。CPOL1时钟空闲时为高。第一个边沿是下降沿。CPHA0数据在第一个时钟边沿被采样。因此数据必须在时钟边沿到来之前即上一个边沿就准备好被驱动。CPHA1数据在第二个时钟边沿被采样。因此数据在第一个边沿被驱动在第二个边沿被采样。注意事项在连接外部SPI设备如Flash、ADC、传感器时第一件事就是查阅其数据手册确认它支持哪种SPI模式。配置错误将导致通信完全失败。一个快速验证的方法是使用逻辑分析仪抓取SPICLK和SPISIMO/MISO的波形对照上表检查时序关系。4.3 波特率计算与字符长度SPI的波特率计算公式与SCI不同当SPIBRR 3 到 127时波特率 LSPCLK / (SPIBRR 1)当SPIBRR 0, 1, 2时波特率 LSPCLK / 4SPIBRR是一个7位的寄存器SPIBRR.6-0因此可配置的分频值范围是0-127。例如LSPCLK 37.5 MHz目标波特率 10 MHz则SPIBRR LSPCLK / 波特率 - 1 3.75 - 1 2.75取整为3。实际波特率 37.5 / (31) 9.375 MHz。字符长度通过SPICCR.3-0位配置支持1到16位。这对于连接不同位宽的外设非常有用例如某些12位ADC可能要求16位SPI传输。4.4 数据收发机制与FIFO应用SPI的数据收发是同步且全双工的。写入SPITXBUF的数据会自动加载到SPIDAT寄存器并在SPICLK的驱动下从SPISIMO引脚移出。同时SPISOMI引脚上的数据也会被同步移入SPIDAT。一次传输完成后接收到的数据会被复制到SPIRXBUF中供CPU读取。关键状态位INT FLAG (SPISTS.6)中断标志。当一次数据传输完成时置位读取SPIRXBUF或向SPITXBUF写入新数据可清除它。OVERRUN FLAG (SPISTS.7)溢出标志。当SPIRXBUF中的数据尚未被读取而新的数据已经接收完成时置位。这是一个错误状态需要软件写1清除。FIFO模式与SCI类似SPI也支持16级深度的收发FIFO通过SPIFFTXSPIFFRXSPIFFCT寄存器配置。启用FIFO可以大幅提升大数据块传输的效率。例如在向SPI Flash写入一个4KB的扇区时你可以用DMA或循环填充的方式一次性向发送FIFO写入多个数据SPI模块会自动按序发送仅在FIFO快空时产生一次中断CPU介入补充数据即可。一个典型的SPI主机初始化代码框架void SPI_Init(void) { // 1. 配置GPIO引脚为SPI功能 (例如 GPIO16-19) EALLOW; GpioCtrlRegs.GPAMUX1.bit.GPIO16 1; // SPISIMOA GpioCtrlRegs.GPAMUX1.bit.GPIO17 1; // SPISOMIA GpioCtrlRegs.GPAMUX1.bit.GPIO18 1; // SPICLKA GpioCtrlRegs.GPAMUX1.bit.GPIO19 1; // SPISTEA (作为通用GPIO控制片选) GpioCtrlRegs.GPADIR.bit.GPIO19 1; // SPISTEA 配置为输出 EDIS; // 2. 复位并初始化SPI SpiaRegs.SPICCR.bit.SPISWRESET 0; // 将SPI置于复位状态 // 配置SPI参数 SpiaRegs.SPICCR.all 0x000F; // 16位数据上升沿输出下降沿输入(CPOL0, CPHA1? 需根据设备定) SpiaRegs.SPICTL.all 0x0006; // 主机模式使能发送禁用延时输出 SpiaRegs.SPIBRR 9; // 设置波特率 (LSPCLK37.5M时波特率37.5M/(91)3.75M) // 可选配置FIFO SpiaRegs.SPIFFTX.all 0xE040; // 使能FIFO复位TXFIFOTX中断级别16 SpiaRegs.SPIFFRX.all 0x2040; // 复位RXFIFORX中断级别0 SpiaRegs.SPIFFCT.all 0x00; // FIFO发送延迟为0 SpiaRegs.SPICCR.bit.SPISWRESET 1; // 使能SPI开始工作 }5. I2C模块多设备总线管理的艺术I2C是一种优雅但时序相对复杂的双线制串行总线。F28335的I2C模块完全兼容Philips I2C规范v2.1支持标准模式100kbps和快速模式400kbps。5.1 I2C总线协议基础与F28335实现I2C总线由SDA数据线和SCL时钟线组成均为开漏输出需要外接上拉电阻通常4.7kΩ。通信由主机发起包括起始条件S、从机地址、读写位、数据字节和停止条件P。F28335的I2C模块硬件自动处理了这些复杂的时序包括起始位、停止位的产生和检测、地址匹配、应答位ACK/NACK的发送与检查。关键寄存器I2CMDR (模式寄存器)配置I2C模块为主/从模式、自由数据格式、重复起始条件等。I2CSAR (从机地址寄存器)在主机模式下存放目标从机地址在从机模式下存放本机地址。I2CCNT (数据计数寄存器)设置在自动数据传输模式下要发送/接收的数据字节数。I2CDXR (数据发送寄存器)和I2CDRR (数据接收寄存器)用于读写数据。I2CSTR (状态寄存器)包含总线忙、仲裁丢失、无应答等关键状态标志。I2CCLKL/L和I2CCLKH/H (时钟低/高时间寄存器)用于精确配置SCL时钟频率。5.2 时钟配置与波特率计算I2C的时钟频率由SYSCLKOUT和I2CPSC预分频、I2CCLKL、I2CCLKH寄存器共同决定。计算相对复杂但TI提供了公式和参考代码。基本步骤是根据SYSCLKOUT和I2CPSC计算模块输入时钟I2C_CLK。根据目标SCL频率计算I2CCLKL和I2CCLKH的值它们分别定义了SCL低电平和高电平的持续时间以I2C_CLK周期为单位。一个常见的简化方法是使用TI的库函数或参考其示例代码中的配置。例如对于SYSCLKOUT150MHz要产生400kHz的快速模式时钟配置值可能为I2CPSC7I2CCLKL0x0FI2CCLKH0x0F。5.3 主从模式操作与数据传输流程主机发送器模式流程配置I2CMDR为主机模式、发送模式。将目标从机地址写入I2CSAR。将要发送的第一个数据字节写入I2CDXR。设置I2CMDR中的起始条件位STT和停止条件位STP如果是最后一个字节。模块自动发送起始条件、从机地址写、数据并检查应答。等待I2CSTR中的ICXRDY发送寄存器就绪标志置位写入下一个数据。重复直到所有数据发送完毕。最后等待I2CSTR中的STP位被清除表示停止条件已发送完成。主机接收器模式流程与发送类似但需要配置为接收模式并在发送从机地址读后通过读取I2CDRR来获取数据。注意主机在接收最后一个字节前需要发送一个非应答NACK。从机模式配置I2CSAR为本机地址并使能从机模式。当总线上的地址与本机地址匹配时硬件会自动响应并通过中断或轮询方式处理数据收发。5.4 FIFO与中断应用I2C模块也包含16×16位的收发FIFO通过I2CFFTX和I2CFFRX寄存器配置。在主机模式下使用FIFO可以简化大数据量传输的编程。你可以预先将多个要发送的数据写入发送FIFO或者设置好接收FIFO的中断级别让硬件在收到足够数据后再通知CPU。I2C的中断事件非常丰富包括发送就绪、接收就绪、寄存器访问就绪、无应答、仲裁丢失、停止条件检测、被寻址为从机等。合理配置I2CIER中断使能寄存器并编写高效的中断服务程序是构建稳定I2C系统的关键。避坑指南I2C总线最常见的两个问题是仲裁丢失和无应答。仲裁丢失发生在多主机同时发起传输时F28335硬件会自动处理将本机转为从机并产生中断你需要在中断中释放总线并重试。无应答NACK通常表示从机地址错误、从机设备不存在或忙需要在状态寄存器中检查NACK标志并做超时重发或错误处理。务必在每次传输前后检查I2CSTR寄存器的状态。6. GPIO多路复用器通信引脚配置的枢纽F28335拥有多达88个GPIO引脚其中大部分都与多种外设功能复用。SCI、SPI、I2C的引脚都不是固定的需要通过GPIO多路复用器MUX进行映射。这是配置通信接口时必不可少且容易出错的一步。6.1 复用原理与配置寄存器每个GPIO引脚的功能由三组寄存器共同决定GPxMUX1/GPxMUX2 (功能选择寄存器)决定引脚是作为普通GPIO还是外设功能。每2个bit控制一个引脚例如GPAMUX1.bit.GPIO0为00时是GPIO为01时是EPWM1A为10时是保留为11时是另一个外设具体见数据手册表4-16。GPxDIR (方向寄存器)当引脚配置为GPIO时此寄存器决定其输入/输出方向。GPxQSEL1/GPxQSEL2 (输入限定选择寄存器)对于输入信号无论是GPIO输入还是外设输入可以配置输入同步或采样滤波以消除毛刺。这对于噪声环境下的通信引脚如SCI的RX I2C的SDA/SCL稳定性至关重要。以配置GPIO28为SCIRXDASCI-A接收为例EALLOW; // 解除寄存器保护 // 查看表4-16 GPIO28的PER1功能是SCIRXDA对应GPAMUX2.bit.GPIO28 01 GpioCtrlRegs.GPAMUX2.bit.GPIO28 1; // 01b 选择SCIRXDA功能 // 对于输入引脚通常需要配置输入限定。假设需要6个采样周期的滤波 GpioCtrlRegs.GPAQSEL2.bit.GPIO28 2; // 10b 6个采样周期限定 // 设置采样周期与同组其他引脚共享 GpioCtrlRegs.GPACTRL.bit.QUALPRD3 0xFF; // 采样周期 255 * SYSCLKOUT EDIS; // 恢复寄存器保护6.2 输入信号限定抗干扰的防火墙在工业环境中通信线路上容易引入噪声毛刺。F28335的输入限定功能就像一个数字滤波器。它通过连续采样输入信号多次3次或6次只有当所有采样值一致时才认为输入有效发生了变化。这能有效滤除窄脉冲干扰。GPxQSELn 0,0仅同步到SYSCLKOUT默认。GPxQSELn 0,1 或 1,0使用采样窗口限定3采样或6采样模式。GPxQSELn 1,1不同步用于某些内部已同步的外设。采样窗口的周期由GPxCTRL寄存器中的QUALPRD位域设置它指定了采样间隔是SYSCLKOUT的多少倍。对于低速通信如I2C 100k可以设置较长的采样周期来增强滤波效果对于高速通信如SPI 10M则需要较短的周期甚至禁用限定以免滤除有效信号。7. 常见问题排查与调试技巧实录即使理解了所有原理和配置在实际调试中依然会遇到各种问题。以下是我在多年项目中总结的一些典型问题及其排查思路。7.1 通信完全无反应检查清单时钟与电源确认芯片核心电压、IO电压正常系统时钟OSC/PLL已正确配置并运行。用示波器测量LSPCLK或相关时钟引脚是否有输出。外设时钟使能检查PCLKCR0/PCLKCR1寄存器确保对应外设SCI/SPI/I2C的时钟使能位已置1。这是最容易被忽略的一步引脚复用配置确认GPIO MUX寄存器已正确配置为外设功能而非GPIO。使用CCS的寄存器查看窗口或调试器内存查看功能仔细核对GPxMUX和GPxDIR的值。软件复位每个外设模块通常有一个软件复位位如SCI的SW RESET SPI的SPISWRESET。确保在初始化序列的最后将该位置1以释放模块。基本使能位检查模块的基本使能位如SCI的RXENA和TXENA SPI的SPI INT ENA主模式等。7.2 能发送但不能接收或接收数据错误对于SCI波特率不匹配这是最常见的原因。双方面计算并核对波特率寄存器值。使用示波器测量实际发送的位宽度计算实际波特率。误差应小于2%理想小于1%。帧格式不一致检查数据位、停止位、校验位设置是否与对方设备完全相同。硬件流控如果使用了RTS/CTS硬件流控检查流控引脚的电平和配置。中断与FIFO如果使用中断检查中断向量表PIEVECT配置是否正确中断服务程序是否清除了中断标志。如果使用FIFO检查FIFO使能位和中断级别设置。对于SPI时钟模式CPOL/CPHA错误这是SPI通信失败的头号杀手。务必用逻辑分析仪抓取SPICLK、MOSI、MISO的波形与从设备数据手册的时序图严格比对。片选信号SPISTE确认片选信号的极性通常低有效和时序是在数据帧开始前拉低结束后拉高正确。数据位顺序有些设备是MSB先行有些是LSB先行。检查SPI模块的数据移位方向设置通常有相关控制位。对于I2C上拉电阻确认SDA和SCL线上有合适的上拉电阻通常4.7kΩ-10kΩ取决于总线电容和速度。没有上拉电阻总线将无法拉高。从机地址7位地址还是10位地址地址左移后最低位是R/W位。确认写入I2CSAR的地址值正确。总线锁死如果从机意外拉低SDA线会导致总线锁死。一种恢复方法是尝试向SCL线发送多个时钟脉冲通过临时将SCL配置为GPIO输出并翻转直到SDA被释放。F28335的I2C模块在某些错误状态下也可能需要软件复位。7.3 使用调试工具代码调试器CCS充分利用CCS的实时寄存器查看、内存查看和变量观察功能。单步执行初始化代码确认每个关键寄存器的值都被正确写入。逻辑分析仪这是调试串行通信的终极利器。它能直观地显示数据线上的每一位波形、时间戳并通常支持协议分析直接解析出SCI、SPI、I2C的数据包。没有逻辑分析仪调试复杂的通信问题如同盲人摸象。示波器用于测量时钟频率、检查信号质量过冲、振铃、观察起始/停止条件等。串口调试助手对于SCI一个简单的USB转TTL模块配合电脑上的串口调试助手是验证发送功能最快捷的方法。调试是一个系统性工程从电源、时钟、引脚等硬件基础到寄存器配置、软件流程等软件逻辑需要逐层排查。养成先配置后使能、先验证基础功能再测试高级特性的习惯能帮你节省大量时间。每次修改配置后不妨将关键寄存器的值打印出来或通过CCS查看与你的预期进行对比这往往是发现配置错误的最快途径。