基于STM32实现的的短信实时传送位置----GPS+GSM

 

总的来说就是实现了一个GPS数据通过串口发送给STM32,

STM32进行解码,

在通过串口把解码提取出的经纬度发送给GSM,

GSM根据给定的手机号发短信过去。

 

main函数里的最后一个while循环是每隔5s发一个位置出去

延时函数写在sim900a.c里,可以自行调节时间间隔。

就是这么任性。

 

 

 

 

main.c

/******************************************************************************** @attention** 实验平台:野火 ISO-STM32 开发板
*******************************************************************************/
#include "stm32f10x.h"
#include "bsp_usart1.h"
#include "gps_config.h"
#include <string.h>
#include "gsm.h"
#include extern void nmea_decode_test(void);/** 测试GPS模块功能* */double  zaishichua;
double  zaishichub;
int main(void)
{char zaiship1[14];char zaiship2[14];/* 配置USART1 用于向电脑printf调试信息*/USART1_Config();                          /* 初始化GPS模块使用的接口 */GPS_Config();printf("\r\nGPS模块测试例程\r\n");printf("\r\nGPS模块测试例程\r\n");      /
         while(1){/* GPS解码测试 */nmea_decode_test();printf("\r\n纬度:%f,经度%f\r\n",zaishichua,zaishichub);printf("\r\n纬度:%f,经度%f\r\n",zaishichua,zaishichub);sprintf(zaiship1,"%013.6f",zaishichua);sprintf(zaiship2,"%013.6f",zaishichub);gsm(zaiship1,zaiship2);}}

 

 

bsp_usart1.c

/********************************************************************************* @file    bsp_usart1.c* @author  fire* @version V1.0* @date    2013-xx-xx* @brief   重现c库printf函数到usart端口******************************************************************************* @attention** 实验平台:野火 iSO STM32 开发板********************************************************************************/#include "bsp_usart1.h"/*** @brief  USART1 GPIO 配置,工作模式配置。115200 8-N-1* @param  无* @retval 无*/
void USART1_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/* config USART1 clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);/* USART1 GPIO config *//* Configure USART1 Tx (PA.09) as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* Configure USART1 Rx (PA.10) as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);/* USART1 mode config */USART_InitStructure.USART_BaudRate = 115200;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No ;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART1, &USART_InitStructure);USART_Cmd(USART1, ENABLE);
}///重定向c库函数printf到USART1
int fputc(int ch, FILE *f)
{/* 发送一个字节数据到USART1 */USART_SendData(USART1, (uint8_t) ch);/* 等待发送完毕 */while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);return (ch);
}///重定向c库函数scanf到USART1
int fgetc(FILE *f)
{/* 等待串口1输入数据 */while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);return (int)USART_ReceiveData(USART1);
}/*********************************************END OF FILE**********************/

 

bsp_usart2.c

 

/******************** (C) COPYRIGHT 2012 WildFire Team *************************** 文件名  :usart2.c* 描述    :将printf函数重定向到USART2。这样就可以用printf函数将单片机的数据*           打印到PC上的超级终端或串口调试助手。         * 实验平台:野火STM32开发板* 库版本  :ST3.5.0** 作者    :wildfire team 
**********************************************************************************/
#include "bsp_usart2.h"
#include /// 配置USART2接收中断
static void NVIC_Configuration(void)
{NVIC_InitTypeDef NVIC_InitStructure;/* Configure the NVIC Preemption Priority Bits */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);/* Enable the USARTy Interrupt */NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}/** 函数名:USART2_Config* 描述  :USART2 GPIO 配置,工作模式配置* 输入  :无* 输出  : 无* 调用  :外部调用*/
void USART2_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/* config USART2 clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);/* USART2 GPIO config *//* Configure USART2 Tx (PA.02) as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* Configure USART2 Rx (PA.03) as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);/* USART2 mode config */USART_InitStructure.USART_BaudRate = 115200;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No ;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART2, &USART_InitStructure); /*    配置中断优先级 */NVIC_Configuration();/* 使能串口2接收中断 */USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);USART_Cmd(USART2, ENABLE);
}/** 函数名:fputc* 描述  :重定向c库函数printf到USART2* 输入  :无* 输出  :无* 调用  :由printf调用*/
//int fputc(int ch, FILE *f)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部