This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294NCPDT:Lora 器件问题

Guru**** 2782615 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/880903/tm4c1294ncpdt-lora-device-issue

器件型号:TM4C1294NCPDT

大家好、

我现在请大家发言、因为我在使两个 LoRa 器件相互通信方面遇到了问题。
我购买了两个 SX1261DVK1BAS 开发套件、并将其中一个套件分开、将 SX1261卡集成到 TM4C129的卡中。
目标是让主器件与 TM4C129配合使用、让从器件与第二个开发套件配合使用。
我对这些参数进行了相同的配置、以便允许它们进行通信。

我的问题是、当我尝试发送第一个信号时、第二个信号不接收任何信号、当我发送第二个信号时、第一个信号也不接收任何信号。

但是,我认为我在初始化级别做了正确的事情,端口和主端口的配置...

我有点绝望、真的不知道如何解决问题。

非常感谢你的帮助

初始化:

void SX126x IoInit( void )
{/*
CS */
MAP_GPIOPinTypeGPIOOutput (RADIO_NSS);//output
GPIOPinWrite (radio_NSS、GPIO_PIN_4);//mise à 1 de la pin

//忙
GPIOPinWrite (RADIO_BUSY、0);//mise à 0 DE LA 引脚
MAP_GPIOPinTypeGPIOInput (RADIO_BUSY);//输入
GPIOPadConfigSet (RADIO_BUSY、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU);//上拉已启用

// IRQ */
MAP_GPIOPinTypeGPIOInput (RADIO_DIO_1);//输入
GPIOPinWrite (RADIO_DIO_1、0);//mise à 0 de la 引脚
MAP_GPIOIntEnable (RADIO_DIO_1);
GPIOPadConfigSet (RADIO_DIO_1、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD_WPU);//上拉启用

/* ANT SW*/
GPIOPinWrite (RADIO_ANT_SWITCH_POWER、0);//mise à 0 de la 引脚
MAP_GPIOPinTypeGPIOOutput (RADIO_ANT_SWITCH_POWER);//output

/* reset *
GPIOPinWrite (RADIO_RESET、0);//mise à 0 de la 引脚
MAP_GPIOPinTypeGPIOOutput (RADIO_RESET);

/* SPI SSI1 */
SysCtlPeripheralEnable (SYSCTL_Periph_SSI1);

GPIOPinConfigure (GPIO_PB5_SSI1CLK);
GPIOPinConfigure (GPIO_PE4_SSI1XDAT0);// MOSI (TX)
GPIOPinConfigure (GPIO_PE5_SSI1XDAT1);// MISO (RX)

GPIOPinTypeSSI (SPI_CLOCK);
GPIOPinTypeSSI (SPI_MOSI);
GPIOPinTypeSSI (SPI_MISO);

SSIConfigSetExpClk (SSI1_base、
HRD_u32SysClock、
SSI_FRF_MOTO_MODE_0、
SSI_MODE_MASTER、
SX126x_bit_rate、
SX126x_data_lenight);

SSIEnable (SSI1_base);
}

void SX126xIoIrqInit (void)
{
MAP_IntEnable (INT_GPIOC);
MAP_GPIOIntTypeSet (RADIO_DIO_1、GPIO_RISE_EDGE);
MAP_IntPrioritySet (INT_GPIOC、(6 << 5));
} 

void SX126x 重置( void ){

HRD_vdDelayM(10);

MAP_GPIOPinWrite (RADIO_RESET、0);

HRD_vdDelayM(20);

MAP_GPIOPinWrite (RADIO_RESET、GPIO_PIN_4);

HRD_vdDelayM(10);
}


void SX126xAntSwOn( void ){

GPIOPinWrite (RADIO_ANT_SWITCH_POWER、GPIO_PIN_2);//mise à 1 de la 引脚
}

void SX126x AntSwoff (void)
{
GPIOPinWrite (RADIO_ANT_SWITCH_POWER、0);//mise à 0 de la 引脚
} 

主要:

const uint8_t PingMsg[]="ping";
const uint8_t PongMsg[]="pong";

