標(biāo)題:
STM32F103+RF(SI443 SI4463 SX1278擴(kuò)頻)+OLED+串口+按鍵+溫濕度傳感器
[打印本頁]
作者:
guai
時間:
2019-10-13 15:20
標(biāo)題:
STM32F103+RF(SI443 SI4463 SX1278擴(kuò)頻)+OLED+串口+按鍵+溫濕度傳感器
單片機(jī)源程序如下:
/**********************(C) COPYRIGHT tongxinmao*****************************
* 文件名 : main.c
* 描述 : 主文件 STM32F103C8T6+RF(SI443 SI4463 SX1278擴(kuò)頻)+OLED+串口+按鍵+溫濕度傳感器
* 歷史記錄 : 暫無
* 使用說明 :按鍵S1 短按切換無線是否應(yīng)答,長按清空收發(fā)計(jì)數(shù) S2:單次發(fā)送 S3:連續(xù)發(fā)送50*n次
發(fā)送的數(shù)據(jù)為溫濕度數(shù)據(jù),接收方收到后顯示
********************************************************************************/
/*--------------------------- 頭文件包含 --------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"
#include "function.h"
#include "oled.h"
#include "usart1.h"
#include "gpio.h"
#include "Delay.h"
#include "timeget.h"
#include "rf.h"
/*-----------------------------------------------------------------------------*/
/*
* #pragma diag_suppress 77,550,1294,1295
* #pragma diag_suppress 870
*/
#pragma diag_suppress 870
/*
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* -------------------- 宏定義 ------------------------------
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
*/
#define CMD_TEMP_HUM 1
#define CMD_ACK 2
/*
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* -------------------- 變量定義 ------------------------------
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
*/
u16 Counter=0,Msec=0;
u8 Counterflg=0;
/*
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* -------------------- 函數(shù)聲明 ------------------------------
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
*/
void frameProcess( u8 *buf, u8 size )
{
u8 cmd = buf[0];
u8 len = buf[1];
switch ( cmd )
{
case CMD_TEMP_HUM:
if ( rfAck )
{
sendBuf[0] = CMD_ACK;
sendBuf[1] = 0;
RFSendData( sendBuf, 2 );
msg( "回復(fù)應(yīng)答..." );
}
/* 顯示溫濕度數(shù)據(jù) */
if ( len == 4 )
{
memcpy( &temp, buf + 2, 2 );
memcpy( &hum, buf + 4, 2 );
msg( "收到溫濕度數(shù)據(jù)" );
}
break;
case CMD_ACK:
/* 屏幕顯示應(yīng)答成功 */
msg( "收到應(yīng)答" );
break;
default:
break;
}
}
void revieveProcess( u8 *buf, u8 size )
{
u8 i=0;
for(i=0;i<=size;i++)
{
printf(" %d",buf[i]);
}
printf("\r\n");
}
/**************************************************************
* 函數(shù)名 : main()
* 描述 : 主函數(shù)
*************************************************************/
int main( void )
{
char buf[64] = "";
/* --配置系統(tǒng)主頻為72MHz */
SystemInit();
Delay_InitConfig( 72 );
GPIOInit(); //GPIO初始化
OLED_Init(); //OLED初始化
Uart1Init(); //串口初始化用于輸出調(diào)試信息 9600bps 8N1
TIM3_Int_Init(9999,7199);
RFInit(); //射頻模塊初始化
RFRxMode(); //進(jìn)入接收模式
msg( "TIME 1S TEST" );
getTempHum(); //獲取溫濕度數(shù)據(jù)
while ( 1 )
{
int len;
sprintf( buf, "%s %s", rfName, rfAck ? "SLAVE" : "MASTER" );
OLED_PXx16MixStr( 0, 0, buf );
getTempHum(); //獲取溫濕度數(shù)據(jù)
sprintf( buf, "溫濕度%.1f %.1f%%", temp / 10.0, hum / 10.0 );
OLED_PXx16MixStr( 0, 1, buf );
if(Counterflg==1)
{
Counterflg=0;
printf("\r\n");
printf( "本機(jī)溫度:%.1f 本機(jī)濕度:%.1f%%", temp / 10.0, hum / 10.0 );
printf("\r\n");
}
len = RFRevData( revBuf ); //接收無線數(shù)據(jù)
if ( len > 0 )
{
// revieveProcess( revBuf, len ); //數(shù)據(jù)處理
printf("\r\n");
printf("當(dāng)前收到秒數(shù):%d",revBuf[0]);
printf("\r\n");
if(revBuf[0]<10) //清除一下顯示花屏
{
sprintf( buf, " ");
OLED_PXx16MixStr( 0, 2, buf );
}
sprintf( buf, "收到 %d SEC %d", iRev, revBuf[0] );
OLED_PXx16MixStr( 0, 2, buf );
}
}
/* while ( 1 )
{
sprintf( buf, "%s %s", rfName, rfAck ? "MASTER " : "SLAVE" );
OLED_PXx16MixStr( 0, 0, buf );
if(Counterflg==1)
{
Counterflg=0;
sendBuf[0] = Msec;
sendBuf[1] = 0;
RFSendData( sendBuf, 2 );
sprintf( buf, "SEND %d SEC %d", iSend, Msec );
printf(" %d, %d",iSend,Msec);
printf("\r\n");
OLED_PXx16MixStr( 0, 2, buf );
}
}*/
/* while ( 1 )
{
int len;
keyProcess(); //按鍵檢測處理
led_blink(); //led運(yùn)行燈閃爍
len = RFRevData( revBuf ); //接收無線數(shù)據(jù)
if ( len > 0 )
{
frameProcess( revBuf, len ); //數(shù)據(jù)處理
}
if(rfContinueSend())
{
Delay_ms( 500 );
}
OledDisplay(); //刷新OLED顯示
} */
}
/*
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
* -------------------- 公有函數(shù)定義 ------------------------------
* ------------------------------------------------------------------------
* ------------------------------------------------------------------------
*/
/* end of main.c -------------------------------------------------------------*/
復(fù)制代碼
所有資料51hei提供下載:
SX1278測試程序 2017 4 10.7z
(205.01 KB, 下載次數(shù): 59)
2019-10-13 18:09 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2019-10-13 18:11
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者:
goodmasher
時間:
2023-2-16 01:55
沒有原理圖,代碼中涉及的引腳外設(shè)無法搞清楚。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1