PIC32MZ tutorial -- UART Communication
At this moment, I accomplish the interface of UART communication for PIC32MZ EC Starter Kit. This interface configures the PIC32MZ for communication with a host PC at 115200 baud. There are five functions in the interface -- Uart_Init(), Uart_Getc(), Uart_Gets(), Uart_Putc() and Uart_Puts().
Uart_Init() configures PIC32MZ UART1 with 115200-8-None-1. It uses PPS to select RPC13, RPC14 as TX and RX.
Uart_Getc() is a reception funtion for a character. It will be blocked until a character got.
Uart_Gets() is a reception funtion for string. It will receive multiple characters until the '\r' '\n' or the buffer is full.
Uart_Putc() is a transmit function for a character.
Uart_Puts() is a transmit funtion for string. It will transmit multiple character until '\0'.
Below is the code.
void Uart_Init(void) { LATCSET = 0x6000; /* Both RC13 and RC14 HIGH */ TRISCSET = 0x4000; /* RC14 Input */ TRISCCLR = 0x2000; /* RC13 Output */ Seq_UnLock(); RPC13Rbits.RPC13R = 1; /* U1TX on RPC13 */ U1RXRbits.U1RXR = 7; /* U1RX on RPC14 */ Seq_Lock(); U1BRG = ((PBCLK2_FREQUENCY / BAUDRATE) / 16) - 1; U1MODE = 0x8000; // Loopback mode is enabled U1STA = 0x1400; IFS3bits.U1RXIF = 0; IFS3bits.U1TXIF = 0; } char Uart_Getc(void) { if (U1STAbits.OERR) { U1STAbits.OERR = 0; return 0; } while (!U1STAbits.URXDA); char ret = U1RXREG; IFS3bits.U1RXIF = 0; return ret; } void Uart_Gets(char *s) { char c; int size = 0; if (s == (void *)0) return; while (size < U1RX_BUFSIZE) { c = Uart_Getc(); if ((c == '\n')||(c == '\r')) { s[size] = '\0'; break; } s[size++] = c; } } void Uart_Putc(char c) { U1TXREG = c; while (U1STAbits.UTXBF); IFS3bits.U1TXIF = 0; } void Uart_Puts(char *s) { if (s == (void *)0) { return; } while (*s != '\0') { Uart_Putc(*s++); } }