uint16_t BufferSize = buffer_size;
uint8_t Buffer[buffer_size];

states_t State = LOWPOWER;

INT8_t RssiSize = 0;
INT8_t SnValue = 0*!


*无线电事件函数指针
*/
static RadioEvents _t RadioEvents;

/*!
*\brief 函数在无线电 Tx DONE 事件上执行
*/
void OnTxDone (void)
{
radio.sleep();
状态= TX;
}

/*!
*\brief 函数,在无线电接收完成事件上执行
*/
void OnRxDone (uint8_t *有效负载、uint16_t 大小、int16_t RSSI、INT8_t SNR)
{
radio.sleep();
buffersize =大小;
memcpy( Buffer, PAYLOAD, BufferSize );
RsiValue = RSSI;
SnrValue = SNR;
状态= RX;
}

/*!
*\brief 功能在无线电 Tx 超时事件上执行
*/
void OnTxTimeout( void ){

radio.sleep();
状态= TX_TIMEOUT;
}

/*!
*\brief 功能在 Radio Rx Timeout 事件上执行
*/
void OnRxTimeout( void ){

radio.sleep();
状态= RX_TIMEOUT;
}

/*!
*\brief 功能在无线电接收错误事件上执行
*/
void OnRxError( void ){

radio.sleep();
状态= RX_ERROR;
}

void LoRA_Task (void * pvParrameters)
{
bool isMaster = true;
uint8_t i;

//目标板初始化
SX126x IoInit();
// SSI1_init_DYN ();

//无线电初始化
RadioEvents.TxDone = OnTxDone;
RadioEvents.RxDone = OnRxDone;
RadioEvents.TxTimeout = OnTxTimeout;
RadioEvents.RxTimeout = OnRxTimeout;
RadioEvents.RxError = OnRxError;

Radio.Init(无线电通风口);

radio.SetChannel( rf_frequency );

radio.SetTxConfig (MODE_Lora、TX_OUTPUT 功率、0、Lora 带宽、
Lora_Spreading_factor、Lora_CODINGRATE、
Lora_帧 头_length、Lora_fix_length_payload_on、
true、0、0、Lora IQ_翻转_on、3000);

radio.SetRxConfig (MODEM_Lora、LROA_bandwidth、LROA_Spreading_factor、
LOLA_CODINGRATE、0、LOLA_PREAMING_LENGTH、
Lora_symbol_timeout、Lora_fix_length_PAYLOAD_ON、
0、true、0、0、Lora_iq_in翻转_on、 true );

radio.rx( RX_TIMEOUT_VALUE );

while (1)
{
Switch(状态)
{
案例 RX:
if (isMaster == true)
{
if (BufferSize >0)
{
if (strncmp( const char*) Buffer,( const char*) PongMsg,4)=0)
{
//发送下一个 ping 帧
strcpy( charg*) Buffer ( char*) PingMsg );
//我们用有效载荷的数字填充缓冲区
for (i = 4;i < BufferSize;i++)
{
Buffer[i]= i - 4;
}
HRD_vdDelayMs(1000);
RADIO .Send (缓冲区、缓冲区大小);
}
否则 if (strncmp(( const char*) Buffer,( const char*) PingMsg,4)=0)
{//主设备已存在,然后成为从设备
isMaster = false;
//发送下一个乓帧
strcpy( charg*) Buffer ( char*) PongMsg );
//我们用有效载荷的数字填充缓冲区
for (i = 4;i < BufferSize;i++)
{
Buffer[i]= i - 4;
}
HRD_vdDelayMs(1000);
RADIO .Send (缓冲区、缓冲区大小);
}
else //接收有效,但不显示 ping 或 pong 消息
{//将设备设置为主设备应答再次开始
isMaster = true;
radio.rx( RX_TIMEOUT_VALUE );
}
}

其他
{
if (BufferSize >0)
{
if (strncmp( const char*) Buffer,( const char*) PingMsg,4)=0)
{
//将回复发送到 ping 字符串
strcpy( charg*) Buffer ( char*) PongMsg );
//我们用有效载荷的数字填充缓冲区
for (i = 4;i < BufferSize;i++)
{
Buffer[i]= i - 4;
}
HRD_vdDelayMs(1000);
RADIO .Send (缓冲区、缓冲区大小);
}
else //接收有效,但 ping 不符合预期
{//将器件设置为主器件并重新启动
isMaster = true;
radio.rx( RX_TIMEOUT_VALUE );
}
}

