C2000 SCI -异步串口模块学习笔记 1. SCI 是什么SCI 全称Serial Communications Interface可以理解为 TI C2000 里的UART 串口模块。STM32USART / UART TI C2000SCI常见引脚SCITXD发送 SCIRXD接收2. SCI 系统框图3. SCI 常用功能功能说明波特率配置9600、115200 等数据格式配置数据位、校验位、停止位中断接收中断、发送中断FIFO缓冲多个字节减少中断次数错误检测校验错误、溢出、帧错误、Break最常见串口格式1152008N1含义115200 波特率 8 位数据 无校验 1 个停止位4. 关键寄存器寄存器作用SCICCR配置数据格式SCICTL1使能发送、接收、SCI 复位SCICTL2发送 / 接收中断控制SCIHBAUD / SCILBAUD配置波特率SCIRXST接收状态和错误标志SCIRXBUF接收数据SCITXBUF发送数据SCIFFTX / SCIFFRXFIFO 控制5. SCICCR串口格式配置SCICCR决定 SCI 一帧数据长什么样。字段作用SCICHAR数据位长度STOPBITS停止位数量PARITYENA是否使能校验PARITY奇校验 / 偶校验LOOPBKENA内部回环测试ADDRIDLE_MODE空闲线模式 / 地址位模式常见8N1配置// 数据位01位12位23位34位45位56位67位78位 SciaRegs.SCICCR.bit.SCICHAR 7; // 停止位01个停止位12个停止位 SciaRegs.SCICCR.bit.STOPBITS 0; // 校验使能0无校验1使能校验 SciaRegs.SCICCR.bit.PARITYENA 0; // 校验类型0奇校验1偶校验只有 PARITYENA1 时有效 SciaRegs.SCICCR.bit.PARITY 0; // 回环模式0关闭回环1开启内部回环测试 SciaRegs.SCICCR.bit.LOOPBKENA 0; // 多处理器模式0空闲线模式1地址位模式 SciaRegs.SCICCR.bit.ADDRIDLE_MODE 0;更常见的简写SciaRegs.SCICCR.all 0x0007; // 8位数据1停止位无校验6. 波特率配置SCI 波特率由SCIHBAUD SCILBAUD共同决定。它们组成波特率分频值BRR SCIHBAUD:SCILBAUD常用公式BaudRate LSPCLK / ((BRR 1) × 8)反推BRR LSPCLK / (BaudRate × 8) - 1注意SCI 用的是 LSPCLK不是 SYSCLKOUT。7. GPIO 复用SCI 要从引脚输出必须配置 GPIO MUX。例如EALLOW; GpioCtrlRegs.GPAMUX2.bit.GPIO28 1; // GPIO28 SCIRXDA GpioCtrlRegs.GPAMUX2.bit.GPIO29 1; // GPIO29 SCITXDA EDIS;具体 GPIO 对应关系要查芯片的 GPIO MUX 表。8. RX 异步输入SCI 的 RX 引脚建议配置成异步输入EALLOW; GpioCtrlRegs.GPAQSEL2.bit.GPIO28 3; // 11b异步输入 EDIS;常见输入模式配置含义00同步输入013 次采样滤波106 次采样滤波11异步输入简单记同步输入跟系统时钟对齐 3/6 次采样过滤毛刺 异步输入直接送外设SCI RX 是异步串口信号所以通常用异步输入。9. 上拉配置RX 空闲状态是高电平可以使能内部上拉EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO28 0; // 0使能上拉 EDIS;注意PUD 0使能上拉 PUD 1关闭上拉10. 发送和接收发送一个字节while(SciaRegs.SCICTL2.bit.TXRDY 0); SciaRegs.SCITXBUF data;接收一个字节while(SciaRegs.SCIRXST.bit.RXRDY 0); data SciaRegs.SCIRXBUF.all 0x00FF;注意SCI 有效数据通常在低 8 位。11. 中断接收和 FIFO 接收SCI 接收常见两种方式方式触发条件特点普通 RX 中断收到 1 个字节简单但中断频繁FIFO RX 中断FIFO 达到设定数量效率更高适合连续数据普通 RX 中断流程收到 1 字节 ↓ 进中断 ↓ 读取 SCIRXBUF核心配置SciaRegs.SCICTL2.bit.RXBKINTENA 1; // 使能 RX / Break 中断中断里读取data SciaRegs.SCIRXBUF.all 0x00FF; PieCtrlRegs.PIEACK.all PIEACK_GROUP9;简单记普通 RX 中断 来 1 个字节中断 1 次FIFO RX 中断流程数据先进入 RX FIFO ↓ 达到阈值 ↓ 进中断 ↓ 一次读出多个字节核心配置SciaRegs.SCIFFRX.bit.RXFFIENA 1; // 使能 RX FIFO 中断 SciaRegs.SCIFFRX.bit.RXFFIL 4; // FIFO 达到 4 字节触发中断里读取while(SciaRegs.SCIFFRX.bit.RXFFST ! 0) { data SciaRegs.SCIRXBUF.all 0x00FF; } SciaRegs.SCIFFRX.bit.RXFFINTCLR 1; PieCtrlRegs.PIEACK.all PIEACK_GROUP9;简单记FIFO RX 中断 攒够几个字节再中断 1 次12. FIFO 是什么FIFO 是串口内部缓冲区。不用 FIFO收到 1 个字节就要处理 使用 FIFO缓存多个字节后再处理常用寄存器SCIFFTX发送 FIFO SCIFFRX接收 FIFO SCIFFCTFIFO 控制13. 错误标志标志含义PE校验错误OE溢出错误FE帧错误BRKDTBreak 检测RX 长时间低电平普通串口通信主要关注RXRDY收到数据 TXRDY可以发送 OE / FE接收异常14. 初始化流程1. 配置 GPIO MUX 2. RX 设置为异步输入 3. 配置上拉 4. 配置 SCICCR 数据格式 5. 配置 SCIHBAUD / SCILBAUD 波特率 6. 使能 TX / RX 7. 配置 FIFO 8. 配置中断 9. 释放 SCI 复位15. 总结SCI C2000 的 UART 串口模块配置重点GPIO MUX RX 异步输入 SCICCR 数据格式 SCIHBAUD / SCILBAUD 波特率 SCITXBUF / SCIRXBUF 收发数据 SCIFFTX / SCIFFRX FIFO