Bonjour,
J'ai actuellement un gros problème car je n'arrive pas à gérer la communication UART.
J'affecte un tableau de 8 valeurs : data[8] que j'écris dans UART2 Tx. Cependant à l'oscilloscope quand je me met sur le port UAR2 Tx j'obtient une trame mais celle ci ne correspond pas à ce que j'ai configuré.
De plus est ce qu'avec se code je pourrai récupérer une trame d'une longueur d'1 octet émis sur UART2 Rx que je stocke dans le tableau de Rx_data ?
Si j'ai bien compris je ne peux pas transmettre une trame de plus d'1 octet de long en 1 fois par UART ? Si je veux transmettre un message plus long comment faire ?
Voyez vous quelque chose d'incohérent dans le code ?
Est ce que je dois gérer des interruptions pour emettre une trame ou recevoir une trame sur mes ports UART2.
#pragma config FPLLMUL = MUL_18, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_2
#define SYSCLK (72000000)
#define PBCLK (SYSCLK/2)
#define DESIRED_BAUDRATE (9600) //The desired BaudRate
// calculate actual BAUD generate value.
#define BAUD_VALUE ((PBCLK/16/DESIRED_BAUDRATE)-1)
//-----------------Fonction principale--------------------------
int main(void)
{
unsigned int data[8]={1,0,0,0,1,0,1,0}; //trame a transmettre par UART
unsigned int Rx_data[8]; //trame dans lequel on va sauvegarder les valeurs recu sur le port UART Rx
// Configure the device for maximum performance.
// This macro sets flash wait states, PBCLK divider and DRM wait states based on the specified
// clock frequency. It also turns on the cache mode if avaialble.
// Based on the current frequency, the PBCLK divider will be set at 1:2. This knoweldge
// is required to correctly set UART baud rate, timer reload value and other time sensitive
// setting.
SYSTEMConfigPerformance(SYSCLK );
// Open UART2 with Receive and Transmitter enable.
OpenUART2(UART_EN, UART_RX_ENABLE | UART_1STOPBIT | UART_TX_ENABLE, BAUD_VALUE);
putsUART2("*** UART Simple Application Example ***\r\n");
putsUART2("*** Type some characters and observe echo and RA7 LED toggle ***\r\n");
while(1)
{
while(DataRdyUART2()); /* Wait for data in the UARTRx. */
Rx_data[8] = (int)ReadUART2(); /* Read data from Rx. */
while(BusyUART2()); /* Wait till the UART transmitter is free. */
putcUART2(data[8]); /* Write data into Tx. */
};
}
-----