1. 程式人生 > >stm32F1,NRF24L01模組無線通訊傳送失敗解決方法【正點原子原碼修改】

stm32F1,NRF24L01模組無線通訊傳送失敗解決方法【正點原子原碼修改】

原碼是正點原子的官方例程,對於傳送模組,我只是修改了主函式部分。

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"	 
#include "24l01.h" 	 
 


 int main(void)
 {	 
	u8 key,mode,j=0;
	u16 t=0;			 
	u8 tmp_buf[33];		    
	delay_init();	    	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	uart_init(115200);	 	
 	LED_Init();		  			
 	NRF24L01_Init();    		
 	POINT_COLOR=RED;		
	while(NRF24L01_Check())
	{}	 
   
		NRF24L01_TX_Mode();
		mode=' ';
		while(1)
		{	  		   				 
			if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
			{
				//key=mode;
				for(t=0;t<32;t++)
				{
				//	key++;
				//	if(key>('~'))key=' ';
					tmp_buf[t]=j++;	
				}
				//mode++; 
				if(mode>'~')mode=' ';  	  
				tmp_buf[32]=0;//¼ÓÈë½áÊø·û		   
			}
			delay_ms(1500);				    
		};
} 


程式下載到開發板,能檢測到RF24L01模組是正常的,且有效。但是,就是無法傳送資料,一直都停在那裡,然後經過一步步的除錯。都沒有任何的改變,依舊傳送不了資訊。

所以就只能用原函式,未閹割版,也就是未改動的【正點原子】官方例程,在兩個F1上嘗試資料的傳送與接收。

但是依舊是停在傳送的步驟沒反應,而且沒辦法跳出24l01.c檔案,函式u8 NRF24L01_TxPacket(u8 *txbuf)裡面的語句:

while(NRF24L01_IRQ!=0);

但是一個偶然的嘗試,用手掰一下發送板的nrf24l01模組,神奇的可以通訊了。所以,可以斷定程式碼肯定好使了。

接著嘗試,發現主要影響語句【while(NRF24L01_IRQ!=0);】,

而這個語句和NRF_IRQ相關,也就是和PG6管腳相關。所以,在沒有成功傳送的時候,利用一根跳線跳出PG6,然後在跳線的另一端,用手搓一下就能實現資料傳送了,也就是說,問題就出在PG6口上了。但是隻知道和脈衝訊號有關係,卻不知道怎麼修改程式。【求大神指點】

所以我就做了一個比較狗的修改。如圖: