Semtech SX1262 demo程序

SX1262 的demo程序。

下面是预览

#ifndef _SX1262_H_
#define _SX1262_H_

#define SoftSPI
#include "SX1262CommandAndRegs.h"

#include "main.h"

#if 0
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;

#endif

typedef struct
{
    u8   Power;
    u32 Frequency;
    u8 Bandwidth;
    u8 SpreadFactor;
    u8 LowDatarateOptimize;
    u8  Coderate;
    u16 PreambleLen;
    u8  HeaderType;
    u8  PayloadLen;
    u8  PacketCrc;
    u8  FreqHopOn;
    u8 HopPeriod;
    u8  IqInverted;
    u8    RxContinuous;
}RadioLoRaSettings_t;

#define  	LED_GREEN		p1_1
#define  	LED_RED			p1_0

#define      SX1262_SPI_NSS_Pin      p1_5

#ifdef  SoftSPI
#define     SX1262_SPI_SCK_Pin      p1_6
#define     SX1262_SPI_MISO_Pin     p4_7
#define     SX1262_SPI_MOSI_Pin     p1_4
#endif // SoftSPI

#define      SX1262_NRST_Pin     p1_7
#define     SX1262_DIO1_Pin     p1_2
#define     SX1262_DIO2_Pin
#define     SX1262_DIO3_Pin
#define     SX1262_BusyPin      p1_3

#define     HIGH   1
#define     LOW     0

#define     SPI_NSS(LEVEL)   SX1262_SPI_NSS_Pin=LEVEL

#ifdef  SoftSPI
#define     SPI_SCK(LEVEL)      SX1262_SPI_SCK_Pin=LEVEL
#define     SPI_MISO()          SX1262_SPI_MISO_Pin
#define     SPI_MOSI(LEVEL)     SX1262_SPI_MOSI_Pin=LEVEL
#endif // SoftSPI

#define     RADIO_NRST(LEVEL)   SX1262_NRST_Pin=LEVEL
#define     RADIO_DIO1()        SX1262_DIO1_Pin
#define     RADIO_DIO2()
#define     RADIO_DIO3()
#define     RADIO_BusyPin()     SX1262_BusyPin

#define SetRadioPin(pin,state)   pin=state
#define GetRadioPin(pin)    pin



unsigned char spi_byte(unsigned char data);
u8 SPIWriteCmd(u8 size,u8 *p);
u8 SPIReadCmd(u8 cmd,u8 *p,u8 size);
u8 SPIReadRegister(u16 reg,u8 size,u8 *p);
u8 SPIWriteRegister(u8 *p,u8 size);
u8 SPIWriteBuffer(u8 offset,u8 *p,u8 size);
u8 SPIReadBuffer(u8 offset,u8 *p,u8 size);
void SX1262SetStandby(u8 p);
void SX1262SetPacketType(u8 p);
void SX1262SetFrequency(u32 freq);
void SX1262SetPaConfig(void);
void SX1262SetTxParams(void);
void SX1262SetBufferBaseAddress(u8 TXBaseadd,u8 RXBaseadd);
void SX1262SetModulationParams(u8 sf,u8 bw,u8 codingrate,u8 ldro);
void SX1262SetPacketParams(u16 prelen,u8 headertype,u8 payloadlen,u8 crc,u8 iq);
void SX1262SetAnt(void);
void SX1262SetTCXO_Ctrl(void);
void SX1262SetDioIrqParams(u16 INT,u16 dio1,u16 dio2,u16 dio3);
void SX1262Reset(void);
void port_init(void);
void SX1262SetRx_mode(u32  timeout);
void SX1262RX_init(u32 time);

void SX1262Clr_interrupt(u8 *p);
void SX1262SetTx_mode(u32 TimeOut);
void tx_data(u8 add,u8 *p,u8 size);
void check_busy(void);
void SX1262GetStatus(u8 *p);
void SX1262SetRegulatorMode(void);
void tx11(u8 add ,u8 *p,u8 size);
u8 SX1262GetReceiveLen(void);
u8 SX1262GetReceiveAdd(void);
int SX1262Init(RadioLoRaSettings_t LoRaSetting);
int RadioInit(void);


/*****extern variables****************/
extern RadioLoRaSettings_t LoRaSetting1;



#endif // _SX1262_H_

这个原本是针对8位单片机写的(R5F211B4),不过可以轻松地移植到任意平台上,包括但不限于STM32,8051,Auduino等等。移植时只需要修改与具体平台相关的宏定义即可。
具体来说,需要修改的宏定义有
1.变量类型的定义。例如,8位单片机上的的unsigned int 一般是16位。而到了32位的STM32上就变成了32位,因此需要作出对应的修改。
2.端口操作。此程序里面用的是软件模拟的SPI接口,因此有与SPI相关的引脚定义。移植到时候,如果继续使用软件模拟SPI,直接修改对应的宏定义即可。如果是使用硬件SPI,改动也不算大,只需要修改unsigned char spi_byte(unsigned char data);和NSS(片选)的宏定义。

希望可以帮到初学者。
完整的工程在这里:sx1262demo

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值