历史上的今天
今天是:2025年03月06日(星期四)
2020年03月06日 | STM32开发笔记88: SX1268驱动程序设计(天线控制)
2020-03-06 来源:eefocus
单片机型号:STM32L053R8T6
本系列开发日志,将详述SX1268驱动程序的整个设计过程,本篇介绍天线控制的相关驱动程序。
上篇日志,提到在SX126xCheckDeviceReady函数中,如果芯片处于启动、硬复位、SLEEP模式、RX_DC模式,转换到STDBY模式时,需唤醒芯片,并将天线打开,程序如下:
void CSX1268::SX126xCheckDeviceReady(void)
{
if((this->OperatingMode == MODE_SLEEP) || (this->OperatingMode == MODE_RX_DC))
{
SX126xWakeup();
SX126xAntSwOn();
}
SX126xWaitOnBusy();
}
如何实现天线的打开呢?这将是本篇日志需要介绍的内容。
一、官方数据手册有关天线开关设置的内容

上图是SX1268官方数据手册提供的参考电路图,其内部采用DC-DC供电方式,采用32MHz无源晶振,由于其为半双工工作方式,所以采用PE4259进行射频电路的切换,也就是将外部射频天线电路切换给芯片的收或者发。
PE4259的逻辑真值表,如下图,2种工作方式。第1种是单引脚控制,其实现方法是第6脚接VDD,第4脚给高电平,则将RFC切换给RF1;第4脚给低电平,则将RFC切换给RF2。第2种工作方式是第6脚给低电平,第4脚给高电平,则将RFC切换给RF1;第6脚给高电平,第4脚给低电平,则将RFC切换给RF2。


从以上分析,可以判断模块的RXEN接PE4259的6脚,TXEN接PE4259的4脚。当RXEN接高电平,TXEN接低电平,则RFC连接到RF2,所以为接收使能;RXEN接接低电平,TXEN接高电平,则RFC连接到RF1,所以发射使能。
按照上述分析,也可以这样给电平,就是RXEN始终给高电平,由TXEN控制芯片的收发转换,这样就可以将TXEN连接到DIO2进行自动收发控制。
还有另外1种状态,就是RXEN悬空,此时PE4259不工作,达到省电的目的,这也就是PE4259第6脚网络标号为ANT_SW的原因,其意义为天线开关。当ATN_SW给高电平时,打开天线,通过4脚控制收发。当ANT_SW悬空时,天线关闭。
二、E22-400M22S有关天线设置的内容
E22-400M22S使用2个引脚,控制天线的收发转换。
RXEN:射频开关接收控制脚,连接外部单片机IO ,高电平有效
TXEN:射频开关发射控制脚,连接外部单片机IO 或 DIO2 ,高电平有效
按照数据手册的内容分析,我们可以确认,RXEN接PE4259的第6脚,TXEN接PE4259的第4脚。
三、两种程序控制方式
单片机可以采取2种方式,对天线进行控制。
1、单片机引脚接RXEN,将DIO2与TXEN相连接
这种方式,将RXEN当作天线的开关,使用天线时给RXEN高电平,收发控制需要对DIO2进行设置,由SX1268完成。
2、单片机引脚分别接RXEN和TXEN
切换到接收电路:RXEN给高电平,TXEN给低电平
切换到发射电路:RXEN给低电平,TXEN给高电平
切断天线:采用省电方法,RXEN和TXEN均切换为Analog模式。
四、单片机引脚分别接RXEN和TXEN的程序实现
1、在config文件中,进行引脚设置
#define SX1268_RXEN_PORT PORTB
#define SX1268_RXEN_PIN PIN2
#define SX1268_TXEN_PORT PORTB
#define SX1268_TXEN_PIN PIN1
2、定义相应的引脚类
class CSX1268_RXEN:public CIO_Analog
{
public:
CSX1268_RXEN(void);
};
class CSX1268_TXEN:public CIO_Analog
{
public:
CSX1268_TXEN(void);
};
3、定义引脚的构造函数
CSX1268_RXEN::CSX1268_RXEN(void):CIO_Analog(SX1268_RXEN_PORT, SX1268_RXEN_PIN) {}
CSX1268_TXEN::CSX1268_TXEN(void):CIO_Analog(SX1268_TXEN_PORT, SX1268_TXEN_PIN) {}
4、逻辑功能的实现
void CSX1268::SX126xEnableAntRx(void)
{
this->Rxen.SetOutputDirection();
this->Txen.SetOutputDirection();
this->Rxen.Set_1();
this->Txen.Set_0();
}
void CSX1268::SX126xEnableAntTx(void)
{
this->Rxen.SetOutputDirection();
this->Txen.SetOutputDirection();
this->Rxen.Set_0();
this->Txen.Set_1();
}
void CSX1268::SX126xDisableAnt(void)
{
this->Rxen.SetAnalogDiretion();
this->Txen.SetAnalogDiretion();
}
五、修正的SX126xCheckDeviceReady函数
按照单片机引脚分别接RXEN和TXEN,修正后的SX126xCheckDeviceReady函数如下:
void CSX1268::SX126xCheckDeviceReady(void)
{
if((this->OperatingMode == MODE_SLEEP) || (this->OperatingMode == MODE_RX_DC))
{
SX126xWakeup();
SX126xEnableAntRx();
}
SX126xWaitOnBusy();
}
史海拾趣
|
一直在查资料,顺便发一下。转// Linux引导启动时,默认使用的文件系统是根文件系统。其中一般都包括这样一些子目录:/etc/, /dev/, /usr/, /usr/bin/, /bin/, /var/等。 etc/目录主要含有一些系统配置文件;dev/含有设备特殊文件,用于使用文件操 ...… 查看全部问答> |
|
是从一个仪器上拆下来的一块完整的单片机,没有任何资料,芯片是atmel的89c51,双串口的,看起来像是能够通过串口在线编程。请教下怎么去测试它是否可以在线编程呢,需要尝试些什么软件呢,我从前没有用过能在线编程的c51,所以一点不懂这个呵呵… 查看全部问答> |
|
# ./v4l ./v4l: error while loading shared libraries: cannot open shared object file: can not load shared object file: No such file or directory 我的lib里面已经包含: # cd lib # ls ld-2.2.3.so ...… 查看全部问答> |
|
我现在做的课题是嵌入式网络视频监控系统,在网络传输部分,我用的是tcp协议,客户端是IE浏览器,当我下载代码跑起来时,在浏览器输入ip时,希望把网页发送到客户端,但显示的界面是完全空白,是接受到了数据?还是网页(我写了一个简单的)解析不 ...… 查看全部问答> |
|
replyreload += \',\' + 685113; LED 的排列方式及LED 光源的规范决定着基本的驱动器要求。LED驱动器的主要功能就是在一定的输入电压范围下给LED提供恒定的、满足LED正常工作条件的工作电流。最常用的是采用变压器来进行电气隔离。文中论述了 ...… 查看全部问答> |
|
在ucos操作系统下,利用ZLGGUI和TFT6758在smartarm2200上做个实验,总共建立了两个任务:汉字显示和蜂鸣器响。main函数如下: int main (void) { GUI_Initialize(); // 初始化液晶 GUI_Set ...… 查看全部问答> |
|
我家有台电脑用了8年了,运行很慢,即使重装系统,安装版的当年XP系统,还是很慢,DDR?不是,硬盘?在网上搜了下,一盘硬盘寿命2-3万小时,所以我的硬盘基本算报销了。又参考一消息有服务器商一家公司就有几万块硬盘,每月都有换下的硬盘。。。 ...… 查看全部问答> |




