尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

基于STM32的SX1262 LoRa全套设计资料:从原理图到代码调试

基于STM32的SX1262 LoRa全套设计资料:从原理图到代码调试 简介本资源是一套面向嵌入式物联网开发者的完整STM32SX1262 LoRa无线通信设计资料包适用于初学者入门学习与工程师快速落地LoRa节点开发。资料涵盖硬件设计含接线示意图、PCB封装、驱动开发基于SPI接口的初始化与收发Demo程序、芯片级支撑文档SX1262数据手册、模块规格书及工程实践要点中断配置、低功耗模式适配、常见通信异常处理思路全面覆盖从原理理解到板级调试的全链路需求。压缩包共7.98MBRAR格式包含原理图、源代码、技术文档等多类型文件结构清晰、即拿即用。目前已有1541人学习下载特别适合开展远距离低功耗传感器网络、智能表计、农业物联网等STM32LoRa典型应用场景开发。 做LoRa项目绕不开SX1262这颗芯片。这两年不管是做抄表、传感器采集还是野外组网SX126x系列都快成标配了网上资料虽然多但大部分都是零散的、不完整的能跑起来的程序不好找原理图更是五花八门照着画完发现匹配电路不对通信距离根本拉不上去。我这套基于STM32的SX1262全套设计资料包含完整可编译的工程代码、详细的原理图和PCB设计文件以及从零到一的基础说明文档正好能解决这个问题。无论你是刚接触LoRa的初学者还是想把项目快速落地的工程师这套资料基本能覆盖你从硬件设计到软件调试的全部需求。先说清楚这套东西能干什么。SX1262是Semtech推出的LoRa射频收发芯片相比上一代SX1278它的灵敏度更高、功耗更低、体积更小支持150MHz到960MHz的宽频段范围最远通信距离在理想环境下能到十几公里。我这边整套设计基于STM32F103系列MCU使用SPI接口与SX1262通信程序使用标准库编写结构清晰方便移植到STM32全系列芯片。1. 内容整体设计与思路拆解1.1 为什么选择STM32 SX1262这个组合先聊聊选型。LoRa方案里常见的是SX1276/SX1278和SX1262这两代芯片SX126x系列出来之后Semtech把射频前端做了很大的优化尤其是接收灵敏度这块SX1262在SF10、125kHz带宽的条件下能做到-137dBm左右比SX1278要好几个dB。别小看这几个dB在无线通信里接收灵敏度每提升3dB相当于通信距离增加约40%这在实测中非常明显。STM32就更不用多说了生态成熟、资料多、成本低F103系列价格也很亲民与SX1262的SPI接口对接非常方便。这套资料里我选用的是STM32F103C8T6这颗芯片也就是大家常说的“蓝丸”核心板20块钱左右就能买到非常适合前期验证和原型开发。如果你项目最终要量产换用STM32F030或者G0系列也完全没问题程序移植成本很低。1.2 整套资料包含哪些内容拿到这套资料后你会看到以下这些内容完整的MDK5工程源码底层驱动、应用层逻辑、收发测试代码全部包含打开就能编译下载。原理图和PCB文件基于Altium Designer绘制包含SX1262最小系统电路、射频匹配网络、天线接口、电源电路等。数据手册和参考文档包括SX1262芯片数据手册、官方应用笔记、我整理的设计检查清单。调试工具和烧录说明包括使用STM32 ST-LINK Utility烧录程序的具体步骤以及串口调试的配置方法。这些资料不是网上随便能凑齐的尤其是射频匹配电路那部分很多开源项目直接把参考设计抄过来但PCB布局和元件选型不合适导致实际效果大打折扣。我这里用的是经过实际测试验证过的方案你按照资料里的参数来做通信性能是有保障的。1.3 方案的逻辑闭环从硬件到软件一次打通整套设计的思路是让你能独立完成一个可用的LoRa节点。硬件部分从SX1262最小系统到天线匹配再到与STM32的接口连接每一处都有明确的电路说明软件部分从SPI底层的读写函数到SX1262的寄存器配置再到LoRa数据包的发送接收一层一层剥开让你看得明白、改得动。我特别想强调一点LoRa射频芯片的驱动和普通外设不一样它不仅仅是配置几个寄存器就完事了。SX1262内部有一个比较复杂的状态机涉及到睡眠、待机、发送、接收等不同状态的切换而且数据和命令都通过SPI接口传输命令格式有严格的要求。这套资料里的驱动程序是我在实际项目里反复调试验证过的时序和状态切换都处理得很到位你直接照着用就行了。2. 核心细节解析与实操要点2.1 SX1262硬件设计的关键点先说原理图这一块。SX1262的外围电路主要包括电源供电、晶振、射频匹配网络、SPI控制和DIO中断这几个部分。电源方面SX1262的供电电压范围是1.8V到3.7V一般直接用3.3V供电就行但要注意电源的纹波尤其是接收模式下如果电源噪声太大会直接影响接收灵敏度。我建议在VCC引脚附近放一个10uF的钽电容和一个100nF的陶瓷电容这样能有效滤除低频和高频噪声。晶振这块要特别留意。SX1262工作需要一个32MHz的晶振同时还有一个32.768kHz的RTC晶振用于低功耗模式下的定时唤醒。32MHz晶振的精度直接影响射频频率的准确性所以必须选用精度在±10ppm以内的晶振而且两端要加匹配电容典型值是12pF到15pF具体要根据晶振的负载电容参数来确定。射频匹配网络是很多人容易忽略的地方。SX1262的RF引脚输出的阻抗不是标准的50欧姆所以需要加一个匹配网络把阻抗变换到50欧姆再接天线。这套资料里给出的匹配电路参考了官方EVM板的方案线路上串联了一个电感、并联了一个电容再接天线接口。这里要提醒大家匹配元件的值不是随手选的最好用网络分析仪实测调整如果手头没有仪器严格按照资料里的BOM表来采购元件通常也能达到不错的效果。DIO1和DIO2这两个引脚很关键DIO1是中断输出脚用来通知MCU各种事件比如发送完成、接收完成、CRC错误等DIO2一般用作射频开关控制如果模块有收发切换开关的话就用DIO2去控制。还有一个BUSY引脚它用来指示SX1262是否忙碌在每次给芯片发命令之前都要先检查BUSY引脚是否为低电平。这三个引脚要连接到STM32的GPIO上程序里会用到。2.2 SPI通信机制为什么需要单独处理BUSY引脚SX1262的SPI通信和普通SPI从设备有以下不同这点需要特别注意普通SPI从设备一般是CS拉低后直接发送命令或数据芯片能立即响应。但SX1262内部有命令处理逻辑在接收到SPI命令后需要一段时间来处理处理期间BUSY引脚会拉高。如果在BUSY为高的时候继续给芯片发命令命令会被忽略这就会导致通信错误。所以在每次发送命令之前必须轮询等待BUSY引脚变为低电平。在我的驱动程序里SX126x_CheckBusy这个函数就是做这件事的用while循环加超时机制的写法void SX126x_CheckBusy( void ) { uint32_t timeout 0xFFFF; while( ( HAL_GPIO_ReadPin( BUSY_GPIO_PORT, BUSY_GPIO_PIN ) GPIO_PIN_SET ) ( timeout 0 ) ) { timeout--; } if( timeout 0 ) { // 超时处理打印错误信息 } }这个写法在实际项目中非常重要如果不加超时一旦SX1262异常导致BUSY一直拉高程序就会死循环卡死。很多人在调试时遇到“STM32 SPI通信失败”或“芯片无响应”的问题十有八九就是忽略了BUSY引脚的等待。SPI速率方面SX1262支持的最高SPI时钟是16MHz但实际使用时建议不要跑满我一般设置在1MHz到8MHz之间即可。因为SPI速率太高时对布线要求就更严格而且电磁干扰也会变大在STM32F103上把SPI预分频配置为SPI_BAUDRATEPRESCALER_8主频72MHz时得到9MHz的SPI时钟完全够用。2.3 LoRa调制参数配置的核心逻辑LoRa技术的特点是通过扩频调制来获得高灵敏度但具体能获得多少增益取决于你配置的参数。SX1262和SX1278一样LoRa模式下有几个核心参数你需要理解清楚频率FrequencySX1262的频率范围是150MHz到960MHz通过寄存器配置我资料里默认设置的是470MHz或者490MHz这是国内合法的免许可频段适合做点对点和组网通信。扩频因子SF取值范围是SF5到SF12。扩频因子越大接收灵敏度越高但空中传输时间也越长数据速率越低。SF7和SF12相比灵敏度大约差11dB但速率差了几倍。带宽BWSX1262支持的带宽有125kHz、250kHz和500kHz。带宽越小灵敏度越高但速率越低。编码率CR取值范围是1到4表示的是前向纠错编码的冗余度。CR越大抗干扰能力越强但有效数据速率越低。参数怎么选取决于你的应用场景。如果是点对点传大量数据建议用SF7/BW125kHz/CR1能跑到大约5.5kbps的速率如果是追求最远通信距离那就用SF12/BW125kHz/CR4速率只有293bps左右但灵敏度可以到-137dBm。我程序里默认是SF10/BW125kHz/CR4这个组合在距离和速率之间比较均衡。还有一点要注意LoRa的数据包格式包括前导码、报头、可选的CRC校验和有效负载。如果收发双方要通信这些参数必须配置成一样的尤其要注意报头模式显式报头还是隐式报头如果一边开了显式报头另一边开了隐式报头那就解不出数据。程序里通过SX126x_SetLoRaModulationParams函数一次性把这些参数配置好使用时不需要关心底层细节。2.4 常见参数速查表为了让你用起来更省心我整理了一份常用的配置参数对应表场景推荐SF带宽编码率灵敏度参考有效速率最远距离SF12125kHz4/5-137dBm~0.3kbps长距平衡SF10125kHz4/5-132dBm~1kbps常规通信SF7125kHz4/5-124dBm~5.5kbps高速传输SF7250kHz4/5-121dBm~11kbps这套参数可以直接用在你的程序里main.c中的LoRaSettings结构体里就能修改这些字段改完之后重新编译下载即可。3. 实操过程与核心环节实现3.1 工程代码的整体结构这套资料的MDK5工程是按照标准库的工程模板来组织的打开后你能看到清晰的目录结构。核心的SX1262驱动部分放在Driver目录下包含以下文件sx126x.c/sx126x.h封装了SX1262的基础操作包括复位、读写寄存器、发送和接收命令等。sx126x-board.c/sx126x-board.h硬件相关的适配层包括SPI初始化、GPIO配置、延时函数等。radio.c/radio.h无线电抽象层把SX1262的操作封装成更友好的接口比如RadioInit、RadioSetTxConfig、RadioSend、RadioSetRxConfig、RadioRx等。main.c应用层代码展示了一个完整的“发送后再接收”的LoRa节点示例。这个分层的好处是上层应用代码不需要关心SX1262的具体操作调用的是radio层的接口如果要移植到别的平台只需要改sx126x-board.c这个文件就行其他部分基本不用动。3.2 初始化流程逐行拆解SX1262的初始化流程是整个程序能否正常工作的关键我一步步说清楚首先是GPIO和SPI的配置。把STM32的SPI1引脚PA5-SCK、PA6-MISO、PA7-MOSI、PA4-NSS配置为复用推挽输出和浮空输入BUSY引脚PB0配置为上拉输入DIO1PB1配置为下降沿中断输入RESETPB10配置为推挽输出。接着是SX1262的复位操作。把RESET引脚拉低至少100微秒然后再拉高芯片内部会执行上电复位。复位完成后要等待BUSY引脚变低表示芯片已经就绪。这一步很重要有些程序复位后不检查BUSY直接就发命令很容易出问题。然后是芯片的初始化配置按照以下顺序执行// 复位芯片 SX126xReset(); // 设置进入待机状态 SX126xSetStandby( STDBY_RC ); // 校准芯片内部电路 SX126xCalibrate( 0x7F ); // 设置数据包类型为LoRa SX126xSetPacketType( PACKET_TYPE_LORA ); // 设置射频频率为490MHz SX126xSetRfFrequency( 490000000 ); // 设置LoRa调制参数SF10, BW125kHz, CR4/5 SX126xSetLoRaModulationParams( 10, 125000, 4 ); // 设置数据包参数 SX126xSetLoRaPacketParams( 12, 0, 0, 1, 0 ); // 前导码12字节显式报头CRC使能 // 配置DIO1中断来源为发送完成和接收完成 SX126xSetDioIrqParams( 0x0003, 0x0003, 0x0000, 0x0000 );其中SX126xSetRfFrequency这个函数的参数不是直接的频率值而是需要转换成频点步进值。SX1262内部使用一个PLL分频器来生成射频频率输入参数的计算公式为rf_frequency ( frequency_hz * 2^25 ) / XTAL_FREQ其中XTAL_FREQ是晶振频率默认是32MHz。所以我程序里专门封装了一个函数来处理这个换算你不需要每次手动计算直接传MHz单位的频率进去即可。3.3 发送数据的完整过程发送数据在LoRa节点里是最核心的操作。这个过程分为配置发送模式、触发发送、等待完成中断三个步骤。配置发送模式时需要调用RadioSetTxConfig函数设置调制参数、输出功率和时间基准。我这里默认设置为输出功率22dBm实际使用时可以根据需要调整。需要注意SX1262的输出功率是通过一个0到22dBm范围的寄存器值来配置的直接写22表示最大功率。触发发送的代码逻辑如下void SX1262_SendData( uint8_t *data, uint8_t len ) { // 切换到待机模式 SX126xSetStandby( STDBY_RC ); // 写入要发送的数据 SX126xWriteBuffer( 0x00, data, len ); // 设置发送数据包的长度 SX126xSetLoRaPacketParams( 12, 0, 0, 1, len ); // 切换到发送模式芯片会自动在数据发送完成后产生DIO1中断 SX126xSetTx( 0xFFFF ); }注意SX126xSetTx里的参数是发送模式下的超时时间0xFFFF表示不启用超时一直等待发送完成。发送完成后DIO1引脚会产生一个中断信号在主程序的中断回调里我们要调用SX126xGetIrqStatus来读取中断状态确认是发送完成中断后清除中断标志然后才能进入下一次操作。我在调试过程中发现一个常见的坑发送完一包数据后没有等待中断标志清除就直接进入接收模式这会导致接收模式配置失败或者把上一包的残余数据当成有效数据。所以建议在发送完成和接收之间加一个小延时或者通过轮询标志位来确认状态机已经切回待机。3.4 接收数据的完整过程接收数据有两种模式单次接收和连续接收。单次接收是指芯片在指定时间内监听信道收到一包数据或者超时后自动回到待机状态连续接收则是芯片一直处于监听状态直到收到数据或收到停止命令。实际项目中如果节点是自己作为协调器接收多个节点上报的数据建议用连续接收模式。连续接收模式接收完成一包数据后需要软件重新调用RadioSetRxConfig并切换到接收模式才能继续接收下一包数据这不是自动的。接收流程的代码逻辑如下void SX1262_ReceiveData( void ) { // 设置接收配置包括调制参数、数据包参数等 SX126xSetLoRaModulationParams( 10, 125000, 4 ); SX126xSetLoRaPacketParams( 12, 0, 0, 1, 0 ); // 配置DIO1中断为收到数据包时触发 SX126xSetDioIrqParams( 0x0002, 0x0002, 0x0000, 0x0000 ); // 切换到连续接收模式 SX126xSetRx( 0xFFFF ); // 等待DIO1中断 while( 1 ) { if( dio1_flag 1 ) { dio1_flag 0; // 读取中断状态 uint16_t irqStatus; SX126xGetIrqStatus( irqStatus ); // 清除中断标志 SX126xClearIrqStatus( irqStatus ); // 判断是否是接收完成中断 if( ( irqStatus 0x0002 ) ! 0 ) { // 读取接收到的数据 uint8_t len 0; uint8_t buffer[256]; SX126xGetPacketStatus( NULL, NULL, len, NULL ); SX126xReadBuffer( 0x00, buffer, len ); // 处理数据... } else if( ( irqStatus 0x1000 ) ! 0 ) // CRC错误 { // 处理CRC错误... } break; } } }0x1000是CRC错误中断位在信道质量差的情况下接收到的数据包有比较大的概率出现CRC错误这时候我们需要去读取错误状态并丢弃该包不能让错误的数据进入上层应用。很多初学者在这里容易踩坑没判断CRC错误就直接把缓冲区里的数据拿出去用后面的解析逻辑就会出错。3.5 程序中的其他细节看门狗、串口和延时资料里的程序还加入了独立的看门狗IWDG功能这在长期无人值守的LoRa节点中是必要的。程序主循环每执行完一轮就调用IWDG_ReloadCounter喂狗一次。一旦某个环节卡死比如SX1262没有响应导致CheckBusy超时看门狗会把MCU复位让系统重新恢复正常。串口调试这块也要说一下。我默认使用了USART1作为调试输出接口波特率1152008位数据位、1位停止位、无校验。程序启动后会打印SX1262的初始化状态发送数据时会打印发送的数据内容和发送结果收到数据时会打印RSSI和SNR值方便你在调试窗口里直接观察通信质量。实测中RSSI值如果稳定在-90dBm以上说明信道质量不错如果低于-120dBm信号就比较弱了需要检查天线是否接好、是否在合适的频率点上。延时函数方面有些资料里会有“STM32延时函数delay卡死”的问题这是因为SysTick中断优先级配置不当导致中断嵌套死锁。我在程序里用的是一个基于SysTick查询方式的毫秒延时函数不依赖中断从根上避免了这个坑稳定性更好。4. 常见问题与排查技巧实录4.1 通信距离测试中发现的性能瓶颈我实际测试中遇到过几种典型的性能问题这里分享出来供参考。第一个是天线不匹配导致的通信距离骤降。用SX1262开发板外接天线时有一根天线是弹簧天线有一根是标准的433MHz胶棒天线接上之后发现用弹簧天线时的通信距离只有胶棒天线的一半不到。原因就是弹簧天线没有经过调谐阻抗严重偏离50欧姆导致射频能量反射回来真正辐射出去的能量很少。所以大家在选天线时一定要选择与SX1262工作频率匹配的天线433MHz天线就选433MHz的胶棒天线不能随便拿一根。第二个是电源纹波对灵敏度的影响。有一次我在调一个用锂电池供电的节点发现接收灵敏度比用USB供电时差了很多排查了半天最后用示波器量锂电模块的输出发现开关电源的纹波高达80mV以上而这个纹波直接耦合到了SX1262的供电端。后来在电源输出端加了一个LC滤波电路把纹波压到了20mV以内灵敏度就恢复正常了。如果你的SX1262节点用的是DC-DC供电建议在SX1262的VCC前加一级LDO或者LC滤波这部分资料里也有对应的参考电路。第三个是晶振频率偏移导致的频率偏差。SX1262如果长时间工作在温度变化剧烈的环境中晶振频率会发生偏移导致实际发射频率偏离设定值。如果收发双方都发生偏移接收灵敏度会进一步下降。解决办法是启动SX1262的TCXO选项在高精度模式下使用外部TCXO时钟源但这会增加成本和功耗一般室内环境下用普通晶振就够了。4.2 常见问题速查表问题现象可能原因解决方案SPI通信失败初始化卡死BUSY引脚等待超时或SPI时序不对检查BUSY引脚连接确认GPIO方向降低SPI速率到1MHz试试能发送但收不到数据频率、SF、BW参数两端不一致用串口打印双方的参数配置确认完全一致收到数据但CRC错误信道干扰强或天线不匹配检查天线连接换环境重试降低数据速率接收灵敏度差电源纹波大或匹配网络不对检查供电电路加LC滤波核对匹配元件值距离近信号弱天线频率不匹配或输出功率配置错误换用匹配的天线确认功率寄存器配置程序卡死看门狗超时或延时死循环用调试器定位卡在哪个函数检查外设时序4.3 烧录和调试工具的使用经验刚拿到资料时建议先不要改任何东西直接编译下载到板子上测试一下收发是否正常。烧录工具我推荐用ST-Link V2或者J-Link配合STM32 ST-Link Utility工具烧录速度快稳定性也好。注意ST-Link接线时SWDIO、SWCLK、GND三个引脚要接对不要接到复位脚和3.3V脚上。下载完程序后用串口连接调试口打开串口助手如果程序正常运行应该能看到启动信息和状态打印。然后准备两块板子一块设置成发送模式一块设置成接收模式进行互发测试。如果两个板子之间的距离比较远比如隔着几堵墙这时就要看RSSI值的变化RSSI越低说明信号越差可以通过调整天线方向、位置来改善。调试过程中我最常用的工具是一个USB转TTL串口模块和一根杜邦线有些板子可能没有板载串口需要自己接线。接线注意TX和RX交叉相连也就是板的TX接串口模块的RX板的RX接串口模块的TX共地。如果发现串口打印乱码十有八九是波特率不对再确认一下。4.4 移植到其他STM32型号时的几个注意点有些用户拿到资料后想移植到STM32F407或者STM32G030上这里有几个地方要特别注意。首先是SPI外设的引脚映射。STM32不同型号的外设引脚复用不完全一样比如F103的SPI1在PA5-PA7F407的SPI1也是这些引脚但G030的SPI1可能在PB3-PB5。你需要在GPIO_Init时正确配置对应的引脚否则SPI通信会失败。其次是RCC时钟树的配置。F103和F407的系统时钟频率不同F407可以跑到168MHzF103最高72MHz。如果直接用F103的时钟配置代码F407的SPI时钟分频出来可能不是想要的速率。建议拿到资料后先把系统时钟的初始化部分和SPI的分频系数重新核对一遍。还有一个经常被忽略的是中断优先级配置。SX1262的DIO1中断如果在中断回调函数里做了比较耗时的事情比如LED翻转、串口打印会拖慢中断响应。如果主程序对收发实时性要求比较高建议把DIO1中断优先级配置为高优先级中断回调里面只做标志位置位实际的数据处理放到主循环里。5. 后续功能扩展与实战建议5.1 基于这套资料的常见扩展方向这套资料如果只用来做点对点通信其实只发挥了SX1262的一半功力。实际项目中我见过很多基于这套底子扩展出来的应用LoRa网关节点组网MCU作为网关节点轮流接收多个远端节点的数据通过串口或以太网把数据上传到服务器。低功耗休眠唤醒SX1262支持唤醒词检测和定时唤醒功能结合STM32的STOP模式可以让节点在休眠状态下功耗降到微安级别适合电池供电的野外传感器。星型网络协议在SX1262的基础上封装一层简单的MAC层协议比如时分复用、频道跳频等能有效提升网络容量和抗干扰能力。边缘计算节点用STM32的ADC采集传感器数据通过LoRa发送到远端同时利用SX1262的RSSI功能做简单的定位。5.2 低功耗设计的具体实践经验如果你计划把LoRa节点做成电池供电以下几个点必须重视。第一是MCU的休眠策略。STM32F103的STOP模式功耗大约在几十微安加上SX1262的Sleep模式约2微安整体休眠电流控制在50微安以内是可以做到的。但要注意从STOP模式唤醒后系统时钟需要重新配置HSE要重新启动这部分的代码必须在唤醒后处理好。第二是SX1262的DIO2和DIO3的配置。如果你使用DIO2来控制射频开关在休眠模式下要确保DIO2的状态不会让射频开关误切换。我遇到过一个问题站在室外测试时主板休眠后SX1262的DIO2状态变化导致天线开关切换到了接收通道功耗突然升高。后来在休眠前强制把DIO2拉低才解决这个问题。第三是定时任务的设计。LoRa低功耗节点常见的应用是每10分钟醒来一次采集数据并上报然后再休眠。定时可以用SX1262内部的RTC来做也可以直接用STM32的RTC唤醒STOP模式这样MCU和SX1262都能保持极低功耗。我资料里附带了一个简单的定时休眠唤醒示例你可以在这个基础上改。5.3 我踩过的坑和最后几个建议最后复盘一下这套资料里最值得你们反复琢磨的地方。第一是原理图中的射频匹配网络这部分不懂射频的人可能看不出毛病但恰恰是整块电路板最容易出问题的地方。如果你在测试中发现通信距离明显达不到预期先检查贴片元件贴的是不是和BOM一致有些元件长得一样但参数差很多特别是电感丝印不清晰的话容易贴错。第二是SX1262寄存器操作时的字节顺序。SX1262的寄存器地址和数据都是8位的但是有些寄存器是16位的比如频率配置、功率配置需要先传高字节再传低字节。如果你在移植别人的驱动时发现频率设置不对先检查一下字节顺序有没有搞反。第三是调试时一定要把串口打印用起来。SX1262的操作不像普通外设那么直观你很难用示波器去看每个命令对不对但是串口打印能让你看到收发数据的每个环节。我程序里已经在关键位置加了打印你调试自己代码时也建议保持这个习惯。比如在发送数据前打印数据内容、在发送完成后打印中断状态、在接收完成后打印RSSI和SNR这样一旦出现问题你能快速定位是硬件还是软件的问题。这套资料我花了不少精力整理每一步都是实际项目里验证过的希望能帮你在LoRa开发这条路上少走弯路。如果你照着资料做下来有任何问题欢迎随时讨论。本文还有配套的精品资源点击获取
返回列表