搜索
查看: 837|回复: 0

[求助] STM8+SI4432 收发失败求助

[复制链接]

该用户从未签到

1

主题

1

帖子

0

蝴蝶豆

新手上路

最后登录
2018-10-31
发表于 2018-10-31 10:19:27 | 显示全部楼层 |阅读模式
如题求助,参考了很多源代码自己写了一点

基本的读写寄存器已经做到了,测试无错误,

发射方面用的是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初始化没问题。

代码如下:
  1. void SI4432_INIT(void)

  2. {                                



  3.         SPI_Read(0x03);        

  4.         SPI_Read(0x04);

  5.         

  6.         lcd_write_text("start", 10,0,0);

  7.         

  8.         phyWrite(0x07, 0x80);   //reset register values to default



  9.         SPI_Read(0x03);        

  10.         SPI_Read(0x04);



  11.         

  12.         SPI_Read(0x03);        

  13.         SPI_Read(0x04);

  14.         

  15.         //////////////////435.355MHZ 设定///////////////////////////////////////////////////////////////////////

  16.         phyWrite(0x75, 0x53);  // set frequency band

  17.         phyWrite(0x76, 0x85);  // set nominal carrier frequency 1

  18.         phyWrite(0x77, 0xe0);  // set nominal carrier  frequency 0

  19.         //////////////////////////////////////////////////////////////////////////////////////////////////////

  20.                

  21.         ///////////////////1.2kbps 设定//////////////////////////////////////////////////////////////////////

  22.         phyWrite(0x6e, 0x09);     //tx data rate

  23.         phyWrite(0x6f, 0xd5);     // tx data rate

  24.         ///////////////////////////////////////////////////////////////////////////////////////////////////////

  25.         

  26.         

  27.         //////////////////////////////频率偏差/////////////////////////////////////////////////////////////////////

  28.         phyWrite(0x70, 0x2c); // manchester coding disabled

  29.         phyWrite(0x71, 0x23); // FIFO mode, GFSK modulated                     

  30.         phyWrite(0x72, 0x10);  // tx deviation 10KHz  

  31.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////

  32.         

  33.         /////////////////////////////频率偏移////////////////////////////////////////////////////////////////////

  34.         phyWrite(0x73, 0x00); //no frequency offset

  35.         phyWrite(0x74, 0x00); // no frequency offset

  36.         ///////////////////////////////////////////////////////////////////////////////////////////////////////////

  37.         

  38.         

  39.         phyWrite(0x7a, 0x0a);

  40.         phyWrite(0x79, 0x01);

  41.         

  42.         phyWrite(0x07, 0x01);   // 进入ready模式



  43.         

  44.         phyWrite(0x09, 0x7f);    // 晶振精度 12ppm



  45.         phyWrite(0x0b, 0xea);    // SI4432 GPIO 0 (无视不使用)

  46.         phyWrite(0x0c, 0xea);    // SI4432 GPIO 1 (无视不使用)        

  47.         phyWrite(0x0d, 0xf4);    // SI4432 GPIO 2 (无视不使用)

  48.         

  49.   



  50.         phyWrite(0x6d, 0x19);  // tx power 18dbm                        

  51.      





  52.               

  53.         phyWrite(0x30, 0xac);   // 使用PH+FIFO mode,CRC使能

  54.                                          

  55.         phyWrite(0x32, 0x00);  // byte0, header control

  56.         phyWrite(0x33, 0x02);//  使用同步字3,2



  57.                

  58.         phyWrite(0x34, 0x08);  // 前导码长度 25个字节

  59.         phyWrite(0x35, 0x42);  // 前导码侦测控制1(不太清楚怎么设)

  60.                                 

  61.         phyWrite(0x36, 0x2d);  //同步字3 2D

  62.         phyWrite(0x37, 0xD4);  //同步字2 D4

  63.         phyWrite(0x38, 0x00);  //同步字1

  64.         phyWrite(0x39, 0x00);  //同步字0



  65.         phyWrite(0x3a, 0x00);   // transmit header 3

  66.         phyWrite(0x3b, 0x00);  // transmit header 2

  67.         phyWrite(0x3c, 0x00);   // transmit header 1

  68.         phyWrite(0x3d, 0x00);   // transmit header 0



  69.         phyWrite(0x3f, 0x00);   //check header 3

  70.         phyWrite(0x40, 0x00);   //check header 2

  71.         phyWrite(0x41, 0x00);   //check header 1

  72.         phyWrite(0x42, 0x00);  //check header 0





  73.         phyWrite(0x43, 0xff);  //header value 3

  74.         phyWrite(0x44, 0xff);  //header value 2

  75.         phyWrite(0x45, 0xff);  //header value 1

  76.         phyWrite(0x46, 0xff);  //header value 0

  77.   

  78. }





  79. void txdata(void)

  80. {

  81.         unsigned char txdata[9];

  82.         

  83.         //unsigned char i;

  84.         //tx test data is use to test the sended out signal

  85.         lcd_write_text("start tx", 10,0,0);







  86.         for (nCount=0 ; nCount<8; nCount++)

  87.         {

  88.                 txdata[nCount] = 0x30 + nCount ;

  89.         }

  90.         //Flag.is_tx = 1

  91.         //delay(100);

  92.         

  93.         phyWrite(0x07, 0x01); // SI4432进入准备模式

  94.         delay(10);

  95.         

  96.         phyWrite(0x08, 0x01);  // 清空tx fifo

  97.         delay(10);

  98.         phyWrite(0x08, 0x00);  // 清空tx fifo

  99.         delay(10);

  100.         //phyWrite(0x08, 0x02);  // 使能自动切传输与切换

  101.         //delay(10);



  102.         phyWrite(0x3e, 0x08);    // 送出8个字节 payload length, the number of bytes you are going to send



  103.         for (xCount = 0; xCount<8; xCount++)

  104.         {

  105.                 phyWrite(0x7f, txdata[xCount]);         // put the data intended to send out into loading area, fifo loading area

  106.                 delay(10);

  107.                

  108.         }

  109.         

  110.         phyWrite(0x05, 0x04);        // 发出packet sent interrupt

  111.         phyWrite(0x06, 0x00);// disable interrupt

  112.         

  113.         phyWrite(0x07, 0x09);  // 打包tx fifo里的字节然后发出 pack tx data and send

  114.         delay(10);

  115.         

  116.         phyWrite(0x05, 0x03);        // signal valid packed sent

  117.         phyWrite(0x06, 0x00);// disable interrupt

  118.         

  119.         SPI_Read(0x03);                //重置interrupt

  120.         SPI_Read(0x04);   // 重置interrupt



  121.         lcd_write_text("TX DoNE", 10,0,0);

  122.         phyWrite(0x07, 0x01);

  123.         delay(20);

  124.         //phyWrite(0x07, 0x05);         //SI4432转接收模式

  125.         //delay(1);

  126.         



  127. }
复制代码

请问会是前导码与同步字的问题吗?接收与发射方的前导码与同步字是否必须一致才可以?

希望大神可以指点出错误,感激不尽

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-5-6 12:18 , Processed in 0.164384 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表