This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28335: RS232通讯出现 parity error 和 frame error

Part Number: TMS320F28335

在已有rs485通讯(SCICGPIO62/63)时,增加rs232通讯(SCIAGPIO35/36,运行时SciaRegs.SCIRXBUF出现校验错误和帧错误。

通讯的设置完全照搬rs485通讯,增加SCIA的TX和RX中断:

PieCtrlRegs.PIEIER9.bit.INTx1 = 1;
PieCtrlRegs.PIEIER9.bit.INTx2 = 1;

其中RS232接收中断函数是:

interrupt void rs232_RxIsr(void) {
volatile Uint16 temp_2;

// receive data
do {
temp_2 = SciaRegs.SCIRXBUF.all;
comm_2.comm_ctrl_2.RxBuffer[comm_2.comm_ctrl_2.cur_rec_index++] =
(unsigned char) (temp_2 & 0x00FF);
} while (SciaRegs.SCIFFRX.bit.RXFFST != 0);

rs232_rec_delay_counter = 0;

// reset rigister
SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 1; // Clear Overflow flag
SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.bit.ACK9 = 1;
}

实际运行时,发现SciaRegs.SCIRXBUF中,SCIFFPE=1(parity error),SCIFFFE=1(frame error)

但是检查了设置,并没有发现设置错误。

寄存器设置:

SciaRegs.SCICCR.all = 0x0007; // 1 stop bit, no loopback 
// No Parity, 8 char bits

SciaRegs.SCIHBAUD = 0x0001; // 9600 baudrate @LSPCLK=37.5MHz
SciaRegs.SCILBAUD = 0x00E7;

ModbusPoll的设置也是1停止位,无校验,8字节,波特率9600

请问,为什么会产生parity error和frame error呢?

  • 这个和设置并没有直接的关系,

    parity error,说明FIFO最顶部的数据出现奇偶校验错误;

    frame error,说明FIFO最顶部的数据出现帧错误。

x 出现错误。请重试或与管理员联系。