基本信息
源码名称:多协议DTU网关(STM32F1软硬件工程实例, 已量产)
源码大小:91.06M
文件格式:.rar
开发语言:C/C++
更新时间:2021-08-14
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
基于STM32F103RC的多协议GPRS网关, 可自由组合 RS485, lora, GPRS, 及各类串口传感器
STM32F1软硬件工程实例, 已量产, 可借鉴, 虽然是GPRS的产品, 由于是AT指令, 可以无缝移植到NB, CAT1, CAT4同类产品

include "stm32f10x.h"
#include "bsp_usart.h"
#include "bsp_led.h"
#include "bsp_TiMbase.h"
#include "delay.h"
#include "sim800c.h"
#include "bsp_exti.h" 
#include "bsp_internal_flash.h"
#include "bsp_iwdg.h" 


#include "string.h"
#include <stdio.h>
#include <stdlib.h>

/*串口(ModBUs)参数*/
uint8_t cmdRecvBuff_485[USART_RECV_SIZE] = {0};        //串口缓存
uint16_t cmdRecvinIndex_485 = 0;            //串口缓存计数器

uint32_t usart_485_account = 0;               //串口通讯计时器
char Usart_485_Current_Flag = 0;          //串口近期接收数据标志位

uint8_t cmdRecvBuff_GPRS[USART_RECV_SIZE] = {0};        //串口缓存
uint16_t cmdRecvinIndex_GPRS = 0;            //串口缓存计数器
uint32_t usart_GPRS_account = 0;               //串口通讯计时器
char Usart_GPRS_Current_Flag = 0;          //串口近期接收数据标志位

uint8_t cmdRecvBuff_LORA[USART_RECV_SIZE] = {0};        //串口缓存
uint16_t cmdRecvinIndex_LORA = 0;            //串口缓存计数器
uint32_t usart_LORA_account = 0;               //串口通讯计时器
char Usart_LORA_Current_Flag = 0;          //串口近期接收数据标志位

char Receive_Status_485 = 0;
char Receive_Status_GPRS = 0;
char Receive_Status_LORA = 0;

//uint8_t cmdSentBuff_485LORA[USART_SENT_SIZE] = {0};        //串口缓存
//uint16_t cmdSentinIndex_485LORA = 0;            //串口缓存计数器

char DTU_Set_Usart_flag = 0;//DTU设置模式下485口波特率改为9600的标志位
char DTU_Set_LoraRestart_flag = 0;//DTU设置模式下Lora模块复位的标志位


//uint32_t GPRS_pk_ON_account = 0; 

/**sim800c用的变量,开始**/
char GPRS_Status_Flag = 0;

uint8_t port[6]; //
uint8_t mode=0; //0,TCP连接;1,UDP连接;2,httpget连接;3,httppost连接;4,ftpget连接;5,ftpput连接

uint8_t ipbuf[16]; //IP缓存
uint8_t iplen=0; //IP长度 

uint8_t Usart_BaudRate_Asicii[6]; //485和lora波特率设置用的数组
uint32_t Usart_BaudRate = 0;
uint8_t GPRS_ID[20] = {0};       //DTU的GPRS_ID设置用的数组
uint8_t workmode=0;        //0,485;1,LORA

uint8_t httpurl[FLASH_HTTP_SIZE - 3] = {0};
uint8_t ftpurl[30] = {0};

uint8_t ftptype[3] = {0};
uint8_t ftpport[6];
uint8_t ftpuser[20] = {0};
uint8_t ftppw[20] = {0};
uint8_t ftpfilename[30] = {0};
uint8_t ftpfilepath[50] = {0};

/**sim800c用的变量,结束**/

/**stm32内部flash用的变量,开始**/
//uint32_t InternalFlash_EraseAddr;

/**stm32内部flash用的变量,结束**/

char DTU_Status_Flag = 0; //DTU设置标志位
uint8_t GPRS_Param_ready_Flag = 0;
uint8_t GPRS_Param_save_Flag = 0;

uint8_t Http_ready_Flag = 0;
uint8_t Http_save_Flag = 0;

uint8_t Ftp_ready_Flag = 0;
uint8_t Ftp_save_Flag = 0;

uint8_t USART_PRINTF_FLAG = 1;   //printf函数串口选择标志位

ABT_LocalTimeTypeDef G_LocalTime;  //时间结构体
  
char Time_Position_Refresh_Flag = 0;

//uint8_t Http_setting_Flag = 0; //HTTP应用内容保存完成标志位
uint8_t Ftp_setting_Flag = 0; //FTP应用内容保存完成标志位

uint16_t Delay_485_LORA = DELAY_485_LORA_OTHERS;


//uint32_t clean = 0;     //接收缓存数组清零用的for语句计数变量



#define SOFT_DELAY Delay(0x0FFFFF);

void Delay(__IO u32 nCount); 


/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int i,j;
int main(void)
{
   
   
  /*----外设初始开始,初始化USART 配置模式为 115200 8-N-1,中断接收----*/
  USART_Config_485(9600);//如果未设置,则默认9600波特率(仅485口)
  USART_Config_GPRS();//GPRS串口波特率115200写死
  USART_Config_LORA(9600);

LED_GPIO_Config();
/*延时函数初始化*/
  delay_init();

/*定时器和LED灯初始化*/
BASIC_TIM_Init();

/* 初始化EXTI中断,按下按键会触发中断,
  *  触发中断会进入stm32f4xx_it.c文件中的函数
*  KEY1_IRQHandler,处理中断,反转LED灯。
*/
EXTI_Key_Config(); 
/*----------外设初始结束-----------*/


/*---检查是否为独立看门狗或窗口看门狗复位,开始---*/
if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET)
{
/* 独立看门狗复位 */
/*  亮红灯 */
RXD_ON;

/* 清除标志 */
RCC_ClearFlag();

}
 
delay_100ms(20);
RXD_OFF;
/*----检查是否为独立看门狗或窗口看门狗复位,结束----------------*/
 
/*----初始化表示DTU已经烧了程序----*/
for(i = 0; i < 3 ; i )
{
RXD_ON;
TXD_ON;
        delay_100ms(5);   
RXD_OFF;
TXD_OFF;  
        delay_100ms(5);  
}//初始化表示DTU已经烧了程序
 
 
 

/*---------------独立看门狗设置开始--------------------------------------*/  
// IWDG 1s 超时溢出
IWDG_Config(IWDG_Prescaler_64 ,625);
/*-------------独立看门狗设置结束-------------*/
 
 
/*------------初始化读取DTU配置参数开始--------------*/
GPRS_Param_ready_Flag = InternalFlash_485_ReadParam();
   if(GPRS_Param_ready_Flag == 1)
   {
Usart_BaudRate = sim800c_string2hex(Usart_BaudRate_Asicii);
USART_Config_485(Usart_BaudRate);
USART_Config_LORA(Usart_BaudRate);
   
/*开机画面开始*/
   usart_485_printf_DIR();
    printf( "GPRS-LORA-RS485 DTU provided by Chengdu Xinxing Electronic Technology Co., Ltd\r\n");
    printf( "XXXX 公司 GPRS-LORA-RS485 DTU\r\n");
    printf( "Hardware Version V4.3.3\r\n");
    printf( "硬件版本 V4.3.3\r\n");
    printf( "Software Version VP9.3\r\n");
    printf( "软件版本 VP9.3\r\n");
    printf("英文 SLOGAN!!!\r\n");
    printf("中文 SLOGAN \n\n\n\n");
/*开机画面结束*/