设计中使用串口一(RF3串口发送,RF2串口接收),始终不能通讯,
寄存器状态显示:
U1STA == 0x0114即发送寄存器空、接收空闲、帧错误
IFS0 ==0X0000未产生接收中断(接收空闲当然没有中断产生啦)
IO端口初始化:TRISF=0x0044; 不管RF23通讯口设为输入、输出都未产生影响
是什么地方未正确配置?
void InitUart1(void) //串口1初始化
{
U1MODEbits.STSEL = 0;// 1个停止位
U1MODEbits.PDSEL = 0;// 8位无校验,N , 8, 1
U1MODEbits.RTSMD = 0;// 引脚处于单工模式
U1MODEbits.ABAUD = 0;// 自动波特率禁止
U1MODEbits.BRGH = 0;// 标准模式
U1MODEbits.LPBACK= 0;// 禁止环回模式
U1MODEbits.UEN = 0;//使能并使用UxTX和UxRX引脚;UxCTS和UxRTS/BCLK引脚由端口锁存器控制
U1BRG = BRGVAL;//BRG=((FCY/目标波特率)/16)-1=(8000000/9600/16)-1=51
IPC2bits.U1RXIP=0b110;//6级中断优先
IEC0bits.U1RXIE=1;//UART1接收器中断允许位
U1STAbits.URXISEL=0;
//U1STAbits.URXISEL1 = 0;// 接收一个字符后中断
//U1STAbits.URXISEL0 = 0;//
U1STAbits.UTXEN = 1;// 允许发送
U1MODEbits.UARTEN = 1;// 使能UART
EN485 = 0;//#define EN485 LATFbits.LATF5 //485收发控制
}
//void __attribute__((__interrupt__,no_auto_psv)) _U1RXInterrupt()
void __attribute__((interrupt, auto_psv)) _U1RXInterrupt(void)//串口1接收中断
{
IFS0bits.U1RXIF=0;
rc_buff[rclenth] = U1RXREG;
rclenth+=1;
if(rclenth>7)//数组满
{rclenth=0;//数组下标清零
Comm_Receive_OK=1;//接收完成
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
(注:电路是直接从原来18F4520应用中拷贝的,然后重新做的实验板,原来的电路是异步半双工,在18F中用是正常的。)
一周热门 更多>