状态= LOWPOWER;
中断;
案例 TX:
if (isMaster == true)
{
//debug ("Ping ...\r\n");
}
其他
{
//debug ("Pong...\r\n");
}
radio.rx( RX_TIMEOUT_VALUE );
状态= LOWPOWER;
中断;
案例 RX_TIMEOUT:
if (isMaster == true)
{
//发送下一个 ping 帧
strcpy( charg*) Buffer ( char*) PingMsg );
for (i = 4;i < BufferSize;i++)
{
Buffer[i]= i - 4;
}
HRD_vdDelayMs(1000);
RADIO .Send (缓冲区、缓冲区大小);
}
其他
{
radio.rx( RX_TIMEOUT_VALUE );
}
状态= LOWPOWER;
中断;
RX_ERROR 案例:
//我们收到了一个带有 CRC 错误的数据包,像数据包正确一样发送应答
if (isMaster == true)
{
//发送下一个 ping 帧
strcpy( charg*) Buffer ( char*) PingMsg );
for (i = 4;i < BufferSize;i++)
{
Buffer[i]= i - 4;
}
HRD_vdDelayMs(1000);
RADIO .Send (缓冲区、缓冲区大小);
}
其他
{
//发送下一个乓帧
strcpy( charg*) Buffer ( char*) PongMsg );
for (i = 4;i < BufferSize;i++)
{
Buffer[i]= i - 4;
}
HRD_vdDelayMs(1000);
RADIO .Send (缓冲区、缓冲区大小);
}
状态= LOWPOWER;
中断;
案例 TX_TIMEOUT:
radio.rx( RX_TIMEOUT_VALUE );
状态= LOWPOWER;
中断;
案例 LOWPOWER:
中断;
默认值:
状态= LOWPOWER;
中断;
}

//处理无线电 IRQ
if (Radio.IrqProcess!= NULL)
{
radio.IrqProcess ();
}

