找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1791|回复: 2
打印 上一主题 下一主题
收起左侧

STM32F103+RF(SI443 SI4463 SX1278扩频)+OLED+串口+按键+温湿度传感器

[复制链接]
跳转到指定楼层
楼主
ID:435877 发表于 2019-10-13 15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. /**********************(C) COPYRIGHT tongxinmao*****************************
  2. * 文件名                        : main.c
  3. * 描述                                : 主文件        STM32F103C8T6+RF(SI443 SI4463 SX1278扩频)+OLED+串口+按键+温湿度传感器
  4. * 历史记录          : 暂无
  5. * 使用说明                        :按键S1 短按切换无线是否应答,长按清空收发计数  S2:单次发送  S3:连续发送50*n次
  6.                                           发送的数据为温湿度数据,接收方收到后显示
  7. ********************************************************************************/

  8. /*--------------------------- 头文件包含 --------------------------------------*/
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include "main.h"
  13. #include "function.h"
  14. #include "oled.h"
  15. #include "usart1.h"
  16. #include "gpio.h"
  17. #include "Delay.h"
  18. #include "timeget.h"
  19. #include "rf.h"

  20. /*-----------------------------------------------------------------------------*/
  21. /*
  22. * #pragma diag_suppress 77,550,1294,1295
  23. * #pragma diag_suppress 870
  24. */
  25. #pragma diag_suppress 870
  26. /*
  27. * ------------------------------------------------------------------------
  28. * ------------------------------------------------------------------------
  29. * --------------------         宏定义              ------------------------------
  30. * ------------------------------------------------------------------------
  31. * ------------------------------------------------------------------------
  32. */

  33. #define CMD_TEMP_HUM        1
  34. #define CMD_ACK                        2


  35. /*
  36. * ------------------------------------------------------------------------
  37. * ------------------------------------------------------------------------
  38. * --------------------       变量定义              ------------------------------
  39. * ------------------------------------------------------------------------
  40. * ------------------------------------------------------------------------
  41. */
  42. u16 Counter=0,Msec=0;
  43. u8 Counterflg=0;

  44. /*
  45. * ------------------------------------------------------------------------
  46. * ------------------------------------------------------------------------
  47. * --------------------       函数声明              ------------------------------
  48. * ------------------------------------------------------------------------
  49. * ------------------------------------------------------------------------
  50. */





  51. void frameProcess( u8 *buf, u8 size )
  52. {
  53.         u8        cmd        = buf[0];
  54.         u8        len        = buf[1];

  55.         switch ( cmd )
  56.         {
  57.         case CMD_TEMP_HUM:
  58.                 if ( rfAck )
  59.                 {
  60.                         sendBuf[0]        = CMD_ACK;
  61.                         sendBuf[1]        = 0;
  62.                         RFSendData( sendBuf, 2 );
  63.                         msg( "回复应答..." );
  64.                 }
  65.                 /* 显示温湿度数据 */
  66.                 if ( len == 4 )
  67.                 {
  68.                         memcpy( &temp, buf + 2, 2 );
  69.                         memcpy( &hum, buf + 4, 2 );
  70.                         msg( "收到温湿度数据" );
  71.                 }
  72.                 break;

  73.         case CMD_ACK:
  74.                 /* 屏幕显示应答成功 */

  75.                 msg( "收到应答" );
  76.                 break;

  77.         default:
  78.                 break;
  79.         }
  80. }


  81. void revieveProcess( u8 *buf, u8 size )
  82. {
  83.         u8 i=0;
  84.         for(i=0;i<=size;i++)
  85.         {
  86.                 printf("  %d",buf[i]);               
  87.         }
  88.                 printf("\r\n");

  89. }


  90. /**************************************************************
  91. * 函数名  : main()
  92. * 描述    : 主函数
  93. *************************************************************/
  94. int main( void )
  95. {
  96.                 char buf[64] = "";
  97.         /* --配置系统主频为72MHz */
  98.         SystemInit();
  99.         Delay_InitConfig( 72 );


  100.         GPIOInit();            //GPIO初始化
  101.         OLED_Init();        //OLED初始化
  102.         Uart1Init();        //串口初始化用于输出调试信息 9600bps 8N1

  103.         TIM3_Int_Init(9999,7199);        
  104.         RFInit();         //射频模块初始化
  105.         RFRxMode();         //进入接收模式
  106.         msg( "TIME 1S TEST" );
  107.   getTempHum();  //获取温湿度数据
  108.         while ( 1 )
  109.         {
  110.                 int len;               
  111.                 sprintf( buf, "%s %s", rfName, rfAck ? "SLAVE" : "MASTER" );
  112.                 OLED_PXx16MixStr( 0, 0, buf );
  113.                
  114.                 getTempHum();  //获取温湿度数据
  115.                 sprintf( buf, "温湿度%.1f %.1f%%", temp / 10.0, hum / 10.0 );               
  116.                 OLED_PXx16MixStr( 0, 1, buf );        
  117.                
  118.         if(Counterflg==1)        
  119.                 {               
  120.                         Counterflg=0;        
  121.                         printf("\r\n");                        
  122.                         printf( "本机温度:%.1f   本机湿度:%.1f%%", temp / 10.0, hum / 10.0 );
  123.                         printf("\r\n");
  124.                 }
  125.                
  126.                 len = RFRevData( revBuf );          //接收无线数据
  127.                 if ( len > 0 )
  128.                 {
  129. //                        revieveProcess( revBuf, len ); //数据处理
  130.                         printf("\r\n");
  131.                         printf("当前收到秒数:%d",revBuf[0]);        
  132.                         printf("\r\n");
  133.                         if(revBuf[0]<10)  //清除一下显示花屏
  134.                         {
  135.                                 sprintf( buf, "                ");                        
  136.                                 OLED_PXx16MixStr( 0, 2, buf );               
  137.                         }                                
  138.                         sprintf( buf, "收到 %d  SEC %d", iRev, revBuf[0] );        
  139.                         OLED_PXx16MixStr( 0, 2, buf );
  140.                 }
  141.         }



  142. /*        while ( 1 )
  143.         {        
  144.                         sprintf( buf, "%s %s", rfName, rfAck ? "MASTER  " : "SLAVE" );
  145.                         OLED_PXx16MixStr( 0, 0, buf );               
  146.                         if(Counterflg==1)        
  147.                         {        
  148.                                                 Counterflg=0;                        
  149.                                                 sendBuf[0]        = Msec;
  150.                                                 sendBuf[1]        = 0;
  151.                                                 RFSendData( sendBuf, 2 );        
  152.                                                 sprintf( buf, "SEND %d SEC %d", iSend, Msec );        
  153.                                                 printf(" %d, %d",iSend,Msec);
  154.                                                 printf("\r\n");
  155.                                                 OLED_PXx16MixStr( 0, 2, buf );
  156.                         }
  157.         }*/
  158.         
  159. /*        while ( 1 )
  160.         {
  161.                 int len;

  162.                 keyProcess();  //按键检测处理
  163.             led_blink();   //led运行灯闪烁

  164.                 len = RFRevData( revBuf );          //接收无线数据
  165.                 if ( len > 0 )
  166.                 {
  167.                         frameProcess( revBuf, len ); //数据处理
  168.                 }

  169.                 if(rfContinueSend())
  170.                 {        
  171.                         Delay_ms( 500 );         
  172.                 }

  173.                 OledDisplay();        //刷新OLED显示
  174.         }        */
  175.         
  176.         
  177. }




  178. /*
  179. * ------------------------------------------------------------------------
  180. * ------------------------------------------------------------------------
  181. * --------------------     公有函数定义            ------------------------------
  182. * ------------------------------------------------------------------------
  183. * ------------------------------------------------------------------------
  184. */




  185. /* end of main.c -------------------------------------------------------------*/
复制代码

所有资料51hei提供下载:
SX1278测试程序 2017 4 10.7z (205.01 KB, 下载次数: 57)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-10-13 18:11 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:1023716 发表于 2023-2-16 01:55 | 只看该作者
没有原理图,代码中涉及的引脚外设无法搞清楚。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表