求助一个SI4432的丢失数据问题,大概丢失20%左右。
从淘宝上买了两个模块,使用STM32,一个发送一个接收。初始化程序是按照厂家给的例程写的。每两秒发一次数据,接收端采用中断接收,将接收到得数据显示到屏幕上。
附初始化程序,看看各位大侠有没有遇到这样的问题,或者有好办法。
void Si4432_init(void)
{
GPIO_SetBits(GPIO_Si4432,Si4432_nSEL);
delay_ms(500);
SPI_RW_Reg(Si4432_READ_REG + 0x03, 0x00); //清RF模块中断
SPI_RW_Reg(Si4432_READ_REG + 0x04, 0x00);
SPI_RW_Reg(Si4432_WRITE_REG + 0x06, 0x80);//使能同步字侦测
SPI_RW_Reg(Si4432_WRITE_REG + 0x07, 0x01);//进入 Ready 模式
SPI_RW_Reg(Si4432_WRITE_REG + 0x09, 0x7f);//负载电容= 12P
// SPI_RW_Reg(Si4432_WRITE_REG + 0x09, 0x64); //根据云宝电子建议修改
SPI_RW_Reg(Si4432_WRITE_REG + 0x0a, 0x05);//关闭低频输出
SPI_RW_Reg(Si4432_WRITE_REG + 0x0b, 0xea);//GPIO 0 当做普通输出口
SPI_RW_Reg(Si4432_WRITE_REG + 0x0c, 0xea);//GPIO 1 当做普通输出口
SPI_RW_Reg(Si4432_WRITE_REG + 0x0d, 0xf4);//GPIO 2 输出收到的数据
SPI_RW_Reg(Si4432_WRITE_REG + 0x70, 0x2c);
SPI_RW_Reg(Si4432_WRITE_REG + 0x1d, 0x40);//使能 afc
// 1.2K bps setting
SPI_RW_Reg(Si4432_WRITE_REG + 0x1c, 0x16);//滤波带宽设置
SPI_RW_Reg(Si4432_WRITE_REG + 0x20, 0x83);
SPI_RW_Reg(Si4432_WRITE_REG + 0x21, 0xc0);//
SPI_RW_Reg(Si4432_WRITE_REG + 0x22, 0x13);//
SPI_RW_Reg(Si4432_WRITE_REG + 0x23, 0xa9);//
SPI_RW_Reg(Si4432_WRITE_REG + 0x24, 0x00);//
SPI_RW_Reg(Si4432_WRITE_REG + 0x25, 0x04);//
SPI_RW_Reg(Si4432_WRITE_REG + 0x2a, 0x14);
SPI_RW_Reg(Si4432_WRITE_REG + 0x6e, 0x09);
SPI_RW_Reg(Si4432_WRITE_REG + 0x6f, 0xd5);
//1.2K bps setting end
SPI_RW_Reg(Si4432_WRITE_REG + 0x30, 0x8c);//使能PH+ FIFO模式,高位在前面,使能CRC校验
SPI_RW_Reg(Si4432_WRITE_REG + 0x32, 0xff);//byte0, 1,2,3 作为头码
SPI_RW_Reg(Si4432_WRITE_REG + 0x33, 0x42);//byte 0,1,2,3 是头码,同步字3,2 是同步字
SPI_RW_Reg(Si4432_WRITE_REG + 0x34, 64); //发射64个Nibble的Preamble
// SPI_RW_Reg(Si4432_WRITE_REG + 0x35, 0x20);//需要检测4个nibble的Preamble
SPI_RW_Reg(Si4432_WRITE_REG + 0x35, 0x80); //需要检测16个nibble的Preamble
SPI_RW_Reg(Si4432_WRITE_REG + 0x36, 0x2d);//同步字为 0x2dd4
SPI_RW_Reg(Si4432_WRITE_REG + 0x37, 0xd4);
SPI_RW_Reg(Si4432_WRITE_REG + 0x38, 0x00);
SPI_RW_Reg(Si4432_WRITE_REG + 0x39, 0x00);
SPI_RW_Reg(Si4432_WRITE_REG + 0x3a, 's'); //发射的头码为: “swwx"
SPI_RW_Reg(Si4432_WRITE_REG + 0x3b, 'w');
SPI_RW_Reg(Si4432_WRITE_REG + 0x3c, 'w');
SPI_RW_Reg(Si4432_WRITE_REG + 0x3d, 'x');
SPI_RW_Reg(Si4432_WRITE_REG + 0x3e, 10); //总共发射10个字节的数据
SPI_RW_Reg(Si4432_WRITE_REG + 0x3f, 's'); //需要校验的头码为:”swwx"
SPI_RW_Reg(Si4432_WRITE_REG + 0x40, 'w');
SPI_RW_Reg(Si4432_WRITE_REG + 0x41, 'w');
SPI_RW_Reg(Si4432_WRITE_REG + 0x42, 'x');
SPI_RW_Reg(Si4432_WRITE_REG + 0x43, 0xff);//头码1,2,3,4 的所有位都需要校验
SPI_RW_Reg(Si4432_WRITE_REG + 0x44, 0xff);//
SPI_RW_Reg(Si4432_WRITE_REG + 0x45, 0xff);//
SPI_RW_Reg(Si4432_WRITE_REG + 0x46, 0xff);//
SPI_RW_Reg(Si4432_WRITE_REG + 0x6d, 0x07);//发射功率设置0x00:+0dBM0x01:+3dBM0x02:+6dBM0x03:+9dBM0x04:+11dBM0x05:+14dBM0x06:+17dBM0x07:20dBM
SPI_RW_Reg(Si4432_WRITE_REG + 0x79, 0x0); //不需要跳频
SPI_RW_Reg(Si4432_WRITE_REG + 0x7a, 0x0); //不需要跳频
SPI_RW_Reg(Si4432_WRITE_REG + 0x71, 0x22);//发射不需要CLK,FiFo,FSK模式
SPI_RW_Reg(Si4432_WRITE_REG + 0x72, 0x30);//频偏为 30KHz
SPI_RW_Reg(Si4432_WRITE_REG + 0x73, 0x0); //没有频率偏差
SPI_RW_Reg(Si4432_WRITE_REG + 0x74, 0x0); //没有频率偏差
SPI_RW_Reg(Si4432_WRITE_REG + 0x75, 0x53);//频率设置 434
// SPI_RW_Reg(Si4432_WRITE_REG + 0x76, 0x64);//
// SPI_RW_Reg(Si4432_WRITE_REG + 0x77, 0x00);
SPI_RW_Reg(Si4432_WRITE_REG + 0x76, 0x57);//按照云宝电子例程修改
SPI_RW_Reg(Si4432_WRITE_REG + 0x77, 0x80);
TX0_RX0; // 天线开关不在发射,接收状态
} 补充一点。
丢失20%指的是,发送10次,能够正确接收8次左右。 engineer_hu 发表于 2012-8-5 16:30 static/image/common/back.gif
补充一点。
丢失20%指的是,发送10次,能够正确接收8次左右。
这个丢应该是正常的吧,处理好丢,有重传的机制最好! 学习学习,我也刚好在淘宝买了SI4432模块,准备来弄。 {:lol:},求总的源程序? 在吗、
QQ:1532460434和你交流一下432吧!和你一样遇到了一些问题!!!!!!有兴趣的!!!! 求一下程序,分享一下吧!!!!
灵敏度太差,把灵敏度调好
页:
[1]