HRD_vdDelayM(10);
}
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    你已经为自己设置了一个任务-你不是吗?   通常(远)更基本的项目应成功完成-在尝试之前、"mt. 珠穆朗玛峰。"

    您会注意到您的" MCU 初始化"是正确的。   不是!   对于一个关键示例-查看"GPIOPinWrite()"的"表单"-放置在下面:

    GPIOPinWrite (uint32_t ui32Port、uint8_t ui8引脚、uint8_t ui8Val)

    显然需要三个参数-但是您的代码(重复-也许总是)仅使用两个参数!

    GPIOPinWrite (RADIO_NSS、GPIO_PIN_4);   

    您必须遵循 API 的代码格式-"原始性"的空间(很少)。    这只是我的员工发现的一个错误-"您"必须确保您的代码"符合供应商 API 指定的格式。"

    下面是一个快速诊断步骤:

    • 查看所有使用的代码函数-确保它们"符合 API 的格式"。
    • 您的设备的两侧是否均已正确供电?   您是否在运行期间进行过测量?
    • 任务2 (在使代码与 API 达成协议后)是确认 MCU 的 SPI 输出符合规格。   是否确定"飞思卡尔模式0正确?"
    • 一定程度的射频监控能力将会证明非常有用。   您应该确认您的对讲机的 SPI"负载"导致了射频输出。   (有时一个简单的 AM 无线电-放置在2-3 cm 的无线电中-可以检测传输)  模拟器件产生成本低但(相当强大)的射频检测器 IC -有些在评估板上。   (确认对讲机正在发射)
    • 将发送的"太复杂"代码(即字符串)(希望也能收到)替换为" 30个字符的突发"-您的目标是简单地确认传输、然后确认基本接收
    • 删除(大部分)最基本的启用传输和接收的代码。   考虑"kiss"-简化、测量-一次执行一个小步骤(并测量/确认)!

    您必须有条不紊地进行(如上述指南)、才能有效地取得成功...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [引用 user="Valentin de Vargas "]当我尝试发送第一个信号时,第二个信号不接收任何数据[/引用]

    您从主器件发送了什么信号?

    无论您所谈论的信号是 GPIO 信号还是 SSI 信号、请使用示波器来确定假定的信号是否来自器件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    我们的帖子被交叉参考-海报在其"GPIOPinWrite()函数调用中有严重错误-他的代码(原样)"无机会"工作...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 CB1、

     感谢您查看海报的代码和所有建议!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 CB1_MOBILE、非常感谢您的观看!

    • 很抱歉,我没有给您提供.h 文件,所以从您的角度来看,API 的格式不好是很正常的,但实际上我有:
    #define RADIO_RESET GPIO_PORTC_BASE、GPIO_PIN_4
    #define RADIO_NSS GPIO_PORTB_BASE、GPIO_PIN_4
    #define RADIO_BUSY GPIO_Porth_BASE、GPIO_PIN_0
    #define RADIO_DIO_1 GPIO_PORTC_BASE、GPIO_PIN_5
    #define RADIO_ANT_SW_PWR GPIO_PORTD_base、GPIO_PIN_2
    #define SPI_CLOCK GPIO_PORTB_BASE、GPIO_PIN_5
    #define SPI_MOSI GPIO_Porte _BASE、GPIO_PIN_4
    #define SPI_MISO GPIO_Porte _BASE、GPIO_PIN_5 

    这不是 API 的格式问题、因为我的代码编译良好。

    我多次验证了所有这些端口和引脚、一切都正常。

    • 我已经尝试只保留 一个 ping 缓冲区、并且 SEND 函数是尽可能最基本的、但它也不起作用。

    • 当我将开发套件置于主模式并且在我发送消息时、DIO2在发射期间为1、在发射前后为0。 但对于具有 TM4C 的模块、DIO2永远不会为1、而是保持为0。 因此不发送任何内容。

    • 当您说“飞思卡尔模式0正确”时,您的意思是什么?  
    您能更好地向我解释一下您的意思吗? 


    我的代码中有问题(可能在初始化期间),但我找不到它... :'(
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    蔡国能、感谢您的参与!

    事实上,我尝试发送一个基本的“ping”信号:

    #define RX_TIMEOUT_VALUE 10000
    #define buffer_size 8 //在此处定义有效载荷大小
    
    
    #define RF_FREQUENCY 868000000 // Hz
    
    #define TX_OUTPUT 功率 14. // dBm
    
    #define Lora_bandwidth 2. //[0:125kHz、
    // 1:250kHz、
    // 2:500kHz、
    // 3:保留]
    #define Lora 扩展因子 9. //[SF7..SF12]
    #define LLA_CODINGRATE 1 //[1:4/5、
    // 2:4/6、
    // 3:4/7、
    // 4:4/8]
    #define Lora 前导码_length 8. //对于 Tx 和 Rx
    #define Lora_symbol_timeout 也是如此 0 //符号
    #define LOLA_FIX_LENGTH_PAYLOAD_ON false
    #define Lora IQ_翻转_on false
    
    #define SX126x_bit_rate 10000000 //10MHz
    #define SX126x_data_lenight 8. //8位数 

    我认为我的 SPI 信号不好,因为我没有收到任何信号,但我的 MISO (RX)上总是有一些东西,即使我没有收到任何信号...

    我认为它来自 Dataput/Dataget、但我找不到什么问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Valentin de Vargas "]我认为我的 SPI 信号不好,因为我没有收到任何信息,但我的 MISO (RX)上总是有一些东西,

    您有两个板。 我假设您是从 TM4C129主板的角度讨论的、对吧? 您说您在主板(TM4C129板)上看到 MISO、但在 MOSI 上看不到 MISO。 这是正确的理解吗? 如果您的 TM4C129主板是 SPI 主板、则是生成 SPI 时钟的主板。 如果从板看不到 SPICLK、它如何驱动数据? 您能否显示示波器捕获、并可能绘制预期波形以及您在示波器上看到的波形。  

    [引用 user="Valentin de Vargas "]我认为它来自 Dataput/Dataget,但我找不到什么问题。

    您尚未显示任何有关如何调用 SSIDataPut 和 SSIDataGet 的代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您的详细解释证明非常有用-您报告的内容"意外"、但(如您所注意到的)完全正确。

    [引述 USER="Valentin de Vargas ]您说" 飞思卡尔模式0是否正确"是什么意思?  [/报价]

    您的代码注释:

    SSIConfigSetExpClk (SSI1_base、
    HRD_u32SysClock、
    SSI_FRF_MOTO_MODE_0、
    SSI_MODE_MASTER、
    SX126x_bit_rate、
    SX126x_data_lenight);

    它是(始终) SPI 连接的器件、是"老板"- MCU (通常能力更高)必须适应并满足连接的器件。   因此、我要求您确认您的 LoRa 设备确实采用 Freesce/Motorola 模式0。   这现在是否更清楚?

    请理解、我的团队不"知道"您的 LoRa 设备-我们(通常)在工作日结束之前、无法为"新的/探索性学习"(即您的设备手册)投入足够的时间。   注意:如果您可以"证明您选择(该)特定 LoRa 器件的合理性"(优于其他器件)、我们可能会"花更多时间来调查其要求。"   (因此我们可以考虑购买该产品-供将来使用... 也许)

    [引用 user="Valentin de Vargas "]当我将开发套件置于主模式并且在我发送消息时,DIO2在发射期间为1,在发射前后为0。[/引用]

    这是一个很棒的知识-非常好&谢谢!   现在、我们询问"是否有任何器件(即 MCU 或硬件)连接到无线电以启用(宽松、自动、演示)"发送 无线电消息"。  (仅使用开发套件的组件-而不是'129 MCU!)   如果我的员工"和您在一起"-我们"接入"这些互连信号-记录它们-然后(稍后)"将这些信号从您的'129 MCU 发送到无线电。"   你曾尝试过这种情况吗?

    在某种"演示模式"下使用对讲机对时、您尚未注意到"任何成功"。   是否存在此类演示模式?   如果是,我们强烈建议您“在每一端捕捉并记录传输到无线电的每个信号。。。。。。。。。。 "

    这将促进进一步的进展-或进一步的问题-我们(通常)部署无线电、并且应该能够帮助您实现通信成功...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、再说一次、

    我们已努力(进一步)调查您的试剂盒-多个"意外"结果。   (随您的动机一起提供 M4、工作频率@ 168MHz (更快)的 ARM Cortex、因为该套件包含一个 DAC 并已进行预编程!)   为什么你会从这种情况中退却,特别是当大部分工作已经连续完成时?

    您的开发套件包括:

    此外、还包含详细的 PC 软件、并且(其他/更快) ARM M4 MCU "已预编码并经过测试"。   开发套件的成本为~300 (美元)-这是我们所期望的(多次)。

    这些问题的结果是:

    • 您有两个这样的套件吗?   (以便您可以在两者之间进行通信?)   价格是两倍吗?
    • 如果您能够"通信间"、则应能够监控(并记录/记录)(包含的) TX 侧 MCU 与主(发送)无线电之间的 SPI 总线流量。
    • 然后、您的任务是对您的"替换"MCU 进行编程、以复制您(成功)"演示激活"期间捕获的 SPI 波形。

    通过系统地工作、您应该能够确定(哪个) SPI API 函数生成"开发套件的 SPI 波形"。   (这是"反向工程"的常用(和经证实的)方法。)

    您的应用程序是一种高级应用程序-具有(许多)"道路上的曲折"... 其中有几项证明"难以理解"。   即使符合承诺的"LoRa"扩展范围、我的团队也会提供"额外时间"、以便在各种"天气、无线电位置、天线和操作条件"下全面正确地测试无线电连接、直到那时"推荐的无线电链路。"    祝您好运...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    蔡国荣、

    实际上、在 MOSI 上、我可以看到寄存器地址和指令/配置的数据;这是正常的。

    但在 MISO 上、我可以看到一个信号、而在接收中没有预期的信号。

    我不知道该信号来自何处、但现在它可以工作、这是一个繁忙的问题。

    实际上、我没有使用引脚忙线、因此我在 WaitOnBusy 函数中写入了"while (MAP_SSIBusy (SSI1_base));"而不是"while (GPIOPinRead (RADIO_BUSY)= 0x01);"。

    但你看不到它、因为为了不用代码淹没我的帖子、我没有放好所有内容。

    例如,WaitOnBusy 函数为:

    void SX126x WaitOnBusy( void ){
    
    while (GPIOPinRead (RADIO_BUSY)= 0x01);
    // while (MAP_SSIBusy (SSI1_base));
    } 

    我之前告诉过的 Datapu/Dataget 函数是:

    void
    SSIDataPut (uint32_t ui32Base、uint32_t ui32Data)
    {
    //
    //检查参数。
    //
    assert (_SSIBaseValid (ui32Base));
    Assert (((ui32Data &(0xfffffffe <<)(HWREG (ui32Base + SSI_O_CR0)&
    SSI_CR0_DSS_M))= 0);
    
    //
    //等待,直至有空格。
    //
    while (!(HWREG (ui32Base + SSI_O_SR)& SSI_SR_TNF))
    {
    }
    
    //
    //将数据写入 SSI。
    //
    HWREG (ui32Base + SSI_O_DR)= ui32Data;
    }
    
    void
    SSIDataGet (uint32_t ui32Base、uint32_t * pu32Data)
    {
    //
    //检查参数。
    //
    assert (_SSIBaseValid (ui32Base));
    
    //
    //等待直至有数据要读取。
    //
    while (!(HWREG (ui32Base + SSI_O_SR)& SSI_SR_RNE))
    {
    }
    
    //
    //从 SSI 读取数据。
    //
    * pui32Data = HWREG (ui32Base + SSI_O_DR);
    }
    
    uint8_t SX126xSpiInOut (uint32_t base、uint8_t datain)
    {
    uint32_t dataOut = 0;
    
    SSIDataPut (base、datain);
    SSIDataGet (base、dataOut);
    
    while (map_SSIBusy (base));
    
    返回(uint8_t) dataOut;
    } 


    我意识到,如果没有所有这些信息,你和 CB1_MOBILE 都无法帮助我:'(

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 CB1_MOBILE、非常感谢您的调查。

    关于"SSI_FRF_MOTO_MOTO_MODE_0"的问题、是的、我确信它是正确的、因为我们处于上升沿、极性0和相位0。

    就像我对蔡夏说的那样,今天它在工作!!

    问题在于忙线引脚利用率,但我没有给您提供此代码,所以您找不到它...

    ^^回答您对套件的问题、我有两个套件、每个套件约300$

    我的目标是将经过认证的电路板与 TM4C129重复使用、以实现 LoRa 项目。 将要使用的模块是 sx1262、但开发套件在欧洲尚不存在、因此我学习了 Lora 功能、并使用 sx1261版本、以便能够与 TM4C129配合使用。

    我知道我可以发送 LoRa 信号、因为第二个 LoRa 开发套件可以看到我的发送、但信号格式肯定不像开发套件所期望的那样、因为它看起来是"ko"而不是"OK"。

    对于接收来说、它的工作效果相当好、因为我接收到缓冲器消息和 RSSI、一切看起来都是真实的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、再说一次、

    对你来说很好——持久是有回报的。

    说到持久性-我们建议您提供"足够的时间和精力"以确保您的无线电链路成功:

    • 不同的时间
    • 在不同的天气条件和温度下
    • 即使"来自各种来源的强本地信号"到达也是如此

    虽然"LoRa 的吸引力"是在较低功耗安装中实现范围扩展和/或提高信号稳健性-请注意、每端的"天线系统"发挥着"高度重要"的作用。   (可能是最重要的角色!)   如果链路是固定的-高方向天线将加强信号路径、同时"限制不需要/外来信号的级别!"   (除非您特别"不幸运"-并且这些"违规"信号位于天线的定向路径中...)