嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元微信扫码支付:2 元
请留下您的邮箱,我们将在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");
/*开机画面结束*/