Выпуск UART RX (PIC24)
У меня проблема с моим PIC24F16KA102. Я использую PicTit2 UART Tool для связи с ПК. Итак, это мои процедуры:
UART1Init:
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;
}
Когда я использую PicTit2 UART Tool для отправки и получения символов, вот что я получаю:
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", но иногда я получаю "// возврат каретки? ".
Итак, мой вопрос: с чего начать отладку? Что может пойти не так?