本文记录在SX1278 在STM32F103 驱动,实现收发数据功能。(SPI 驱动参考 https://www.cnblogs.com/T0213-ZH/articles/10573067.html)

编译环境:MDK5.25

STM32标准库:V3.5.0

SX1278驱动:sx12xxDrivers-V2.1.0 (https://www.semtech.com/uploads/documents/sx12xxDrivers-V2.1.0.zip)

相关文档 https://www.semtech.com/products/wireless-rf/lora-transceivers/sx1278

1、MDK工程目录(创建工程方式略)

收发数据由宏“ SX1276_RX_DEF" 区别,定义了为接收数据,未定义为发送数据

2、修改默认sx1276-LoRa.c 里面默认的频率与带宽

编译时出现bool 没定义,增加 bool类型头文件,sx1276.h文件里

main.c 函数实现如下, 发送功能:每间隔1s 发送一组数据  发送完成后打印一串数据“lora send ok”, 接收功能:收到数据后串口打印(本全程打印 ”lora send data“)

#include "platform.h"static  uint32_t TimeingDelay = 0;
static  uint32_t timeout_cnt = 1000;   void Delayms(uint32_t ms){TimeingDelay = ms;while(TimeingDelay != 0){};
}void uart_recv_data(uint8_t *p, uint16_t len){UART_ApiStructure.send_str(p, len);
}extern void SX1276Init( void );
extern void SX1276SetTxPacket( const void *buffer, uint16_t size );
extern uint32_t SX1276Process( void );static uint16_t BufferSize = 30;            // RF buffer size
static uint8_t  Buffer[30];                // RF buffer
const uint8_t  send_data_buf[] = "lora send data\r\n";extern void SpiInit( void );
extern void Soft_delay_ms(u16 time);int main(void){uint16_t count = 0, i;static uint32_t state = 0;//TIM_Configuration();
    SYSTEM_tick_config_1ms();Delayms(10);SX1276Init();        UART_ApiStructure.config(&UART_TypeDef_param, uart_recv_data);UART_ApiStructure.send_str("uart init ok\r\n", 14);#if defined(SX1276_RX_DEF)SX1276StartRx();
#else    SX1276SetTxPacket( send_data_buf, 18 );
#endif    while (1){if(!timeout_cnt){ timeout_cnt = 1000; count++;#if !defined(SX1276_RX_DEF)                        SX1276SetTxPacket( send_data_buf, strlen(send_data_buf));
#endif}#if defined(SX1276_RX_DEF)if(SX1276Process( ) == RF_RX_DONE){    SX1276GetRxPacket( Buffer, ( uint16_t* )&BufferSize );UART_ApiStructure.send_str(Buffer, BufferSize);for(i=0;i<30;i++)Buffer[i] = 0;SX1276StartRx();}
#elseif(SX1276Process( ) == RF_TX_DONE){UART_ApiStructure.send_str("lora send ok\r\n", 14);}
#endif                    }
}volatile uint32_t TickCounter = 0;
void TimeingDelay_Decrement(void){if (TimeingDelay > 0){ TimeingDelay--;}if(timeout_cnt){timeout_cnt--;    }TickCounter++;
}

3、SX1276 spi 抽象层接口修改 sx1276_hal.c, sx1276-Hal.h

SX1276-Hal.h 增加结构体,结构体实现在platform.c 文件中

sx1276_hal.c 实现如下

#include "platform.h"void SX1276InitIo( void )
{sx1278_ApiStructre.init();
}void SX1276SetReset( uint8_t state )
{if( state == RADIO_RESET_ON ){sx1278_ApiStructre.reset(0);}else{sx1278_ApiStructre.reset(1);}
}void SX1276Write( uint8_t addr, uint8_t data )
{SX1276WriteBuffer( addr, &data, 1 );
}void SX1276Read( uint8_t addr, uint8_t *data )
{SX1276ReadBuffer( addr, data, 1 );
}void SX1276WriteBuffer( uint8_t addr, uint8_t *buffer, uint8_t size )
{SPI_ApiStructure.write_buf(&sx1278_ApiStructre.spi, addr | 0x80, buffer, size);
}void SX1276ReadBuffer( uint8_t addr, uint8_t *buffer, uint8_t size )
{SPI_ApiStructure.read_buf(&sx1278_ApiStructre.spi, addr & 0x7F, buffer, size);
}void SX1276WriteFifo( uint8_t *buffer, uint8_t size )
{SX1276WriteBuffer( 0, buffer, size );
}void SX1276ReadFifo( uint8_t *buffer, uint8_t size )
{SX1276ReadBuffer( 0, buffer, size );
}/*inline*/ uint8_t SX1276ReadDio0( void )
{//return GPIO_ReadInputDataBit( DIO0_IOPORT, DIO0_PIN );return sx1278_ApiStructre.rDio0();
}/*inline*/ uint8_t SX1276ReadDio1( void )
{return 0;//GPIO_ReadInputDataBit( DIO1_IOPORT, DIO1_PIN );
}/*inline*/ uint8_t SX1276ReadDio2( void )
{return 0;//GPIO_ReadInputDataBit( DIO2_IOPORT, DIO2_PIN );
}/*inline*/ uint8_t SX1276ReadDio3( void )
{return 0;//GPIO_ReadInputDataBit( DIO3_IOPORT, DIO3_PIN );
}/*inline*/ uint8_t SX1276ReadDio4( void )
{return 0;//GPIO_ReadInputDataBit( DIO4_IOPORT, DIO4_PIN );
}/*inline*/ uint8_t SX1276ReadDio5( void )
{return 0;//GPIO_ReadInputDataBit( DIO5_IOPORT, DIO5_PIN );
}/*inline*/ void SX1276WriteRxTx( uint8_t txEnable )
{
//    if( txEnable != 0 )
//    {
//        Set_RF_Switch_TX();
//        IoePinOn( FEM_CTX_PIN );
//        IoePinOff( FEM_CPS_PIN );
//    }
//    else
//    {
//        Set_RF_Switch_RX();
//        IoePinOff( FEM_CTX_PIN );
//        IoePinOn( FEM_CPS_PIN );
//    }
}

4、编译、烧录、运行

    

整个工程代码:stm32f103_sx1276.rar

转载于:https://www.cnblogs.com/T0213-ZH/articles/10574037.html

STM32F103 SX1278 驱动相关推荐

  1. 使用STM32F103 I2C驱动SHT30

    使用STM32F103 I2C驱动SHT30 SHT30的官方代码见<Sensirion_Humidity_Sensors_SHT3x_Sample_Code_V2>,不过官方是用GPIO ...

  2. STM32F103单片机驱动TM1637数码管显示模块

    最近项目中需要用到数码管显示,于是买了一个TM1637芯片驱动的四位数码显示模块,现将调试过程记录一下,方便以后参考. 使用的单片机是STM32F103C8T6最小系统 使用的数码管模块是TM1637 ...

  3. STM32F103系列驱动MH-Z14A 二氧化碳(CO2)传感器详解,使用串口输出读取(后附免费免积分程序下载链接)

    MH-Z14A 二氧化碳传感器概述         MH-Z14A 二氧化碳气体传感器(以下简称传感器)是一个通用智能小型传感器,利用非色散红外(NDIR)原理对空气中存在的 CO2进行探测,具有很好 ...

  4. stm32f103 usb驱动 电脑无法识别的解决办法

    1.usb所使用的IO口在设置为usb后自动分配功能,不需要再设置,一定要设置的话会被忽略,所以也没什么影响. 2.usb时钟配置只有两种可用:主频72M,usb时钟1.5分频:主频48M,usb时钟 ...

  5. HAL驱动的串口编程陷阱

    http://bbs.elecfans.com/jishu_464356_1_1.html 手上有块NUCLEO STM32L053x板子,用来做串口实验,看了下ST的最新库HAL驱动,于是想用HAL ...

  6. 在stm32f103上运行nuttx,添加app和driver的流程

    以stm32f103的led(PC13)为例子 heyi@ubuntu:~/nuttx/heyi_1_nuttx/nuttx/tools$ ./configure.sh stm32f103-minim ...

  7. 功率输出器件:直流电机工作原理

    1.直流电机工作原理 直流电源的电能通过电刷和换向器进入电枢绕组,产生电枢电流,电枢电流产生的磁场与主磁场相互作用产生电磁转矩,使电机旋转带动负载. 优点:价格低.控制方便. 缺点:由于电刷换向器的存 ...

  8. RT-Thread Nano移植使用整理

    https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/an0038-nano-introduction ...

  9. 星光嵌入式SIM800C GPRS GSM开发板发布

    星光SIM800C GPRS GSM开发板,采用希姆通 SIM800C模块,提供STM32F103/STM32F407驱动,详细的使用指导教程,帮助学习者快速掌握STM32的学习使用,尤其适用于学生. ...

最新文章

  1. Css颜色和文本字体
  2. HTML min/maxlength
  3. 2_python基础—格式化符号(输入、输出、转义、结束)
  4. Domino服务器以及Notes客户端重新配置的方法
  5. halcon算子翻译——dev_set_window
  6. List转换为数组Array的方法
  7. phalcon开发工具(phalcon-devtools)
  8. mfc 子窗体任何消息都不触发_你不知道的 WebSocket
  9. otf VS ttf images
  10. flex builder 破解
  11. android twitter 分享代码,Twitter分享集成
  12. 产品经理知识体系专题
  13. 自己开发了一款视频播放器app
  14. 摩登兄弟:参加《歌手》压力很大,在准备下一期歌曲
  15. 逆向某停车app(原创)
  16. 目标跟踪:Deepsort--卡尔曼滤波、匈牙利匹配、马氏距离、欧氏距离、级联匹配、reid
  17. [Python]Spyder常用设置方便使用-持续更新
  18. 服务器就是一台性能好的电脑吗,科普:什么是服务器? 服务器与普通电脑有何区别?...
  19. AForge学习笔记(3):AForge.Fuzzy
  20. LWN:使用Jitsi进行视频会议!

热门文章

  1. 怎么把php转变成word文档,表格怎么转换成word文档
  2. 使用 Navicat 代码段
  3. Meep基于windows系统安装
  4. 从实例出发,让你一文实现Floyd算法
  5. tcp_tw_recycle引起的TCP握手失败
  6. 工程电磁场-恒定电流的电场和磁场
  7. EDA 电子设计自动化VHDL系列课程15 – 智力抢答电路的设计与实现
  8. Origin | origin界面(工具栏)介绍 | origin学习资源汇总(基础)
  9. 让小屏幕kindlePaperWhite2支持PDF
  10. Oracle通过定时任务+dblink+存储过程传数据到中间库