基于物联网的安防系统设计附录.docx

上传人:b****5 文档编号:8051481 上传时间:2023-01-28 格式:DOCX 页数:34 大小:23.03KB
下载 相关 举报
基于物联网的安防系统设计附录.docx_第1页
第1页 / 共34页
基于物联网的安防系统设计附录.docx_第2页
第2页 / 共34页
基于物联网的安防系统设计附录.docx_第3页
第3页 / 共34页
基于物联网的安防系统设计附录.docx_第4页
第4页 / 共34页
基于物联网的安防系统设计附录.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

基于物联网的安防系统设计附录.docx

《基于物联网的安防系统设计附录.docx》由会员分享,可在线阅读,更多相关《基于物联网的安防系统设计附录.docx(34页珍藏版)》请在冰豆网上搜索。

基于物联网的安防系统设计附录.docx

基于物联网的安防系统设计附录

Main函数

#include

#include"My_type.h"

#include"main.h"

#include"sx1276-LoRa.h"

voidUART1_init(void)

{

UART1_CR2=0;

UART1_SR=0;

UART1_CR1=0;

UART1_CR3=0;

UART1_BRR2=0x00;//设置波特率19200

UART1_BRR1=0x1A;//8M/2400=0x1A0

UART1_CR2=0x00;//

}

voidTIM1_init(void)

{

TIM1_PSCRH=0x1F;//8M系统时钟经预分频f=fck/(PSCR+1)

TIM1_PSCRL=0x3F;//PSCR=0x1F3F,f=8M/(0x1F3F+1)=1000Hz,每个计数周期1ms

TIM1_ARRH=0x00;//自动重载寄存器ARR=0x01F4=500

TIM1_ARRL=0x64;//每记数100次产生一次中断,即100ms

TIM1_IER=0x01;//允许更新中断

TIM1_CR1=0x01;//计数器使能,开始计数

}

voidEXTI_init(void)

{

EXTI_CR1=0x40;//PD口上升沿触发中断//平时DIO0是L,收到一包数据并且CRC正确后,DIO0变为H

}

voidSx1276EV_IO_Inital()

{

//S_Tx_Rx

PC_DDR_DDR1=0;//S_Tx_Rx

PC_CR1_C11=1;////PULL-UP-INPUT

PC_CR2_C21=0;//

//S_BW10

PA_DDR_DDR1=0;//

PA_CR1_C11=1;////PULL-UP-INPUT

PA_CR2_C21=0;

//S_BW62

PA_DDR_DDR2=0;//

PA_CR1_C12=1;////PULL-UP-INPUT

PA_CR2_C22=0;

//S_BW125

PB_DDR_DDR3=0;//

PB_CR1_C13=1;////PULL-UP-INPUT

PB_CR2_C23=0;

//S_FSK

PB_DDR_DDR7=0;//

PB_CR1_C17=1;////PULL-UP-INPUT

PB_CR2_C27=0;

}

voidKeyRead(void)

{

u8ReadData;

Flg_S_BW10=S_BW10;//

Flg_S_BW62=S_BW62;//

Flg_S_BW125=S_BW125;//

Flg_S_FSK=S_FSK;//

Flg_S_Tx_Rx=S_Tx_Rx;

ReadData=Flg^0xff;

Trg=ReadData&(ReadData^Cont);

Cont=ReadData;

Cont&=0x1F;

if((Cont!

=ContBak)&&(ContBak!

=0xff))

WWDG_CR=0X8F;//STM8软件复位整个系统

}

voidSX1276_Parameters_Select()

