0

我的 PIC24F16KA102 有问题。我正在使用 PicKit2 UART 工具与 PC 进行通信。所以,这些是我的日常:

UART1初始化:

void UART1Init(int BAUDRATE)
{
    U1BRG = BAUDRATE;           

    U1MODEbits.UARTEN = 1;      // UART2 is Enabled
    U1MODEbits.USIDL = 0;       // Continue operation at Idlestate
    U1MODEbits.IREN = 0;        // IrDA En/Decoder is disabled
    U1MODEbits.RTSMD = 0;       // flow control mode
    U1MODEbits.UEN = 0b10;      // UTX, RTX, U2CTS, U2RTS are enable and on use.
    U1MODEbits.WAKE = 1;        // Wake-up on start bit is enabled
    U1MODEbits.LPBACK = 0;      // Loop-back is disabled
    U1MODEbits.ABAUD = 0;       // auto baud is disabled
    U1MODEbits.RXINV = 0;       // No RX inversion
    U1MODEbits.BRGH = 0;        // low boud rate
    U1MODEbits.PDSEL = 0b00;    // 8bit no parity
    U1MODEbits.STSEL = 1;       // one stop bit 

    U1STAbits.UTXISEL1 = 0b00;      
    U1STAbits.UTXBRK = 0;       // sync break tx is disabled
    U1STAbits.UTXEN = 1;        //transmit  is enabled

    U1MODEbits.RXINV = 1;  //Invert RX and TX Idle state
    U1STAbits.UTXINV = 1;
}

void UART1putChar(unsigned char ch)
{
    while(U1STAbits.UTXBF == 1);    //wait till transmit buffer is not full anymore
        U1TXREG = (ch);
}

char UART1GetChar()
{
   char Temp;
   //wait for buffer to fill up, wait for interrupt
   while(IFS0bits.U1RXIF == 0);
   Temp = U1RXREG;
   //reset interrupt
   IFS0bits.U1RXIF = 0;
   //return my received byte
   return Temp;
}

和主要功能:

int main(void) {
    init();
    TRISB=0x0004;
    UART1Init(25);
    while(1)
    {
        UART1putChar(UART1GetChar());
    }
    return 0;
}

当我使用 PicKit2 UART 工具发送和接收字符时,我得到的是:

hekllo

TX:  68 65 6B 6C 6C 6F 
RX:  85 
TX:  68 65 6B 6C 6C 6F 
RX:  85 
TX:  68 65 6B 6C 6C 6F 
RX:  88 
TX:  68 65 6B 6C 6C 6F 
RX:  85 
TX:  68 65 6B 6C 6C 6F 
RX:  63 0C 
TX:  68 65 6B 6C 6C 6F 
RX:  88 
TX:  68 65 6B 6C 6C 6F 
RX:  88 
TX:  68 65 6B 6C 6C 6F 
RX:  61 0C 

当我发送“1”字符时,我从来没有收到“1”,但有时我会收到“//回车?”。

所以,我的问题是:我应该从哪里开始调试?什么可能出错?

4

0 回答 0