news 2026/4/30 23:35:08

手把手教你配置TMS320F28335的SCI串口(从寄存器到代码实战)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教你配置TMS320F28335的SCI串口(从寄存器到代码实战)

深入解析TMS320F28335的SCI串口开发:从寄存器配置到代码实战

在嵌入式系统开发中,串口通信是最基础也最关键的通信方式之一。对于使用德州仪器(TI)TMS320F28335数字信号处理器的开发者来说,掌握其串行通信接口(SCI)的底层配置是必备技能。本文将带你从寄存器级别深入理解SCI模块的工作原理,并通过实际代码演示如何配置和使用SCI-A进行数据收发。

1. SCI模块基础与硬件连接

TMS320F28335提供了三个独立的SCI模块(SCI-A、SCI-B、SCI-C),每个模块都可以实现全双工异步通信。在实际项目中,SCI常用于:

  • 与上位机(如PC)通信
  • 连接各种串口设备(如GPS模块、蓝牙模块)
  • 系统调试信息输出

硬件连接注意事项

  • SCI模块使用GPIO28(SCITXDA)和GPIO29(SCIRXDA)作为默认引脚
  • 如果使用其他引脚,需要通过GPIO多路复用器配置
  • 典型连接需要加入电平转换芯片(如MAX3232)实现TTL与RS232电平转换

提示:在开发初期,可以使用USB转TTL模块直接连接开发板的SCI引脚,简化硬件连接

2. 关键寄存器详解与配置

2.1 通信控制寄存器(SCICCR)

SCICCR寄存器(地址0x7050)控制通信的基本参数:

位域名称功能描述典型值
15-9保留保留位0
8STOP BITS停止位数量(0=1位,1=2位)0
7EVEN/ODD PARITY奇偶校验选择0
6PARITY ENABLE奇偶校验使能0
5LOOPBACK ENA回环模式使能0
4ADDR/IDLE MODE通信协议选择0
3-0SCI CHAR数据长度(1-8对应4-11位)7(8位)

配置示例:

SciaRegs.SCICCR.all = 0x0007; // 1停止位,无校验,8位数据

2.2 波特率设置寄存器(SCIHBAUD/SCILBAUD)

波特率计算公式:

BRR = LSPCLK / (SCI异步波特率 × 8) - 1

其中:

  • LSPCLK是低速外设时钟(通常为SYSCLKOUT/4)
  • BRR是16位值,高8位存入SCIHBAUD,低8位存入SCILBAUD

常见波特率配置表:

波特率LSPCLK=37.5MHz时的BRR值SCIHBAUDSCILBAUD
96004870x010xE7
192002430x000xF3
384001210x000x79
115200400x000x28

配置代码示例:

Uint16 scibaud = 37500000/(8*baud) - 1; SciaRegs.SCIHBAUD = scibaud >> 8; SciaRegs.SCILBAUD = scibaud & 0xFF;

3. 完整SCI初始化流程

3.1 时钟与GPIO配置

EALLOW; // 允许写入受保护的寄存器 // 使能SCI-A时钟 SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1; // 配置GPIO28和GPIO29为SCI功能 GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; EDIS; // 禁止写入受保护的寄存器

3.2 FIFO配置

F28335的SCI模块包含16级FIFO,可以显著提高通信效率:

// 发送FIFO配置:使能FIFO,TX FIFO深度为16,清除中断标志 SciaRegs.SCIFFTX.all = 0xE040; // 接收FIFO配置:使能FIFO,RX FIFO深度为16,清除中断标志 SciaRegs.SCIFFRX.all = 0x204F; // FIFO控制寄存器:禁用自动波特率检测 SciaRegs.SCIFFCT.all = 0x00;

3.3 完整初始化函数

