|
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "exti.h"
#include "ex_out.h"
#include "ex_in.h"
#include "W5500.h"
#include "net.h"
#include "value.h"
#include "fu_dhcp.h"
#include "flash.h"
#include "dht12.h"
/********************************************************************/
/* 本程序僅供學(xué)習(xí)參考,未經(jīng)作者允許,不得用于任何商業(yè)用途 */
/* 本程序?yàn)镕uhome互聯(lián)網(wǎng)遠(yuǎn)程控制終端靜系列專用程序 */
/* 適用于硬件平臺 采用W5500+STM32F103C8T6 64K+20K */ */
/* 單片機(jī)相關(guān)配置,I/O口定義,定時器,串口,中斷等初始化函數(shù) */
/* 本程序用于硬件設(shè)備接入fuhome.net 平臺進(jìn)行遠(yuǎn)程控制(手機(jī)APP/微信/WEB */
/* 版本:v1.2 2016年6月30日 */
/* 龍劍奮斗 */
/* 定期更新,敬請關(guān)注——開放,交流,深入,進(jìn)步 */
/* Copyright 未來之家 實(shí)驗(yàn)室,讓科技融入生活 */
/********************************************************************/
int main(void)
{
U8 i=0;
U8 Data_Have=0;//0 沒有數(shù)據(jù) 1有數(shù)據(jù),第一次運(yùn)行時寫入固定數(shù)據(jù)
SystemInit(); //系統(tǒng)時鐘初始化為72M SYSCLK_FREQ_72MHz
delay_init(72); //延時函數(shù)初始化
NVIC_Configuration();//設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
Uart_Init(9600); //波特率 9600
//KEY_Init(); //IO初始化
//EXTIX_Init();
Timerx_Init(99,7100);//定時器3延時 10ms
Ex_in_Init();
Ex_out_Init();
DHT12_Init();
//讀取工作參數(shù)
STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)fu_temp,62);
//是否需要寫入
if(fu_temp[0]!=0xac||fu_temp[1]!=0xa2)
{
//第一次需要寫入數(shù)據(jù)了
STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)fu_index,62);
//讀取工作參數(shù)
STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)fu_temp,62);
}
//如果不對,那說明單片機(jī)有問題,進(jìn)入死循環(huán)
if(fu_temp[0]!=0xAc||fu_temp[1]!=0xA2)
{
while(1)
{
SYS=0;
OUT=1;
IN=1;
delay_ms(200);
SYS=0;
OUT=0;
IN=1;
delay_ms(200);
SYS=0;
OUT=0;
IN=0;
delay_ms(200);
}
}
SYS=0;
OUT=1;
IN=1;
delay_ms(200);
SYS=0;
OUT=0;
IN=1;
delay_ms(200);
SYS=0;
OUT=0;
IN=0;
delay_ms(200);
//是否進(jìn)入設(shè)置
Set_Flag=Key_Scan();
while(Set_Flag)//設(shè)置完成必須重啟才能
{
SYS=0;
OUT=0;
IN=0;
delay_ms(500);
SYS=1;
OUT=1;
IN=1;
delay_ms(500);
}
//分析工作模式及設(shè)置參數(shù)
//1/IP模式 0自動獲取 1固定IP 2/工作模式 0遠(yuǎn)控 1透傳
Get_IP=fu_temp[2];
Work_Sta=fu_temp[21];
Tihuan();
SPI_Configuration(); //W5500 SPI初始化配置(STM32 SPI1)
W5500_GPIO_Configuration(); //W5500 復(fù)位IO配置
W5500_Hardware_Reset(); //硬件復(fù)位W5500
Load_All(); //子網(wǎng)掩碼和MAC等固定信息
//自動獲取IP
if(Get_IP==0x00)
{
//裝DHCP網(wǎng)絡(luò)參數(shù)
Load_Auto();
W5500_Init(); //初始化W5500寄存器函數(shù)
Socket_Init(0); //指定Socket(0~7)初始化,初始化端口0 端口號
W5500_Socket0_Set();//W5500端口0初始化配置,防止斷開連接等讓再次連接
SYS=1;
OUT=0;
IN=0;
DHCP();
SYS=1;
OUT=1;
IN=1;//指示已經(jīng)獲取到IP
}
//固定IP
else
{
//裝載固定IP參數(shù)
Load_Keep();
W5500_Init(); //初始化W5500寄存器函數(shù)
Socket_Init(0); //指定Socket(0~7)初始化,初始化端口0 端口號
W5500_Socket0_Set();//W5500端口0初始化配置,防止斷開連接等讓再次連接
SYS=0;
OUT=1;
IN=0;
delay_ms(500);
SYS=1;
OUT=0;
IN=1;
delay_ms(500);
SYS=1;
OUT=1;
IN=1;
}
//設(shè)置本地端口7001
Update_Port();
Heart_Bag();
while (1)
{
//是否進(jìn)入設(shè)置
Set_Flag=Key_Scan();
while(Set_Flag)//設(shè)置完成必須重啟才能
{
SYS=0;
OUT=0;
IN=0;
delay_ms(500);
SYS=1;
OUT=1;
IN=1;
delay_ms(500);
}
W5500_Socket0_Set();//W5500端口0初始化配置,防止斷開連接等讓再次連接
W5500_Interrupt_Process();//W5500中斷處理程序,用來讀取數(shù)據(jù)
if((S0_Data & S_RECEIVE) == S_RECEIVE)//如果Socket0接收到數(shù)據(jù)
{
S0_Data&=~S_RECEIVE;
Process_UDP();//W5500接收并發(fā)送接收到的數(shù)據(jù)
}
//每30s心跳一次
if( W5500_Send_Delay_Counter%3000==0)
{
SYS=1;//指示燈熄滅,待收到心跳包后服務(wù)器正常會亮起
Heart_Bag();
}
if( W5500_Send_Delay_Counter%3500==0)//30s每次發(fā)送
{
//傳感器包 0溫度 1濕度,兩次發(fā)送至少間隔5s
Feel_bag(0);
}
else if( W5500_Send_Delay_Counter%4000==0)//35s每次發(fā)送
{
//傳感器包 0溫度 1濕度,兩次發(fā)送至少間隔5s
Feel_bag(1);
}
//每半個租期自動獲取一次IP
if(TimerS_Counter==DHCP_Time/2)
{
TimerS_Counter=0;
DHCP();
}
}
}
|
評分
-
查看全部評分
|