实例介绍
【实例截图】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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论