我的 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”,但有时我会收到“//回车?”。
所以,我的问题是:我应该从哪里开始调试?什么可能出错?