实例介绍
【实例截图】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");
 /*开机画面结束*/
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
 
                 
            

网友评论
我要评论