STM8、STM8S003F3P6 通过ZM470SX-MP模组实现lora通信

背景

现在物联网就是很火,lora是避免不开的,也有个项目采用STM8S003F3P6 使用周立功的lora模组ZM470SX-MP实现lora通信。

原理图

废话少说,上原理图

这个原理图我找了很久都没有找到,指示找到了管脚图,这个原理图非常简单,就是通过STM8S003F3P6 两路IO检测开关量信号,通过lora上报,开关量信息。

 ZM470SX-MP简介

这里也是说明手册的一些材料,更多材料可以参考手册,需要注意的是这个不是透传LORA,用起来有点复杂,虽然周立功提供了一些API函数;对比那些透传LORA的设计方式,有点就是功耗低,因为没有多一个控制MCU。

ZM470SX-MP 模块是广州致远电子 有限公司自主研发的一款工业级射频无 线产品。模块采用源自军用战术通信系统 的 LoRa 调制技术设计,完美解决了小数 据量在复杂环境中的超远距通信问题。 相较传统调制技术, ZM470SX-MP 模块在抑制同频干扰的性能方面也具有 明显优势,解决了传统设计方案无法同时 兼顾距离、抗扰和功耗的弊端。另外,芯 片集成了+30dBm 的可调功率放大器,可 获得超过-148dBm 的接收灵敏度,链路预 算达到了行业领先水平,针对应用于远距 离传输且对可靠性要求极高的场合,该方 案是不二之选。

 频率范围:410~525MHz

 工作电压 2.6~3.6 V;

 接收电流 14mA,发射电流 800mA@28dBm;

 发射功率可调:23~30dBm;

 接收灵敏度可达-148dBm;

 传输速率 0.123~300 kbps;

 支持 FSK/GFSK/MSK/GMSK/LoRa/OOK 等调制方式;

 载波频率可编程;

 发送和接收缓冲区共 256 字节;

 支持多种低功耗操作模式;

 可有效抑制同频干扰;

 3.3V 接口电平;

 采用 SPI 总线通信接口。

 长×宽×高:15×15×2.2(mm)

软件设计

这里主要是移植了周立功的API函数,对应好IO直接调用如下,main函数中完成初始化,然后就是周期发送IO开关量信息。

void main(void)
{
  BSP_Initializes();
  Init_IO();                //IO口配置

  Radio = RadioDriverInit();//注册相关的函数
  Radio->Init();            //无线模块初始化
  Radio->RFOpModeSet(RFLR_OPMODE_SLEEP);//进入睡眠状态  

  while(1)
  {
    LED_ON;                                      //LED亮
    SoftwareDelay(0x6000);
    LED_OFF;                                     //LED灭
    SoftwareDelay(0x6000);
    SendHeartbeat();
//    Temp =  0;
//    if(INTPUT_0 != 0) 
//            Temp += 1;
//    if(INTPUT_1 != 0) 
//            Temp += 2;
//    if(Temp != 0)
//    {
//      SensorFlag = 0xF0 + Temp;
//      Temp = 0;
//      SendHeartbeat();
//    }
  }
}

关于模块接口IO宏定义如下


#define  INPUT_0_Port  GPIOD
#define  INPUT_0_Pin   GPIO_PIN_3 

#define  INPUT_1_Port  GPIOD
#define  INPUT_1_Pin   GPIO_PIN_4 
    
    
 
#define  RF_RST_Port  GPIOC
#define  RF_RST_Pin   GPIO_PIN_3 

#define  RF_SEL_Port  GPIOC
#define  RF_SEL_Pin   GPIO_PIN_4 

#define  RF_MOSI_Port  GPIOC
#define  RF_MOSI_Pin   GPIO_PIN_5 

#define  RF_MISO_Port  GPIOC
#define  RF_MISO_Pin   GPIO_PIN_6 

#define  RF_SCK_Port  GPIOC
#define  RF_SCK_Pin   GPIO_PIN_7 

#define  RF_DIO0_Port  GPIOB
#define  RF_DIO0_Pin   GPIO_PIN_4 

#define  RF_DIO1_Port  GPIOB
#define  RF_DIO1_Pin   GPIO_PIN_5 

#define  RF_DIO2_Port  GPIOD
#define  RF_DIO2_Pin   GPIO_PIN_2 


//******************************************************************
//**无线模块相关IO口************************************************
#define RF_SEL_L          RF_SEL_Port->ODR &=~RF_SEL_Pin    //无线模块片选低电平
#define RF_SEL_H          RF_SEL_Port->ODR |= RF_SEL_Pin     //无线模块片选高电平

#define RF_MOSI_L         RF_MOSI_Port->ODR &=~RF_MOSI_Pin
#define RF_MOSI_H        RF_MOSI_Port->ODR |= RF_MOSI_Pin

#define RF_SCK_L          RF_SCK_Port->ODR &=~RF_SCK_Pin
#define RF_SCK_H          RF_SCK_Port->ODR |= RF_SCK_Pin

#define RF_MISO_READ      (RF_MISO_Port->IDR&RF_MISO_Pin)

#define RF_RST_L          RF_RST_Port->ODR &=~RF_RST_Pin;
#define RF_RST_H          RF_RST_Port->ODR |= RF_RST_Pin;

#define RF_IRQ0_READ      ((RF_DIO0_Port->IDR&RF_DIO0_Pin) != 0)/*读取模块中断输出引脚状态*/
#define RF_IRQ1_READ      ((RF_DIO1_Port->IDR&RF_DIO1_Pin) != 0)/*读取模块中断输出引脚状态*/
/*
#define RF_DIO1           P2IFG & BIT3
#define RF_DIO0           P2IFG & BIT7
#define RF_DIO1_0         P2IFG &= ~BIT3
#define RF_DIO0_0         P2IFG &= ~BIT7
*/

提供的库移植 

 总结,其实lora的核心模块就是sx1276这个芯片,ZM470SX-MP模组只是基于这个芯片把外围电路设计好啦,真正的控制和loar协议,需要放到STM8上,我的应用还好比较简单,如果一些复杂的应用,使用STM8就有点吃力了。毕竟STM8的RAM/ROM空间都不大。

猜你喜欢

转载自blog.csdn.net/li171049/article/details/130889199