C- UART缓冲区没有在PIC24F上升高标志



我正在使用RN42-XV蓝牙模块将字符从计算机发送到PIC24F。该模块已正确连接/配对,并且发送的字符也正确(使用示波器)。

这就是初始化的方式:

void initUART(){
   //Peripheral Pin Mapping
   RPINR19bits.U2RXR = 5; //pin 14 UART Receive
   RPOR5bits.RP11R = 3; //pin 17 UART Transmit
   //Configuring the UART
   U2BRG = BRGVAL;
   U2MODEbits.UARTEN = 1;
   U2MODEbits.UEN = 0;
   U2MODEbits.PDSEL = 0;// 8 bit no parity
   U2MODEbits.STSEL = 0; // 1 stop bit
   U2STAbits.UTXEN = 0;
   U2STAbits.URXISEL = 0;
   //Putting the UART interrupt flag down.
   IFS1bits.U2RXIF = 0;
 }

我还使用此功能来获取缓冲区的内容:

int waitForChar(){
   int receivedChar;
   // Use the UART RX interrupt flag to wait until we recieve a character.
   while(IFS1bits.U2RXIF == 1){
      // Clear the UART RX interrupt flag to we can detect the reception
      // of another character.
      IFS1bits.U2RXIF = 0;
      // U2RXREG stores the last character received by the UART. Read this
      // value into a local variable before processing.
      receivedChar = U2RXREG;
   }
return receivedChar;
}

问题在于,该程序永远不会进入函数Waitforchar()内部的WARE循环,因为硬件永远不会升级UART中断标志。我尝试了不同的PIC24F,但都遇到了同一问题。

该函数类型被声明为void,因此不会返回任何内容。如果您尝试分配其返回值,则应获取编译器警告。此外,它不会等待char。它是"非阻止"的,它无论如何都会返回,但是您需要一个返回值才能告诉您它是否具有字符或是否不做。如果您要它等待并返回char,则可能像这样

int waitForChar(){                           // declare a return type
    int receivedChar;
    while(IFS1bits.U2RXIF == 0);             // wait
    receivedChar = U2RXREG;
    IFS1bits.U2RXIF = 0;                     // clear status
    return receivedChar;
}

我注意到了几件事:

  1. 您在完全配置之前启用模块(uarten)。

  2. u2sta.urxda不应该用作测试的标志吗?

  3. 您没有在两个寄存器中配置几个位。没关系,如果您绝对确定启动状态是您喜欢的。

UART初始化代码缺少此行:

 AD1PCFG = 0xFFFF

ADC标志优先于UART。该行禁用它们。

相关内容

  • 没有找到相关文章

最新更新