STM32开发笔记88: SX1268驱动程序设计(天线控制)

发布者:风清扬yx最新更新时间:2020-03-06 来源: eefocus关键字:STM32  SX1268  驱动程序  天线控制 手机看文章 扫描二维码
随时随地手机看文章

单片机型号: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();

}

关键字:STM32  SX1268  驱动程序  天线控制 引用地址:STM32开发笔记88: SX1268驱动程序设计(天线控制)

上一篇:STM32开发笔记89: SX1268驱动程序设计(电源控制)
下一篇:STM32开发笔记87: SX1268驱动程序设计(设置为STDBY模式)

推荐阅读最新更新时间:2024-11-17 17:10

STM32之RTC使用
RTC使用说明 STM3f10x的RTC时能涉及到的寄存器有RCC,BKP和RTC这三个大类寄存器;其中RCC主要控制了实时时钟和备份区的电源使能和时钟使能;RTC模块和时钟配置系统的寄存器是在后备区域的(即BKP),通过BKP后备区域来存储RTC配置的数据可以让在系统复位或待机模式下唤醒后RTC里面配置的数据维持不变;为此备份区还得涉及一个寄存器PWR,电源管理寄存器,备份区的写保护位在PWR- CR的第八位。 由于整个RTC都是位于后备区,而且RTC的APB1总线和内核的APB1总线是独立的,所以在系统复位和唤醒时,RTC和BKP的那些时钟不用从新配置;他们只受Backup domain software reset这个位
[单片机]
<font color='red'>STM32</font>之RTC使用
STM32 读保护功能和清除读保护功能设置【转】
1、STM32对内部Flash的保护措施 所有STM32的芯片都提供对Flash的保护,防止对Flash的非法访问 - 写保护和读保护。 1)、读保护即大家通常说的“加密”,是作用于整个Flash存储区域。一旦设置了Flash的读保护,内置的Flash存储区只能通过程序的正常执行才能读出,而不能通过下述任何一种方式读出: 通过调试器(JTAG或SWD); 从RAM中启动并执行的程序; 2)、写保护是以四页(1KB/页) Flash存储区为单位提供写保护,对被保护的页实施编程或擦除操作将不被执行,同时产生操作错误标志。 读与写设置的效果见下表: 读保护写保护 对Flash的操作功能 有效 有效
[单片机]
STM32 USB数据接收与数据发送程序流程分析
既然学习了USB,那就必须的搞懂USB设备与USB主机数据是怎么通讯的。这里主要讲设备端,因为我们的代码是做USB设备用的。 我们需要必须要定义了USB中断。起始在STM32的中断向量表中给USB两个中断,我们可以在stm32f10x.h中找到这两个中断: USB_HP_CAN1_TX_IRQn = 19, /*! USB Device High Priority or CAN1 TX Interrupts */ USB_LP_CAN1_RX0_IRQn = 20, /*! USB Device Low Priority or CAN1 RX0 Interrupts */ 这两个中断是USB与CAN复
[单片机]
STM32之内部FLASH例程
#include stm32f10x.h #include /* STM32 内部 FLASH 配置 */ #define STM32_FLASH_SIZE 512 /* 所选STM32的FLASH容量大小(单位为K) */ #if STM32_FLASH_SIZE 256 #define STM_SECTOR_SIZE 1024 /* 256为1K字节页, =256 为2K页 */ #else #define STM_SECTOR_SIZE 2048 #endif /* 应用程序区域 */ #define APP_REGION (0x8000000 + 0x80000 - STM_SECTO
[单片机]
STM32-串口IAP升级
对于写好的程序来说如何烧录到芯片中是十分重要的的过程,在平时测试开发的时候可以直接通过Jlink,swd,usart等方式直接将编译好的程序直接烧录到芯片的Flash中,但是对于已经开发好的产品来说,特别的已经进行了分布部署的设备来说,一个一个升级可以是不可能的事情,一般的升级方式都是通过网络或者其他远程方式来进行固件的升级,但是无论通过什么方式来进行升级,基本上都是将要升级的代码段下载到指定的Flash存储区域中,这也就是IAP升级的主要内容。 IAP升级主要是将不同的程序放置到内部存储区域的不同的位置,然后通过相应的跳转函数,来指向不同的地址空间,这样就可以运行不同的APP程序了。对于STM32来说内置的Flsah分为不同
[单片机]
STM32学习——端口复用及映射
1,复用 STM32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。 哪些端口可以复用为什么,这个查表就可以了 2,如何进行端口复用? 比如AF1要复用到TIM1; 通过设置AFRL寄存器和AFRH寄存器 就可以AF1----- TIM1; 一组IO口有16个 GPIOAF0~15 AFRL负责低八位IO AFRH负责高八位IO 举例 除了ADC或者DAC配置为模拟之外,其他外设都要配置为复用 //完整版 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_
[单片机]
<font color='red'>STM32</font>学习——端口复用及映射
MDK中STM32无法用printf()的问题
在用MDK调试STM32板子串口时,为了方便串口调试,调用了printf()函数,但是把.hex文件烧写进板子后却发现串口接收不到任何数据。用Keil仿真是,串口可以正确的输出。有点纳闷,然后调用USART_SendData()函数,发现串口可以接收到正确的数据,证明串口配置没有问题,问题应该是出在printf()函数上,参照ST公司的printf例子也不能在串口输出数据。由此可知应该是软件配置的原因。后面,百度,再AVR论坛上找到了答案。 如果使用的是MDK,请在工程属性的 Target -》 Code Generation 中勾选 Use MicroLIB 进行如上设置后编译一下,串口输出正确的数据。 #ifndef
[单片机]
Linux帧缓冲设备驱动程序框架及图形界面GUI的移植
硬件平台   S3C2410X是三星公司的基于ARM920T的S3C2410X芯片。S3C2410X集成了一个LCD控制器(支持STN和TFT带有触摸屏的液晶显示屏)、SDRAM、触摸屏、USB、SPI、SD和MMC等控制器,4个具有PWM功能的计时器和1个内部时钟,8通道的10位ADC,117位通用I/O口和24位外部中断源,8通道10位AD控制器,处理器工作频率最高达到203MHz。   S3C2410中的LCD控制器可支持单色/彩色LCD显示器。支持彩色TFT时,可提供4/8/12/16位颜色模式,其中16位颜色模式下可以显示65536种颜色。配置LCD控制器重要的一步是指定显示缓冲区,显示的内容就是从缓冲区中读出的,其大小
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved