标题:
STM8单片机+SI4432收发失败问题求助,寄存器配置无误
[打印本页]
作者:
懒惰想了
时间:
2018-10-29 17:20
标题:
STM8单片机+SI4432收发失败问题求助,寄存器配置无误
如题求助,参考了很多源代码自己写了一点
基本的读写寄存器已经做到了,测试无错误,
发射方面用的是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);
}
复制代码
希望大神可以指点出错误,感激不尽
作者:
gws12345678
时间:
2018-10-30 19:16
发送和接收用的不是同一个方案模块? 不同方案之间互联互通可能会有问题,需要咨询供应商,给予准确答复噢
作者:
小李子铁头
时间:
2019-2-21 15:31
验证码不对,没有办法接收的
作者:
小李子铁头
时间:
2019-2-21 15:32
可以参考这个
http://www.51hei.com/bbs/dpj-100768-1.html
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1