本帖最后由 那就是你的 于 2022-5-15 17:46 编辑
双机通信,使用偶校验,发送端正常
发送设置:
void uart1_init(void)//8M
{
UART1_CR1=0x00;//TXD(PD5)设置为输出,RXD(PD6)为输入
UART1_CR2=0x00;
UART1_CR3=0x00;
UART1_BRR2 = 0x05;
UART1_BRR1 = 0x04; //115200波特率
UART1_CR2_TEN = 1; //允许发送
UART1_CR1_M=1;//发送9位数据,1个起始位,一个停止位
UART1_CR1_PCEN=1;//奇偶校验控制被使能。
//UART1_CR2_REN = 1; //允许接收
//UART1_CR2_RIEN = 1; //接收中断使能
}
接收端设置:
void uart1_init(void)//偶校验
{
UART1_CR1=0x00;//TXD(PD5)设置为输出,RXD(PD6)为输入
UART1_CR2=0x00;
UART1_CR3=0x00;
UART1_BRR2 = 0x05;
UART1_BRR1 = 0x04; //115200波特率
UART1_CR2_TEN = 1; //允许发送
UART1_CR2_REN = 1; //允许接收
UART1_CR2_RIEN = 1; //接收中断使能
UART1_CR1_M=1;//发送9位数据,1个起始位,一个停止位
UART1_CR1_PCEN=1;//奇偶校验控制被使能。
}
接收中断:(接收到的数据和发送的数据不一致)
#pragma vector = UART1_R_RXNE_vector
__interrupt void uart1rxd(void)
{
static unsigned char RI_num;
unsigned char RXD_data;
RXD_data=UART1_SR; //清除 PE 标志位
SBUF_dat[RI_num++]=UART1_DR; //读RXD_data时,就可以把RXNE标志清0
if(RI_num==code_num)
{
RXD_OK=1;
RI_num=0;
}
} |