void SCI_Init(Uint32 baud) { // 1. 计算波特率 Uint16 scibaud = 37500000/(8*baud) - 1; // 2. 配置GPIO和时钟 EALLOW; SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; EDIS; // 3. 复位SCI模块 SciaRegs.SCICTL1.all = 0x0000; // 4. 配置通信参数 SciaRegs.SCICCR.all = 0x0007; // 8位数据,无校验,1停止位 SciaRegs.SCIHBAUD = scibaud >> 8; SciaRegs.SCILBAUD = scibaud & 0xFF; // 5. 配置FIFO SciaRegs.SCIFFTX.all = 0xE040; SciaRegs.SCIFFRX.all = 0x204F; SciaRegs.SCIFFCT.all = 0x00; // 6. 使能SCI模块 SciaRegs.SCICTL1.all = 0x0023; // 使能TX和RX SciaRegs.SCICTL2.bit.TXINTENA = 1; // 使能发送中断 SciaRegs.SCICTL2.bit.RXBKINTENA = 1; // 使能接收中断 }

4. 数据收发实现

4.1 查询方式发送数据

void SCI_SendChar(char c) { // 等待发送缓冲区空闲 while(SciaRegs.SCIFFTX.bit.TXFFST >= 16); // 写入发送缓冲区 SciaRegs.SCITXBUF = c; } void SCI_SendString(const char *str) { while(*str != '\0') { SCI_SendChar(*str++); } }

4.2 中断方式接收数据

中断服务程序示例:

__interrupt void SCI_RX_ISR(void) { char receivedChar; // 检查是否有接收错误 if(SciaRegs.SCIRXST.bit.RXERROR) { // 处理错误... SciaRegs.SCIRXST.bit.RXERROR = 0; } // 读取接收到的数据 receivedChar = SciaRegs.SCIRXBUF.all; // 处理数据... // 清除中断标志 SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1; PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; }

中断初始化代码:

// 配置PIE中断 EALLOW; PieVectTable.SCIRXINTA = &SCI_RX_ISR; EDIS; // 使能PIE组9中断(SCI-A) PieCtrlRegs.PIEIER9.bit.INTx1 = 1; // 使能CPU中断 IER |= M_INT9; // 全局中断使能 EINT;

5. 常见问题与调试技巧

5.1 波特率不匹配

症状:接收到的数据乱码解决方法

  1. 确认系统时钟配置正确
  2. 检查波特率计算公式中的LSPCLK值
  3. 使用示波器测量实际波特率

5.2 数据发送不成功

检查步骤

  1. 确认SCITXDA引脚配置正确
  2. 检查SCICTL1.bit.TXENA是否置1
  3. 使用回环模式测试(SCICCR.bit.LOOPBACKENA=1)

5.3 FIFO工作异常

典型问题

  • FIFO中断不触发:检查SCIFFTX和SCIFFRX的中断使能位
  • FIFO数据丢失:确保及时读取接收FIFO数据

调试建议:在初始化完成后,先发送一个已知字符串(如"HELLO"),使用逻辑分析仪或串口调试助手验证通信是否正常

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 23:33:27

终极Total War模组编辑器:10个技巧让你从新手变专家!

终极Total War模组编辑器:10个技巧让你从新手变专家! 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt6 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项目地址: h…

作者头像 李华
网站建设 2026/4/30 23:29:41

go:Template Method Pattern

项目结构:/* # 版权所有 2026 ©涂聚文有限公司™ # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Template Method Pattern 模板方法模式 # Author : geovindu,Geovin Du 涂聚文. # IDE …

作者头像 李华
网站建设 2026/4/30 23:27:31

避坑指南:为什么你的OceanBase Docker容器一重启就挂?聊聊daemon.pid文件与容器状态管理

深入解析OceanBase容器化部署中的状态管理陷阱与设计哲学 当我们将OceanBase这样的分布式数据库塞进Docker容器时,本质上是在进行一场微妙的平衡游戏——容器的无状态理想与数据库的有状态现实之间的拉锯战。最近遇到的一个典型案例:原本运行良好的Ocean…

作者头像 李华
网站建设 2026/4/30 23:26:31

从手动操作到智能编程:pycatia如何重塑企业级CAD自动化工作流

从手动操作到智能编程:pycatia如何重塑企业级CAD自动化工作流 【免费下载链接】pycatia python module for CATIA V5 automation 项目地址: https://gitcode.com/gh_mirrors/py/pycatia 在高端制造业数字化转型的浪潮中,企业面临着一个核心矛盾&a…

作者头像 李华
网站建设 2026/4/30 23:22:34

2026届最火的六大降重复率神器实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 当人工智能生成内容被广泛运用的当前时刻,把文本里的AI痕迹予以降低变成关键课题…

作者头像 李华
网站建设 2026/4/30 23:16:39

长安链开源训练营结营仪式报名!颁发证书 | 技术分享 | 现场抽奖

执梦前行,终抵繁星经过为期两个月的集中授课与二十天深耕实践的代码实训,长安链开源训练营圆满落下帷幕,所有课程作业及大作业提交通道已经关闭。训练营期间,学员们通过系统学习与深入实践,充分展现了对长安链技术的深…

作者头像 李华