{

ContBak=Cont;

if((Cont&0x10)==cTx_Statue)

{

Flg_SX1276_RXorTX=Sx1276_TxMode;

Tx_phase=SetTx_Parameters;

}

else

{

Flg_SX1276_RXorTX=Sx1276_RxMode;

Rx_phase=Rx_Parameters_Set;

}

switch(Cont&0x0F)

{

case1:

/****BW选择*********/

gb_BW=1;//10.4KBW

//gb_BW=2;//15.6KBW

//gb_BW=3;//20.8KBW

//gb_BW=4;//31.2KBW

//gb_BW=5;//41.7KBW

//gb_BW=6;//62.5KBW

//gb_BW=7;//125KHzBW

/****BW选择结束*********/

/*******SF选择*********/

//gb_SF=0;//SF=6;64chips/symbol

//gb_SF=1;//SF=7;128chips/symbol

//gb_SF=2;//SF=8;256chips/symbol

//gb_SF=3;//SF=9;9512chips/symbol

gb_SF=4;////SF=10;1024chips/symbol

//gb_SF=5;////SF=11;2048chips/symbol

//gb_SF=6;//SF=12;4096chips/symbol

/****SF选择结束*********/

/*******CR选择*********/

//CR=1;////Errorcodingrate=4/5

CR=2;////Errorcodingrate=4/6

//CR=3;////Errorcodingrate=4/7

//CR=4;////Errorcodingrate=4/8

/*******CR选择结束*********/

break;

case2:

/****BW选择*********/

//gb_BW=1;//10.4KBW

//gb_BW=2;//15.6KBW

//gb_BW=3;//20.8KBW

//gb_BW=4;//31.2KBW

//gb_BW=5;//41.7KBW

gb_BW=6;//62.5KBW

//gb_BW=7;//125KHzBW

/****BW选择结束*********/

//gb_SF=0;//SF=6;64chips/symbol

//gb_SF=1;//SF=7;128chips/symbol

//gb_SF=2;//SF=8;256chips/symbol

//gb_SF=3;//SF=9;9512chips/symbol

//gb_SF=4;////SF=10;1024chips/symbol

gb_SF=5;////SF=11;2048chips/symbol

//gb_SF=6;//SF=12;4096chips/symbol

/*******CR选择*********/

//CR=1;////Errorcodingrate=4/5

CR=2;////Errorcodingrate=4/6

//CR=3;////Errorcodingrate=4/7

//CR=4;////Errorcodingrate=4/8

/*******CR选择结束*********/

break;

case4:

//125KHzBWSF=10;Errorcodingrate=4/6

/****BW选择*********/

//gb_BW=1;//10.4KBW

//gb_BW=2;//15.6KBW

//gb_BW=3;//20.8KBW

//gb_BW=4;//31.2KBW

//gb_BW=5;//41.7KBW

//gb_BW=6;//62.5KBW

gb_BW=7;//125KHzBW

/****BW选择结束*********/

/*******SF选择*********/

//gb_SF=0;//SF=6;64chips/symbol

//gb_SF=1;//SF=7;128chips/symbol

//gb_SF=2;//SF=8;256chips/symbol

//gb_SF=3;//SF=9;9512chips/symbol

gb_SF=4;////SF=10;1024chips/symbol

//gb_SF=5;////SF=11;2048chips/symbol

//gb_SF=6;//SF=12;4096chips/symbol

/****SF选择结束*********/

/*******CR选择*********/

//CR=1;////Errorcodingrate=4/5

CR=2;////Errorcodingrate=4/6

//CR=3;////Errorcodingrate=4/7

//CR=4;////Errorcodingrate=4/8

/*******CR选择结束*********/

break;

case8:

//FSK

break;

default:

//10.4KSF=7;cr=4/6

/****BW选择*********/

gb_BW=1;//10.4KBW

//gb_BW=2;//15.6KBW

//gb_BW=3;//20.8KBW

//gb_BW=4;//31.2KBW

//gb_BW=5;//41.7KBW

//gb_BW=6;//62.5KBW

//gb_BW=7;//125KHzBW

/****BW选择结束*********/

/*******SF选择*********/

//gb_SF=0;//SF=6;64chips/symbol

gb_SF=1;//SF=7;128chips/symbol

//gb_SF=2;//SF=8;256chips/symbol

//gb_SF=3;//SF=9;9512chips/symbol

//gb_SF=4;////SF=10;1024chips/symbol

//gb_SF=5;////SF=11;2048chips/symbol

//gb_SF=6;//SF=12;4096chips/symbol

/****SF选择结束*********/

/*******CR选择*********/

//CR=1;////Errorcodingrate=4/5

CR=2;////Errorcodingrate=4/6

//CR=3;////Errorcodingrate=4/7

//CR=4;////Errorcodingrate=4/8

/*******CR选择结束*********/

break;

}

}

/***********************************************

函数:

send_char_com(unsignedcharch)

功能:

串口发送一个十六进制数到PC

************************************************/

voidsend_char_com(u8UtxData)

{

UART1_CR2_TEN=1;

while(!

UART1_SR_TXE);

UART1_DR=UtxData;//

while(!

UART1_SR_TC);//TC==0发送完成等待UART发送数据完成,

UART1_CR2_TEN=0;

}

voidUart_Prints(uint8*pd)

{

while((*pd)!

='\0')

{

send_char_com(*pd);

pd++;

}

}

/**********************************************************

//保留1位小数,i就应该<2,2位小数,i<4;3位小数,i<5;

//dividend-被除数(分母)divisor-除数(分子)

**********************************************************/

voidFloat_Division(uint16dividend,uint16divisor)

{

uint8i;

for(i=0;i<5;i++)

{

D_value[i]=dividend/divisor;

dividend=dividend%divisor;

if(dividend>0)

{

dividend=dividend*10;

}

}

}

voidHexToAscii_AndUartSent(uint8Hex)

{

uint8Ascii[3];

Ascii[0]=(Hex/100)+0x30;

Ascii[1]=((Hex%100)/10)+0x30;

Ascii[2]=(Hex%10)+0x30;

send_char_com(Ascii[0]);

send_char_com(Ascii[1]);

send_char_com(Ascii[2]);

}

voidPER_Proc()

