找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2546|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

STM32F103+RF(SI443 SI4463 SX1278擴(kuò)頻)+OLED+串口+按鍵+溫濕度傳感器

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:435877 發(fā)表于 2019-10-13 15:20 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)源程序如下:
  1. /**********************(C) COPYRIGHT tongxinmao*****************************
  2. * 文件名                        : main.c
  3. * 描述                                : 主文件        STM32F103C8T6+RF(SI443 SI4463 SX1278擴(kuò)頻)+OLED+串口+按鍵+溫濕度傳感器
  4. * 歷史記錄          : 暫無(wú)
  5. * 使用說(shuō)明                        :按鍵S1 短按切換無(wú)線是否應(yīng)答,長(zhǎng)按清空收發(fā)計(jì)數(shù)  S2:?jiǎn)未伟l(fā)送  S3:連續(xù)發(fā)送50*n次
  6.                                           發(fā)送的數(shù)據(jù)為溫濕度數(shù)據(jù),接收方收到后顯示
  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. * --------------------       函數(shù)聲明              ------------------------------
  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( "回復(fù)應(yīng)答..." );
  64.                 }
  65.                 /* 顯示溫濕度數(shù)據(jù) */
  66.                 if ( len == 4 )
  67.                 {
  68.                         memcpy( &temp, buf + 2, 2 );
  69.                         memcpy( &hum, buf + 4, 2 );
  70.                         msg( "收到溫濕度數(shù)據(jù)" );
  71.                 }
  72.                 break;

  73.         case CMD_ACK:
  74.                 /* 屏幕顯示應(yīng)答成功 */

  75.                 msg( "收到應(yīng)答" );
  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. * 函數(shù)名  : main()
  92. * 描述    : 主函數(shù)
  93. *************************************************************/
  94. int main( void )
  95. {
  96.                 char buf[64] = "";
  97.         /* --配置系統(tǒng)主頻為72MHz */
  98.         SystemInit();
  99.         Delay_InitConfig( 72 );


  100.         GPIOInit();            //GPIO初始化
  101.         OLED_Init();        //OLED初始化
  102.         Uart1Init();        //串口初始化用于輸出調(diào)試信息 9600bps 8N1

  103.         TIM3_Int_Init(9999,7199);        
  104.         RFInit();         //射頻模塊初始化
  105.         RFRxMode();         //進(jìn)入接收模式
  106.         msg( "TIME 1S TEST" );
  107.   getTempHum();  //獲取溫濕度數(shù)據(jù)
  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();  //獲取溫濕度數(shù)據(jù)
  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( "本機(jī)溫度:%.1f   本機(jī)濕度:%.1f%%", temp / 10.0, hum / 10.0 );
  123.                         printf("\r\n");
  124.                 }
  125.                
  126.                 len = RFRevData( revBuf );          //接收無(wú)線數(shù)據(jù)
  127.                 if ( len > 0 )
  128.                 {
  129. //                        revieveProcess( revBuf, len ); //數(shù)據(jù)處理
  130.                         printf("\r\n");
  131.                         printf("當(dāng)前收到秒數(shù):%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();  //按鍵檢測(cè)處理
  163.             led_blink();   //led運(yùn)行燈閃爍

  164.                 len = RFRevData( revBuf );          //接收無(wú)線數(shù)據(jù)
  165.                 if ( len > 0 )
  166.                 {
  167.                         frameProcess( revBuf, len ); //數(shù)據(jù)處理
  168.                 }

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

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




  178. /*
  179. * ------------------------------------------------------------------------
  180. * ------------------------------------------------------------------------
  181. * --------------------     公有函數(shù)定義            ------------------------------
  182. * ------------------------------------------------------------------------
  183. * ------------------------------------------------------------------------
  184. */




  185. /* end of main.c -------------------------------------------------------------*/
復(fù)制代碼

所有資料51hei提供下載:
SX1278測(cè)試程序 2017 4 10.7z (205.01 KB, 下載次數(shù): 59)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2019-10-13 18:11 | 只看該作者
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

板凳
ID:1023716 發(fā)表于 2023-2-16 01:55 | 只看該作者
沒(méi)有原理圖,代碼中涉及的引腳外設(shè)無(wú)法搞清楚。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表