main.c
#include "stm32f4_discovery.h"
#include <stdio.h>
#define LED1_ON GPIO_SetBits(GPIOD,GPIO_Pin_12)
#define LED1_OFF GPIO_ResetBits(GPIOD,GPIO_Pin_12)
#define LED2_ON GPIO_SetBits(GPIOD,GPIO_Pin_13)
#define LED2_OFF GPIO_ResetBits(GPIOD,GPIO_Pin_13)
extern uint8_t NbrOfDataToTransfer;
extern uint8_t NbrOfDataToRead;
extern __IO uint8_t TxCounter;
extern __IO uint16_t RxCounter;
extern volatile unsigned char MsgAddEnd;
extern volatile unsigned char MsgAdd[5];
extern volatile unsigned char MsgContentEnd;
extern volatile unsigned char MsgContent[240];
void NVIC_Config(void);
void GPIO_Configuration(void);
void STM_EVAL_COMInit(void);
void USART_Configuration(int BaudRate);
void LED_Config(void);
void Delay(__IO uint32_t nCount);
void SendMSG2GF(void);
void MsgRemindInit(void);
void ReadMSG(void);
void JudgeFromMsg(void);
int main(void)
{
/* Configure the system clocks */
NVIC_Config(); /* NVIC Configuration */
//GPIO_Configuration(); /* Configure the GPIOs */
STM_EVAL_COMInit();
USART_Configuration(115200); /* Configure the USART1 's mode */
/* Enable the EVAL_COM1 Transmit interrupt: this interrupt is generated when the
EVAL_COM1 transmit data register is empty */
LED_Config();
//SendMSG2GF();
MsgRemindInit();
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
while (1)
{
Delay(0xFFFF);
ReadMSG();
JudgeFromMsg();
}
}
void MsgRemindInit()
{
int i;
/*AT+CNMI=2,1 短信提示*/
unsigned char CMD1[13] = {0x41 ,0x54 ,0x2B ,0x43 ,0x4E ,0x4D ,0x49 ,0x3D ,0x32 ,0x2C ,0x31 ,0x0D ,0x0A};
/*AT+CMGF=1 英文方式发送*/
unsigned char CMD2[11] = {0x41 ,0x54 ,0x2B ,0x43 ,0x4D ,0x47 ,0x46 ,0x3D ,0x31 ,0x0D ,0x0A};
for(i = 0; i < 13; ++i)
{
USART_SendData(USART1, CMD1[i]);
Delay(0xFFF);
}
Delay(0xFFFFFF);
for(i = 0; i < 11; ++i)
{
USART_SendData(USART1, CMD2[i]);
Delay(0xFFF);
}
Delay(0xFFFFFF);
}
void ReadMSG()
{
int i;
unsigned char CMD1[8] = {0x41 , 0x54 , 0x2B , 0x43 , 0x4D , 0x47 , 0x52 , 0x3D};
unsigned char CMD2[5] = {0xff, 0xff, 0xff, 0xff, 0xff}; // 改回000
unsigned char CMD3[2] = {0x0D, 0x0A};
while(MsgAddEnd == 0) Delay(1);
for(i = 0; i < 5; ++i)
{
CMD2[i] = MsgAdd[i];
if(MsgAdd[i] == 0xff) break;
}
MsgAddEnd = 0;
for(i = 0; i < 5; ++i) MsgAdd[i] = 0xff;
/*tx*/
for(i = 0; i < 8; ++i)
{
USART_SendData(USART1, CMD1[i]);
Delay(0xFFF);
}
for(i = 0; i < 5; ++i)
{
if(CMD2[i] != 0xff)
{
if(CMD2[i] == 0x00) break;
USART_SendData(USART1, CMD2[i]);
Delay(0xFFF);
}
else break;
}
for(i = 0; i < 2; ++i)
{
USART_SendData(USART1, CMD3[i]);
Delay(0xFFF);
}
LED1_ON;
/*waiting for msg content*/
while(MsgContentEnd == 0) Delay(1);
Delay(0xff);
LED1_OFF;
MsgContentEnd = 0;
}
void JudgeFromMsg()
{
int i = 0;
if(MsgContent[0] == '1')
{
LED1_ON ;
LED2_ON ;
}
if(MsgContent[0] == '0')
{