pic32 제품군 디바이스에서 직렬 포트를 구성하는 코드를 작성하고 있습니다. 초기화는 대부분 작동하는 것으로 보입니다. 그러나 쓰는 처음 6 자 대신 가비지 데이터가 나타납니다. 그러나 초기화 함수가 끝날 때까지 임의로 긴 대기 시간을 추가하면이 작업이 사라집니다. 초기화가 끝날 때까지 기다려야 할 레지스터 플래그가 있습니까? 내 초기화 코드는 아래와 같습니다. 도움이된다면이 초기화를 pic32 reference manual의 UART 섹션을 기반으로하고 있습니다. 나는 내 전송 기능을 위해 아래 코드를 추가했다. 내 예상 출력 문자열은 "부트 로더 코드에서 안녕하세요 \ 연구 \ n."하지만 난 얻을 실제 바이트는 다음과 같습니다PIC32 UART가 초기화 후 가비지 문자를 전송합니다.
00000000 00 00 aa b1 b1 bd 81 66 72 6f 6d 20 74 68 65 20 |.......from the |
00000010 62 6f 6f 74 6c 6f 61 64 65 72 20 63 6f 64 65 2e |bootloader code.|
00000020 0d 0a
void initializeUART2()
{
uint32 counter;
initialized = TRUE;
U2MODE = 0;
U2STA = 0;
U2BRG = 0;
IEC1bits.U2TXIE = 0;
IEC1bits.U2RXIE = 0;
IEC1bits.U2EIE = 0;
//disable UART transmission before config
U2STA &= ~UART_TRANSMIT_ENABLED_STATUS_FLAG;
//disable UART before config
U2MODE &= ~UART_ENABLED_MODE_FLAG;
RS232_RS485_TRIS=0; //set to output
RS232_RS485=0; //select RS-232 mode on MAX3161
//set baudrate BAUDRATE = CLOCK_FREQUENCY/(16*(U2BRG + 1))
//solve for U2BRG value
U2BRG = (UINT16)(((PERIPHERAL_CLOCK_FREQUENCY/UART2_BAUDRATE)/16)-1);
//set mode to 8 bit no parity
U2MODE &= ~UART_PARITY_DATA_MODE_BITS;
//set number of stop bits to 1
U2MODE &= ~UART_EXTRA_STOP_MODE_BIT_FLAG;
//enable the UART port
U2MODE |= UART_ENABLED_MODE_FLAG;
//enable serial transmission
U2STA |= UART_TRANSMIT_ENABLED_STATUS_FLAG;
//without this loop, I get garbage in first 6 bytes of my first message
counter = 1000;
while(counter--);
}
void putUART2(uint32 value)
{
if(!initialized)
{
initializeUART2();
}
//make sure value is in range of writable values
value &= UINT32_MASK(8);
//clear transmit interrupt flag
IFS1bits.U2TXIF = 0;
//wait for the transmit buffer to be empty
while((U2STA & UART_TRANSMIT_STATUS_FLAG) == 0);
//set the data byte to be written in the write register
//also starts transmission
U2TXREG = value;
//wait for the transmit buffer to be empty
//both of these waits are necessary to avoid missing bytes
while((U2STA & UART_TRANSMIT_STATUS_FLAG) == 0);
}
주문을 뒤집고 1 마이크로 초 지연을 추가했는데 완벽하게 작동한다는 것을 어떻게 알 수 있습니까? 감사 –