如題求助,參考了很多源代碼自己寫了一點
基本的讀寫寄存器已經做到了,測試無錯誤,
發射方面用的是STM8S單片機+SI4432,SPI通信,PH+FIFO+GFSK
發射頻率: 435.355Mhz
晶振設置: 12ppm
晶體速率: 30Mhz
頻率偏移: 無
頻率偏差: 10khz
AFC: 開啟
數據傳輸率: 1.2kbps
接收方面用的是WD21 無線模塊,使用軟件設置接收頻率
接收頻率: 435.355Mhz
模塊波特率: 9600bps
空中波特率: 9600bps
雖然讀寫寄存器成功(用Silicons Labs提供的xls文件計算value),但是發射信號后無線模塊卻什么也接收不到。MCU方面有試過其他程序,可以確定MCU初始化沒問題。
單片機源碼:
- void SI4432_INIT(void)
- {
- SPI_Read(0x03);
- SPI_Read(0x04);
-
- lcd_write_text("start", 10,0,0);
-
- phyWrite(0x07, 0x80); //reset register values to default
- SPI_Read(0x03);
- SPI_Read(0x04);
-
- SPI_Read(0x03);
- SPI_Read(0x04);
-
- //////////////////435.355MHZ 設定///////////////////////////////////////////////////////////////////////
- phyWrite(0x75, 0x53); // set frequency band
- phyWrite(0x76, 0x85); // set nominal carrier frequency 1
- phyWrite(0x77, 0xe0); // set nominal carrier frequency 0
- //////////////////////////////////////////////////////////////////////////////////////////////////////
-
- ///////////////////1.2kbps 設定//////////////////////////////////////////////////////////////////////
- phyWrite(0x6e, 0x0a); //tx data rate
- phyWrite(0x6f, 0x3d); // tx data rate
- ///////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
- //////////////////////////////頻率偏差/////////////////////////////////////////////////////////////////////
- phyWrite(0x70, 0x0C); // manchester coding disabled
- phyWrite(0x71, 0x23); // FIFO mode, GFSK modulated
- phyWrite(0x72, 0x10); // tx deviation 10KHz
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
- /////////////////////////////頻率偏移////////////////////////////////////////////////////////////////////
- phyWrite(0x73, 0x00); //no frequency offset
- phyWrite(0x74, 0x00); // no frequency offset
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-
- phyWrite(0x07, 0x01); // 進入ready模式
-
- phyWrite(0x09, 0x7f); // 晶振精度 12ppm
- phyWrite(0x0b, 0xea); // SI4432 GPIO 0 (無視不使用)
- phyWrite(0x0c, 0xea); // SI4432 GPIO 1 (無視不使用)
- phyWrite(0x0d, 0xf4); // SI4432 GPIO 2 (無視不使用)
-
-
- phyWrite(0x6d, 0x19); // tx power 18dbm
-
-
- phyWrite(0x30, 0xac); // 使用PH+FIFO mode,CRC使能
-
- phyWrite(0x32, 0x00); // byte0, header control
- phyWrite(0x33, 0x02);// 使用同步字3,2
-
- phyWrite(0x34, 0x0a); // 前導碼長度 5個字節
- phyWrite(0x35, 0x52); // 前導碼偵測控制1(不太清楚怎么設置)
-
- phyWrite(0x36, 0x2d); //同步字3 2D
- phyWrite(0x37, 0xD4); //同步字2 D4
- phyWrite(0x38, 0x00); //同步字1
- phyWrite(0x39, 0x00); //同步字0
- phyWrite(0x3a, 0x00); // transmit header 3
- phyWrite(0x3b, 0x00); // transmit header 2
- phyWrite(0x3c, 0x00); // transmit header 1
- phyWrite(0x3d, 0x00); // transmit header 0
- phyWrite(0x3f, 0x00); //check header 3
- phyWrite(0x40, 0x00); //check header 2
- phyWrite(0x41, 0x00); //check header 1
- phyWrite(0x42, 0x00); //check header 0
- phyWrite(0x43, 0xff); //header value 3
- phyWrite(0x44, 0xff); //header value 2
- phyWrite(0x45, 0xff); //header value 1
- phyWrite(0x46, 0xff); //header value 0
-
- /* 用途不明?
- phyWrite(0x1c, 0x3D); //IF filter bandwidth
- phyWrite(0x1d, 0x40); //AFC_LOOP_GEARSHIFT_OVERRIDE
- phyWrite(0x1e, 0x0a); //AFC Timing Control
- phyWrite(0x1f, 0x03); //Clock recovery gearshift override
- phyWrite(0x2a, 0x20); //write 0x20 to the AFC Limiter register
- phyWrite(0x20, 0xA1);
- phyWrite(0x21, 0x20);
- phyWrite(0x22, 0x4e);
- phyWrite(0x23, 0xa5);
- phyWrite(0x24, 0x00);
- phyWrite(0x25, 0x0b);
- delay(5);
- */
- }
- void txdata(void)
- {
- unsigned char txdata[9];
-
- //unsigned char i;
- //tx test data is use to test the sended out signal
- lcd_write_text("start tx", 10,0,0);
- for (y=0 ; y<8; y++)
- {
- txdata[y] = 0x30 + y ;
- }
- //Flag.is_tx = 1
- //delay(100);
-
- phyWrite(0x07, 0x01); // SI4432進入準備模式
- delay(10);
-
- phyWrite(0x08, 0x01); // 清空tx fifo
- delay(10);
- phyWrite(0x08, 0x00); // 清空tx fifo
- delay(10);
- //phyWrite(0x08, 0x02); // 使能自動切傳輸與切換
- //delay(10);
- phyWrite(0x3e, 0x08); // 送出8個字節 payload length, the number of bytes you are going to send
- for (x = 0; x<8; x++)
- {
- phyWrite(0x7f, txdata[x]); // put the data intended to send out into loading area, fifo loading area
- delay(10);
-
- }
-
- phyWrite(0x05, 0x04); // 發出packet sent interrupt
- phyWrite(0x06, 0x00);// disable interrupt
-
- phyWrite(0x07, 0x09); // 打包tx fifo里的字節然后發出 pack tx data and send
- delay(10);
-
- phyWrite(0x05, 0x03); // signal valid packed sent
- phyWrite(0x06, 0x00);// disable interrupt
-
- SPI_Read(0x03); //重置interrupt
- SPI_Read(0x04); // 重置interrupt
- //phyWrite(0x07, 0x05); //SI4432轉接收模式
- //delay(1);
-
- }
復制代碼
希望大神可以指點出錯誤,感激不盡
|