在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → 多协议DTU网关(STM32F1软硬件工程实例, 已量产)

多协议DTU网关(STM32F1软硬件工程实例, 已量产)

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:91.06M
  • 下载次数:51
  • 浏览次数:348
  • 发布时间:2021-08-14
  • 实例类别:嵌入式开发
  • 发 布 人:reedonh
  • 文件格式:.rar
  • 所需积分:2
 相关标签: DTU GPRS LoRda rs485 多协议

实例介绍

【实例简介】基于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");
/*开机画面结束*/

实例下载地址

多协议DTU网关(STM32F1软硬件工程实例, 已量产)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警