Bonjour à tous,
je viens chercher un peu d'aide car après de longues heures d'essai, je n'arrive toujours pas à faire communiquer deux modules nRF24l01+ (achetés sur eBay).
J'ai donc deux modules, chacun relié à un STM32. J'ai trouvé une librairie sur internet (je la met en PJ) qui permet de les interfacer avec ces µC. La liaison SPI est géré en soft et pas en hard mais elle à l'air de marcher correctement car j'arrive à lire et écrire sans problème dans les différents registres.
Le STM32 en TX possède un écran graphique ce qui me permet d'afficher en permanence tous les registres qui m'intéressent. Celui en RX possède un écran LCD alphanumérique 16x2, j'affiche donc 2 registres en même temps.
Sur le récepteur, je teste le bit RPD qui indique la détection d'une porteuse sur le même canal RF que lui et ce bit passe de 0 à 1 après l'allumage, ce qui est déjà bon signe.
Je vous met le code pour l'émetteur :
et ici le code du récepteur :Code:int main(void) { LCD_Initialization(); LCD_Clear(Black); GUI_Text(10,10,"Set TX Mode...",Green,Black); init_io(); TX_Mode(); GUI_Text(150,10,"Set",Green,Black); while(1) { CE(0); c=SPI_Read(READ_REG + EN_AA); printByte(c,10,30); c=SPI_Read(READ_REG + EN_RXADDR); printByte(c,10,50); c=SPI_Read(READ_REG + SETUP_RETR); printByte(c,10,70); c=SPI_Read(READ_REG + RF_CH); printByte(c,10,90); c=SPI_Read(READ_REG + RF_SETUP); printByte(c,10,110); c=SPI_Read(READ_REG + CONFIG); printByte(c,10,130); c=SPI_Read(READ_REG + FIFO_STATUS); printByte(c,10,150); *tx_buf=65; c=SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH); printByte(c,10,170); if(((c>>TX_DS)&0x01)==1) { GUI_Text(10,190,"Sent",Green,Black); } CE(1); } return 0; }
Pour info, sur l'émetteur, il est affiché dans l'ordre : 1,1,26,40,7,14,33,31 et sur le récepteur il est indiqué : FIFO = 17 et STATUS = 14.Code:int main(void) { GPIO_Configuration(); GPIO_SetBits(GPIOA,GPIO_Pin_12); LCD_Init(); LCD_Clear(); LCD_Goto(1,1); LCD_Print("Hello World"); init_io(); RX_Mode(); uint8_t c=0,f,sta,flag; char s[17],s2[17]; while(c==0) { CE(0); c=SPI_Read(READ_REG + CD); CE(1); sprintf(s,"RPD = %03u",c); LCD_Goto(1,2); LCD_Print(s); } delay_ms(2000); while(1) { CE(0); sta=SPI_Read(READ_REG+STATUS); // read register STATUS's value f=SPI_Read(READ_REG+FIFO_STATUS); CE(1); sprintf(s2,"FIFO = %3d ",f); sprintf(s,"STATUS = %3d ",sta); LCD_Goto(1,1); LCD_Print(s2); LCD_Goto(1,2); LCD_Print(s); if((sta>>RX_DR)&0x01) { // if receive data ready (RX_DR) interrupt CE(0); SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer CE(1); flag=1; } if(flag) { // finish received flag=0; // set flag=0 sprintf(s,"RX = %3d %3d ",rx_buf[0],rx_buf[1]); LCD_Clear(); LCD_Goto(1,1); LCD_Print("Data received"); LCD_Goto(1,2); LCD_Print(s); while(1); } } return 0; }
Merci d'avance pour votre aide
nRF24l01.zip
-----