SI4432太郁闷了!!!
调了两星期了还是不能用,今天才发现原来就没发出有效引号,以前一直看RSSI位为一以为是收到信号了。今天把发射端断电结果还是1才发现原来是假的。这个东西用起来太郁闷了。官方给的例程都不想看。还没有写的精简一点的。我只需要一个最基本的能通信的就足够了。功能多的倒成麻烦了。 我也是这样郁闷痛苦着过来的,给你一段例程,最简单的收发,这也是论坛上的兄弟救我于水深火热之中时给我的。void IA4432_Init(void)
{
IA4432_Register((REG_WRITE | OperatingFunctionControl1), 0x80);
IA4432_Register((REG_WRITE | TXRampControl), 0x7F);
IA4432_Register((REG_WRITE | AFCLoopGearshiftOverride), 0x00);
IA4432_Register((REG_WRITE | FrequencyBandSelect), 0x53); //set frequency
IA4432_Register((REG_WRITE | NominalCarrierFrequency1), 0x4b);//433HZ
IA4432_Register((REG_WRITE | NominalCarrierFrequency0), 0x00);
IA4432_Register((REG_WRITE | ModulationModeControl1), 0x00);
IA4432_Register((REG_WRITE | ModulationModeControl2), 0x22); //asynchronous modeFSK
IA4432_Register((REG_WRITE | HeaderControl2), 0x02); //no head; sync word 3 and 2
IA4432_Register((REG_WRITE | HeaderControl1), 0x00);
IA4432_Register((REG_WRITE | PreambleLength), 0x04); //2byte
IA4432_Register((REG_WRITE | PreambleDetectionControl), 0x10); //8bit
IA4432_Register((REG_WRITE | SyncWord3), 0x2d);
IA4432_Register((REG_WRITE | SyncWord2), 0xd4);
//IA4432_Register((REG_WRITE | TransmitPacketLength), 0x40);
IA4432_Register((REG_WRITE | DataAccessControl), 0x88); //enable TX handling
IA4432_Register((REG_WRITE | IFFilterBandwidth), 0x03); //BW=90kHZ
IA4432_Register((REG_WRITE | ClockRecoveryOversamplingRatio), 0xa1);
IA4432_Register((REG_WRITE | ClockRecoveryOffset2), 0x20);
IA4432_Register((REG_WRITE | ClockRecoveryOffset1), 0x4e);
IA4432_Register((REG_WRITE | ClockRecoveryOffset0), 0xa5);
IA4432_Register((REG_WRITE | ClockRecoveryTimingLoopGain1), 0x00);
IA4432_Register((REG_WRITE | ClockRecoveryTimingLoopGain0), 0x36);
IA4432_Register((REG_WRITE | TXDataRate1), 0x02); //9600BPS
IA4432_Register((REG_WRITE | TXDataRate0), 0x75);
IA4432_Register((REG_WRITE | FrequencyDeviation), 0x48);
IA4432_Register((REG_WRITE | ClockRecoveryGearshiftOverride), 0x13);
IA4432_Register((REG_WRITE | GPIO0Configuration), 0x1f);
IA4432_Register((REG_WRITE | GPIO1Configuration), 0x12); //GPIO_1 TX state
IA4432_Register((REG_WRITE | GPIO2Configuration), 0x15); //GPIO_2 RX state
IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x02);
IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x00);
IA4432_Register((REG_WRITE | InterruptEnable1), 0x02);
}
void RF_R(unsigend char *d)
{
unsigned char index,yyy,ttt;
IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x02);
IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x00);
IA4432_Register((REG_WRITE | OperatingFunctionControl1), 0x05);
while(1)
{
yyy = IA4432_Register((REG_READ | InterruptStatus1),0x00);
if(yyy&0x02) break;
}
IA4432_Register((REG_WRITE | OperatingFunctionControl1), 0x01);
ttt = IA4432_Register((REG_WRITE | ReceivedPacketLength), 0x00);
for(index=0;index<tt;index++)
{
d=IA4432_Register((REG_READ | FIFOAccess),0x00);
}
}
void RF_T(unsigned char *d,unsigned char l)
{
unsigned char i;
IA4432_Register((REG_WRITE | OperatingFunctionControl1), 0x01);
IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x01);
IA4432_Register((REG_WRITE | OperatingFunctionControl2), 0x00);
IA4432_Register((REG_WRITE | InterruptEnable1), 0x00);
IA4432_Register((REG_WRITE | InterruptEnable2), 0x00);
IA4432_Register((REG_WRITE | TransmitPacketLength),l);
for(i=0;i<l;i++)
{
IA4432_Register((REG_WRITE | FIFOAccess),*d);
d++;
}
IA4432_Register((REG_WRITE | OperatingFunctionControl1), 0x09);
IA4432_Register((REG_WRITE | InterruptEnable1), 0x04); //使能发送有效包中断
while((IA4432_Register((REG_READ | InterruptStatus1), 0x00)&0x04)==0);
} 太感谢了。苹果猫救星啊!!! 哈哈。终于能收了。谢谢! 呵呵!Appcat 苹果猫要给版权费的哦!!!开玩笑了,哈哈。希望能帮到各位!!! 楼主要请【4楼】 anna__xs 吃大餐哦,他才是这个代码的正主,我只是借花献佛。呵呵 哦。谢谢四楼的兄弟、真是帮大忙了。 呵呵,希望能帮到大家!!!努力把4432做好! mark ppa8086xp你的项目进行的如何了? 上面几位做出来的大师们,帮帮我这个小弟吧,我的数据就是发布出去啊 看贴的大师请帮帮忙:我的邮箱:wfs08181@163.com
一、我的发射板频率设置是433点频,实际发射有很大误差约200K,而且波形顶端呈M型--带宽达200K;
二、Appcat苹果猫回帖内容很好,我想借用其中的收发程序段(RF-T/RF_R);发现IA4432_Register()函数无法找到:
在网上找到个很类似的SpiRfWriteAddressData,但是无返回值,对于RF-R执行不了;
void SpiRfWriteAddressData(uint8 address, uint8 d)
{
RF_NSEL_PIN = 0;
SpiWrite(address);
SpiWrite(d);
RF_NSEL_PIN = 1;
}
其中SpiWrite为:
void SpiWrite(uint8 spi_in)
{
SPI1DAT = spi_in; //write data into the SPI register
while( SPIF1 == 0); //wait for sending the data
SPIF1 = 0; //clear interrupt flag
} 正好要用,按个印子 收藏先,等到了这一步直接拿出来用,谢了哈! 苹果猫的RF_R函数有点问题:
ttt = IA4432_Register((REG_WRITE | ReceivedPacketLength), 0x00);
改为:
ttt = IA4432_Register((REG_READ | ReceivedPacketLength), 0x00); remark 哎, 我也正在做呀, 没有程序。。。 mark备用 mark 这样的程序只能出庸品,不可能是上品,更不会是极品。 呵呵 回复【19楼】taishan
这样的程序只能出庸品,不可能是上品,更不会是极品。 呵呵
-----------------------------------------------------------------------
是的,这个程序最多只是用来参考一下初始化流程,如果什么都想用现成的,而不仔细去阅读数据手册,应用文档,不可能做出好的产品。 另外,觉得调试痛苦的,一般是太猴儿急的,数据手册都没完整看一遍,更不用说阅读相关应用文档,然后就随便找些参考程序来调,出问题了又不知道问题在那里,然后茫然的到处查资料,不痛苦才怪。
相信一句话,磨刀不误砍柴工,只有踏踏实实一步一步的走,才是正道,SI4432的文档写得是不怎么样,但是反复多看几遍,保证调试非常顺利。 怎么都没有完整的例子呀 我用的是这种http://item.taobao.com/item.htm?id=3357644114 ,这家老板还是很敬业
他这个设计上加了电子开关,不是直接4432内部IO控制收发,使用起来简单很多,很爽
4432速度40k时距离不是很远,得低波特率下还好点 M M 有没有人用过SI4421呢? 回复【24楼】AKlove
我用的是这种http://item.taobao.com/item.htm?id=3357644114 ,这家老板还是很敬业
他这个设计上加了电子开关,不是直接4432内部io控制收发,使用起来简单很多,很爽
4432速度40k时距离不是很远,得低波特率下还好点
-----------------------------------------------------------------------
晕,真能扯,这个射频开关,SI4432参考设计都要求加的,并且不带MCU,也敢要70,怎么不去抢。如果带MCU,已经写好程序的,这个还可以说说程序质量的好坏,或者带什么协议。仅仅一个硬件模块,看不出有多大的增值。
回复【27楼】JnzGoto
有没有人用过si4421呢?
-----------------------------------------------------------------------
是SI4431么?SI4431跟SI4432程序都可以一样的,SI4421没有用过。 做个记号,最近也在研究433MRF选型跟协议。有没有什么建议呢,共同交流。谢谢! 回复【28楼】windy__xp 龙笑
-----------------------------------------------------------------------
是Si4421.
以后估计会大量用到这块芯片,来看看有没有人有同样的经验,做做功课。 回复【28楼】windy__xp龙笑
-----------------------------------------------------------------------
你好,你的4432批量了么,效果怎么样? 回复【21楼】windy__xp 龙笑
另外,觉得调试痛苦的,一般是太猴儿急的,数据手册都没完整看一遍,更不用说阅读相关应用文档,然后就随便找些参考程序来调,出问题了又不知道问题在那里,然后茫然的到处查资料,不痛苦才怪。
相信一句话,磨刀不误砍柴工,只有踏踏实实一步一步的走,才是正道,si4432的文档写得是不怎么样,但是反复多看几遍,保证调试非常顺利。
-----------------------------------------------------------------------
这手册不错了,看看也是亚迅翻译的9E5,那一个乱
还有RDA的,中英文的同一个寄存器,都能给你翻译出2样来 Mark mark! 不错 mark 已经将手册看了两遍,感觉芯片还行 不是吧 楼上的兄弟 我也在看 交流下吧 数据手册我都读了好及遍了 IA4432_Register((REG_WRITE | ModulationModeControl2), 0x22); //asynchronous modeFSK
有问题的呀看来还是在忽悠人的 mark mark mark~ 今晚SI4432在STM32上使用硬件SPI测试通过,通讯一切正常,不过没有使用协议。。。。只是简单的写了个协议,测试通过。。。 关注 学习了! 学习了 回复【46楼】_yuming
-----------------------------------------------------------------------
你好,我最近也在用STM32驱动SI4432,但程序一直调试不过,郁闷中啊,不知能否一睹你的代码?供小弟我学习下,感谢为先 回复【46楼】_yuming
-----------------------------------------------------------------------
我的邮箱是286518224@qq.com,希望得到您的帮助,谢谢! 回复【46楼】_yuming
-----------------------------------------------------------------------
你好,不知能否借鉴你的基于STM32的SI4432无线模块收发调试程序?我最近刚接手这个,之前了解较少,比较郁闷啊,我的邮箱的是286518224@qq.com,希望得到你的帮助,谢谢哦 回复【31楼】eiglxl
-----------------------------------------------------------------------
RDA也做sub-GHz的芯片么?
页:
[1]