STC32G12K128通讯奇偶校验出错问题请教 | 已解决
无校验时一切正常,不会出现丢帧或错误现象,只有在奇校验或偶校验才会出现void Begin_send(void)
{
unsigned char i;
b485Send = 1; //处于发送
for(i=0; i<sendCount; i++)
{
TX1_write2buff(TX1_Buffer);
}
b485Send = 0; //发送完后将485置于接收状态
COM1.RX_Cnt = 0; //清接收地址偏移寄存器
}
#ifdef UART1
void UART1_ISR_Handler (void) interrupt UART1_VECTOR
{
u8 Status;
bit Erchc;
if(RI)
{
RI = 0;
Erchc=0;
//--------USART LIN---------------
Status = USARTCR5;
if(Status & 0x02) //if LIN header is detected
{
B_ULinRX1_Flag = 1;
}
if(Status & 0xc0) //if LIN break is detected / LIN header error is detected
{
COM1.RX_Cnt = 0;
}
USARTCR5 &= ~0xcb; //Clear flag
//--------------------------------
if(Tx_Yan!=0)
{
ACC = SBUF;
if (Tx_Yan == 1)
Chc = ~P; //奇校验
else if (Tx_Yan == 2)
Chc = P; //偶校验
if(Chc!=RB8)Erchc=1;
}
if(Erchc==0)
{
if(COM1.RX_Cnt >= COM_RX1_Lenth) COM1.RX_Cnt = 0;
RX1_Buffer = SBUF;
COM1.RX_TimeOut = TimeOutSet1;
}
else COM1.RX_Cnt = 0;
}
if(TI)
{
TI = 0;
COM1.B_TX_busy = 0; //使用阻塞方式发送直接清除繁忙标志
}
}
#endif
/********************* UART1 函数 ************************/
#ifdef UART1
void TX1_write2buff(u8 dat) //串口1发送函数
{
// #if(UART_QUEUE_MODE == 1)
// TX1_Buffer = dat; //装发送缓冲,使用队列式数据发送,一次性发送数据长度不要超过缓冲区大小(COM_TXn_Lenth)
// if(++COM1.TX_write >= COM_TX1_Lenth) COM1.TX_write = 0;
// if(COM1.B_TX_busy == 0) //空闲
// {
//
//
// if(Tx_Yan!=0)
// {
// ACC = dat;
// if (Tx_Yan == 1)
// TB8 = P; //奇校验
// else if (Tx_Yan == 2)
// TB8 = ~P; //偶校验
// }
// COM1.B_TX_busy = 1; //标志忙
// TI = 1; //触发发送中断
// }
// #else
// //以下是阻塞方式发送方法
// SBUF = dat;
// COM1.B_TX_busy = 1; //标志忙
// while(COM1.B_TX_busy);
// #endif
COM1.B_TX_busy = 1; //标志发送忙
SBUF = dat;
if(Tx_Yan!=0)
{
ACC = dat;
if (Tx_Yan == 1)
TB8 = P; //奇校验
else if (Tx_Yan == 2)
TB8 = ~P; //偶校验
}
//发一个字节
while(COM1.B_TX_busy); //等待发送完成
}
本帖最后由 乘风飞扬 于 2023-12-26 11:52 编辑
STC32G支持硬件奇偶校验,不需要使用软件手动计算校验位
//串口1(模式3:可变波特率9位数据)
// USARTCR2 = 0x00; //禁止硬件产生奇偶校验
// USARTCR2 = 0x04; //使能硬件产生偶校验
USARTCR2 = 0x06; //使能硬件产生奇校验
SCON = 0xd0;
T2L = BRT;
T2H = BRT >> 8;
AUXR = 0x15;
乘风飞扬 发表于 2023-12-26 11:50
STC32G支持硬件奇偶校验,不需要使用软件手动计算校验位
接收也不需要么? 已经解决谢谢!
页:
[1]