{

uint8p_total;

uint8p_lost;

switch(PER_phase)//SetTx_Parameters

{

casePerStart:

RxPacketCout=1;

PacketNuStart.U8[MSB]=gb_RxData[0];

PacketNuStart.U8[LSB]=gb_RxData[1];

PER_phase=PerGoOn;//payload

Uart_Prints((u8*)cPerStart);

break;

casePerGoOn:

RxPacketCout++;

PacketNuNow.U8[MSB]=gb_RxData[0];//MSB

PacketNuNow.U8[LSB]=gb_RxData[1];

Uart_Prints((u8*)cGET);

HexToAscii_AndUartSent(RxPacketCout);

Uart_Prints((u8*)cToatl);

p_total=(PacketNuNow.U16-PacketNuStart.U16+1);

HexToAscii_AndUartSent(p_total);

Uart_Prints((u8*)cLost);

p_lost=p_total-RxPacketCout;

HexToAscii_AndUartSent(p_lost);

Uart_Prints((u8*)cPer);

Float_Division(p_lost,p_total);///值放在D_value[5]里面,D_value[0]最高位//PER=(p_lost/p_total);

send_char_com(D_value[0]+0x30);

send_char_com(0x2e);//小数点

send_char_com(D_value[1]+0x30);

send_char_com(D_value[2]+0x30);

send_char_com(D_value[3]+0x30);

send_char_com(D_value[4]+0x30);

send_char_com(0x0D);//换行

send_char_com(0x0A);//换行

if(PacketNuNow.U16

PER_phase=PerStart;

if((PacketNuNow.U16-PacketNuStart.U16)>=99)

PER_phase=PerStart;

break;

casePerDone:

break;

}

}

voidmain(void)

{

CLK_CKDIVR=0x08;//16M内部RC经2分频后系统时钟为8M

asm("sim");//关全局中断

Sx1276EV_IO_Inital();//EVBIO初始化

TIM1_init();

EXTI_init();

UART1_init();

Sx1276M_GpioInt();//SX1276IO初始化

RF_RST=1;

Sx1276VerNO=SPIRead((u8)(REG_LR_VERSION>>8));//获取SX1276版本号0X11(V1A版本工程版)或者0X12(V1B正式版)

LED_RX=1;

LED_TX=1;

Flg_RxFinish=0;

KeyRead();

SX1276_Parameters_Select();

asm("rim");//开全局中断

while

(1)

{

if(Flg_SX1276_RXorTX==Sx1276_TxMode)//发射模式,下面是发射流程

{

switch(Tx_phase)//SetTx_Parameters

{

caseSetTx_Parameters:

SW_Swith_TX();

SX1276_LoRaEntryTx();

Tx_phase=Write_FIFO_AndTx;

break;

caseWrite_FIFO_AndTx:

SX1276_LoRaTxPacket();

Tx_phase=Wait_Tx_Finish;

LED_TX=0;

break;

caseWait_Tx_Finish:

if(RF_IRQ_DIO0)//Packetsendover发送完成了IRQ变为H,平时L

{

SX1276_LoRaClearIrq();//Clearirq

SX1276_Standby();//EntryStandbymode

TxTimeCout=0;

Tx_phase=Wait_NextTx;

LED_TX=1;

}

break;

caseWait_NextTx:

if(TxTimeCout>9)///1s发射间隔

{

Tx_phase=SetTx_Parameters;

TxTimeCout=0;

}

break;

}

}

else//接收模式

{

if((SX1276_GetStatue_Cout>100)&&(Flg_RxFinish==0))//定时获取SX1276的状态,确保SX1276在RX状态

{

SX1276_GetStatue_Cout=0;

Sx1276Statue=SPIRead((u8)(LR_RegOpMode>>8));

if(Sx1276Statue!

=cSx1276RxStatue)

Rx_phase=Rx_Parameters_Set;

}

switch(Rx_phase)//

{

caseRx_Parameters_Set:

SW_Swith_RX();

SX1276_LoRaEntryRx();

RF_IRQ_EN();

SX1276_GetStatue_Cout=150;

Rx_phase=Wait_RxFinish;

break;

caseWait_RxFinish:

if(Flg_RxFinish)

{

Flg_RxFinish=0;

LED_RX=~LED_RX;

PER_Proc();//PER处理程序,从UART输出(波特率19200bps)PER信息,100个包为一个Cycle,

}

break;

}

}

}

}

/**********************************************************

外部中断PE入口

**********************************************************/

#pragmavector=8

__interruptvoidEXTI_PD(void)

{

SX1276_LoRaRxPacket();

}

/**********************************************************

Timer1中断入口

**********************************************************/

#pragmavector=TIM1_OVR_UIF_vector

__interruptvoidTIM1_OVR_UIF(void)//定时80ms一个周期

{

SX1276_GetStatue_Cout++;

TxTimeCout++;

KeyRead();//按键扫描

TIM1_SR1=0;//清除更新中断标记

}

/**********************************************************

程序结束

**********************************************************/

SX1278LoRa通信程序

#include

#include"My_type.h"

#include"sx1276-LoRa.h"

u8gb_SF;

u8gb_BW;

u8CR;//LR_RegModemConfig1

#defineCRC0x01//CRCEnable

#definedatlen11

u8gtmp;

/**********************************************************

**Parametertabledefine

**********************************************************/

//__rootconstu16SX1276FreqTbl[3]={0x066C,0x0780,0x0800};//434MHz

__rootconstu16SX1276FreqTbl[3]={0x0685,0x073b,0x0813};//434MHz@26m

//__

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1