历史上的今天
今天是:2025年03月06日(星期四)
2020年03月06日 | STM32开发笔记87: SX1268驱动程序设计(设置为STDBY模式)
2020-03-06 来源:eefocus
单片机型号:STM32L053R8T6
本系列开发日志,将详述SX1268驱动程序的整个设计过程,本篇介绍将芯片设置为STDBY模式的相关驱动程序。
一、STDBY模式
芯片上电、复位和从睡眠模式唤醒,都会从Startup模式自动进入到STDBY模式。STDBY模式又称为待机模式或者旁路模式。
在待机模式下,主机应在进入RX或TX模式之前配置芯片。默认情况下,系统选择13MHZ的RC振荡器,以降低功耗。除睡眠模式外,其它模式XTAL时钟处于打开状态。然而,只有在应用程序对时钟要求严格,我们才需要打开XOSX模块,并让它始终处于打开状态。
待机模式下的XOSC或RC13M选择由命令SetStandby(…)中的模式参数决定。只使用RC13M的模式称为STDBY_RC,打开XOSC的模式称为STDBY_XOSC。
如果要使用DC-DC,则应在电路处于STDBY_RC模式时使用SetRegulatorMode(…)命令进行选择,当进入STDBY_XOSC模式时,DCDC会自动打开。DCDC使用RC13M时钟,当目标电压比DC-DC低50 mV时,LDO将保持活跃状态。
二、SetStandby函数
The command SetStandby(...) is used to set the device in a configuration mode which is at an intermediate level of consumption. In this mode, the chip is placed in halt mode waiting for instructions via SPI. This mode is dedicated to chip configuration using high level commands such as SetPacketType(...).(SetStandby函数使得芯片进入一个配置模式,这个模式消耗中等水平的能量。在这个模式下,芯片处于停滞状态,以等待SPI指令。这个模式专门用于使用高级命令对芯片进行配置,例如SetPacketType)
By default, after battery insertion or reset operation (pin NRESET goes low), the chip will enter in STDBY_RC mode running with a 13 MHz RC clock.(在缺省方式下,上电或硬复位后,芯片处于STDBY_RC模式,使用内部13M RC时钟)


相关驱动程序如下:
typedef enum
{
STDBY_RC = 0x00,
STDBY_XOSC = 0x01,
}RadioStandbyModes_t;
void CSX1268::SX126xSetStandby(RadioStandbyModes_t standbyConfig)
{
SX126xWriteCommand(RADIO_SET_STANDBY, (uint8_t*)&standbyConfig, 1);
if(standbyConfig == STDBY_RC)
{
OperatingMode = MODE_STDBY_RC;
}
else
{
OperatingMode = MODE_STDBY_XOSC;
}
}
程序调用SX126xWriteCommand函数写入相关命令,然后根据相关参数,设置相应的模式。改进后的SX126xWriteCommand函数程序如下:
void CSX1268::SX126xWriteCommand(RadioCommands_t command, uint8_t *buffer, uint16_t size)
{
SX126xCheckDeviceReady( );
Target.DisableInterrupt();
this->Select();
this->WriteByte((uint8_t)command);
for(uint16_t i = 0; i < size; i++)
{
this->WriteByte(buffer[i]);
}
this->Deselect();
Target.EnableInterrupt();
if( command != RADIO_SET_SLEEP )
{
SX126xWaitOnBusy( );
}
}
程序首先调用SX126xCheckDeviceReady函数,判断芯片的当前状态,然后关闭全局中断(进入临界区),通过SPI总线向芯片发送命令,命令发送完毕后打开全局中断(离开临界区)。最后判断,如果不是进入SLEEP模式,就等待芯片的BUSY引脚为低。
接下来,我们再看SX126xCheckDeviceReady函数,程序如下:
void CSX1268::SX126xCheckDeviceReady(void)
{
if((this->OperatingMode == MODE_SLEEP) || (this->OperatingMode == MODE_RX_DC))
{
SX126xWakeup();
SX126xAntSwOn();
}
SX126xWaitOnBusy();
}
程序判断当前工作模式是否是SLEEP或RX_DC,如果是则调用唤醒函数,并打开天线开关。对于上电或应复位,我们只需在程序起始时,设置模式为SLEEP,就可以使该函数生效。程序最后,判断BUSY引脚是否为低,以确认芯片是否可以接收SPI指令。
史海拾趣
|
WINCE4.2安装时出错,错误提示如下: Error 21337.Setup encountered problems installing some critical emulation components.You may continue the install,but the emulator may not work .Would you like to continue setup? 哪位高手知道是什 ...… 查看全部问答> |
|
Wince下CAN驱动开发,每次发送数据时,CAN设备总是接收到多个数据帧 我在WinCE下开发MCP2515的CAN驱动程序,硬件是TQ2440的开发板,CPU是S3C2440,现在的问题是,每次发通过MCP2515发送数据的时候,我总是可以接收到多个CAN数据帧,而且每次接收到的CAN数据帧的数量也不同,我也把MCP2515设置成了单次触 ...… 查看全部问答> |
|
如果不是宽字符可以用长度辨别 但是在宽字符下不管是中文还是英文都是 长度都是1 这个怎么辨别是中文呢? 还有 如果我要出字符串中搜索到是否含有某个汉字 这个是通过怎么搜呢? 我在 edit控件中输入 方 然后把这个方放入wchar_t *st ...… 查看全部问答> |
|
我现在一个问题就是做gis,能显示地图,导航什么的 我用的是xsbase270,处理器是intel pxa270。 evc 4.0。 开始的时候我想用esupmap5.0,但是esupmap5.0试用版的没有我硬件平台的函数库.也不支持vs2005 有pocketpc2003的函数库. 所以我现在的方 ...… 查看全部问答> |
|
如题,EPIAddressMapSetEPIConfigSDRAMSetEPIAddressMapSet这些函数的使用说明找不到啊。请有的兄弟给分享下。先谢过了。… 查看全部问答> |
|
小弟我虚心请教,跪求各位高手解答!在线等!!!!!!! 在线等!!!!!!! 小弟我虚心请教,跪求各位高手解答。我想用单片机实现电压的转换。大致要求如下: 输出端有2个:x和y. 输入端为p1到p9. p1,p2,p3为一组,p4,p5,p6为一组,p7,p8,p9为一组。p1端输入5v电压时,x端输出5v,y端输出0v;p3端输入5v时,x端输 ...… 查看全部问答> |
|
TI的集成PHY的M4,TM4C129可出来了在TI的网站上面 http://www.ti.com.cn/lsds/ti_zh/microcontroller/tiva_arm_cortex/c_series/tm4c129x_series/overview.page?paramCriteria=no TI的集成PHY的M4,TM4C129可出来了在TI的网站上面… 查看全部问答> |
|
本帖最后由 ddllxxrr 于 2015-3-31 10:12 编辑 好像有个网络小说叫《向左走,向右走》。说是男女主人公隔着一道墙,每天上班都看不到对方,后来好像还没看到就拉倒了。其实,这个东西是一种缘份,有的人有缘没有份,有的有份无缘。实现中,小说里 ...… 查看全部问答> |




