Bjrs a tous.
j'ai besoins d'un peu d'aide svp.
je travail sur 2 carte "mini STAM32F103 RB" l'un je l'ai programmé comme émetteur (il envoi une suite de chiffre de 1 à 4) et l'autre comme récepteur(qui doit afficher lé donnés récu sur l'écran LCD: TFT).
la transmission se fait sans aucun problème et la réception aussi. alors que, qu'on je veu afficher la suite de chiffres récu (enregistré dans un buffer RX) il m'affiche des 0. alors, ce que je pense qu'il y a un problème dans à réception ou koi !!
(si qq peu m'aider, il peu me contacter à traver ce mail: manel.mrad@yahoo.fr)
le code de l'interruption sur l'émetteur (a traver I2C1 de la première carte) est le suivant :
void I2C1_EV_IRQHandler(void)
{
u32 evt=I2C_GetLastEvent(I2C1);
switch (evt)
{
/* Test on I2C1 EV5 and clear it */
case I2C_EVENT_MASTER_MODE_SELECT:
GUI_DispString("* I2C_EVENT_MASTER_MODE_SELECT") ;
GUI_DispNextLine();
/* Send I2C2 slave Address for write */
I2C_Send7bitAddress(I2C1, I2C_DISTANT_ADDRESS7, I2C_Direction_Transmitter);
GUI_DispString("->Send I2C2 slave Address for write");
GUI_DispNextLine();
break;
/* Test on I2C1 EV6 and first EV8 and clear them */
case I2C_EVENT_MASTER_TRANSMITTER_M ODE_SELECTED:
/* I2C1 and I2C2 PEC Transmission Enable */
I2C_CalculatePEC(I2C1, ENABLE);
GUI_DispString("* I2C_EVENT_MASTER_TRANSMITTER_M ODE_SELECTED");
GUI_DispNextLine();
/* Send the first data */
I2C_SendData(I2C1, I2C1_Buffer_Tx[TxIdx++]); /* EV8 just after EV6 */
GUI_DispString("->Send the first data");
GUI_DispNextLine();
break;
/* Test on I2C1 EV8 and clear it */
case I2C_EVENT_MASTER_BYTE_TRANSMIT TED:
GUI_DispString("* I2C_EVENT_MASTER_BYTE_TRANSMIT TED");
GUI_DispNextLine();
if(TxIdx < BufferSize)
{
/* Transmit buffer data */
I2C_SendData(I2C1, I2C1_Buffer_Tx[TxIdx++]);
}
else
{
/* Disable I2C1 interrupts */
I2C_ITConfig(I2C1, I2C_IT_EVT | I2C_IT_BUF, DISABLE);
/* Enable Transfer PEC next for I2C1 and I2C2 */
I2C_TransmitPEC(I2C1, ENABLE);
I2C_GenerateSTOP(I2C1, ENABLE);
GUI_DispString("->GenerateSTOP");
GUI_DispNextLine();
}
break;
default:
GUI_DispString(" Interruption non prise en charge : ");
GUI_DispHex(evt,8);
GUI_DispNextLine();
break;
}
}
le code de l'interruption sur le récepteur (a traver I2C1 de la é eme carte) est le suivant :
void I2C1_EV_IRQHandler(void)
{
u32 evt=I2C_GetLastEvent(I2C1);
switch (evt)
{
/* Test on I2C1 EV1 and clear it */
case I2C_EVENT_SLAVE_RECEIVER_ADDRE SS_MATCHED:
GUI_DispString("* I2C_EVENT_SLAVE_RECEIVER_ADDRE SS_MATCHED");
GUI_DispNextLine();
break;
/* Test on I2C1 EV2 and clear it */
case I2C_EVENT_SLAVE_BYTE_RECEIVED:
if (RxIdx < BufferSize)
{
/* Store received data buffer */
I2C1_Buffer_Rx[RxIdx++] = I2C_ReceiveData(I2C1);
GUI_DispString("->donées :");
GUI_DispChar(I2C1_Buffer_Rx[RxIdx]);
GUI_DispNextLine();
}
else
{
/* Store received PEC value */
PEC_Value = I2C_ReceiveData(I2C1);
RxIdx++;
}
break;
/* Test on I2C1 EV4 and clear it */
case I2C_EVENT_SLAVE_STOP_DETECTED:
GUI_DispString("* I2C_EVENT_SLAVE_STOP_DETECTED" );
GUI_DispNextLine();
/* Clear STOPF flag */
I2C_ClearFlag(I2C1, I2C_FLAG_STOPF);
GUI_DispString("->Clear STOPF flag");
GUI_DispNextLine();
/* Disable I2C1 interrupts */
I2C_ITConfig(I2C1, I2C_IT_EVT | I2C_IT_BUF, DISABLE);
GUI_DispString("->Disable I2C1 interrupts");
GUI_DispNextLine();
break;
default:
GUI_DispString(" Interruption non prise en charge : ");
GUI_DispHex(evt,32);
GUI_DispNextLine();
break;
}
}
-----