金牌会员
 
- 积分
- 1289
- 金钱
- 1289
- 注册时间
- 2014-6-15
- 在线时间
- 143 小时
|
1金钱
下面是我测试GPRS的程序,
程序中有个结构体变量 g_SIM900.Step和全局变量g_sendStep
我仿真发现 这两个变量的值会变得很奇怪,
现在g_SIM900.Step根本没有使用, 发现它却会改变,怎么回事?
g_sendStep 有使用,但是 他会变成一个不应该有的值,很奇怪。
最开始是g_SIM900.Step switch(g_SIM900.Step) ,发现 g_SIM900.Step的不正常后改成switch(g_sendStepp) ,后g_sendStep不正常。
但是这个时候g_SIM900.Step 根本没有使用 求大神帮忙
#include "stm32f10x.h"
#include "main.h"
#include "key.h"
#include <string.h>
#include <stdio.h>
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
#define EVAL_COM USARTx
PUTCHAR_PROTOTYPE
{
USART_SendData(EVAL_COM, (uint8_t) ch);
while (USART_GetFlagStatus(EVAL_COM, USART_FLAG_TC) == RESET)
{}
return ch;
}
//#ifdef USE_FULL_ASSERT
void GPIO_Configuration(void);
void USART_Configuration(u32 baud);
void TaskBaseTime(void);
void uart_init(u32 bound);
static unsigned char FineString(unsigned char *szDes, unsigned char *szSrc);
#define LED1_ON GPIO_ResetBits(GPIOB,GPIO_Pin_5)
#define LED1_OFF GPIO_SetBits(GPIOB,GPIO_Pin_5)
#define POWER_OFF GPIO_ResetBits(GPIOB,GPIO_Pin_4)
#define POWER_ON GPIO_SetBits(GPIOB,GPIO_Pin_4)
SIM900Str g_SIM900;
USARTStr g_USART;
u8 g_sendStep=0;
u8 g_SendCmdIndex=0;
vu16 g_LedFlashTime =1000;
char SIM900CMD [][50]={{"AT\r\n"}, //返回OK只能代表模块正常,不代表SIM卡正常,
{"ATE0\r\n"},
{"AT+CREG?\r\n"},
{"ATZ\r\n"},
{"AT+CGCLASS=\"B\"\r\n"},
{"AT+CGDCONT=1,\"IP\",\"CMNET\"\r\n"},
{"AT+CGATT=1\r\n"},
{"AT+CIPCSGP=1,\"CMNET\"\r\n"},
{"AT+CIPSTART=\"TCP\",\"61.174.40.245\",\"27980\"\r\n"},
};
int main(void)
{
SystemInit();
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
/* Configure the Priority Group to 2 bits */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
GPIO_Configuration();
USART_Configuration(9600);
TaskBaseTime();
KeyIO_Init();
g_sendStep =0;
g_LedFlashTime =1000;
g_sendStep = 1;
while (1)
{
/*
if( IOFir_stru.ScanTime==0 )
{
IOFir_stru.ScanTime = 2;
IOFir_stru.updata(&IOFir_stru);
key.InData = IOFir_stru.IOData;
KeyScan(&key);
}
*/
if(g_LedFlashTime>500)
{
LED1_ON;
}
else
{
LED1_OFF;
}
if(!g_LedFlashTime)
{
g_LedFlashTime=1000;
}
switch(g_sendStep)
{
case 1:
printf(SIM900CMD[g_SendCmdIndex]);
g_sendStep =2;
g_SIM900.TimeOver =1000;
break;
case 2:
if(g_SIM900.TimeOver)
{
if( FineString(g_USART.RXbuf,"OK"))
{
g_sendStep =1;
g_SendCmdIndex++;
memset(g_USART.RXbuf,0,20);
//if(g_SendCmdIndex >=(sizeof(SIM900CMD)/sizeof(SIM900CMD[0])-1))
if(g_SendCmdIndex >=8)
g_sendStep = 3;
}
}else
{
g_sendStep = 1;
}
break;
case 3:
printf(SIM900CMD[8]);
g_SIM900.TimeOver = 10000;
g_sendStep =4;
break;
case 4:
if(g_SIM900.TimeOver)
{
if( FineString(g_USART.RXbuf,"CONNECT OK"))
{
g_sendStep = 5;
}
}
else
{
g_sendStep = 3;
}
break;
case 5:
printf("AT+CIPSEND\r\n");
g_sendStep = 7;
break;
case 7:
if( FineString(g_USART.RXbuf,">"))
{
g_sendStep =8;
memset(g_USART.RXbuf,0,20);
}
break;
case 8:
printf("12341232453654769876123456789997654322345678\r\n");
g_sendStep =9;
break;
case 9:
while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET);
USART_SendData(EVAL_COM, 0x1A); //向串口 1 发送数据
g_sendStep = 10;
break;
case 10:
if( FineString(g_USART.RXbuf,"OK"))
{
memset(g_USART.RXbuf,0,20);
g_sendStep = 5;
}
break;
/**/
default:
break;
}
}
}
/**
* @brief Configure the GPIOD Pins.
* @param None
* @retval : None
*/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
/* GPIOB configuration: PB12 PB13 PB14 PB15 as led controller */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/*******************************************************************************
* 函数名称 : USART_Configuration
* 描述 : 初始化通讯口1,波特率:9600 数据w
* 输入 : None
* 输出 : None
* 返回 : None
*******************************************************************************/
void USART_Configuration(u32 baud)
{
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(USART_TX_CLK | USART_TX_CLK, ENABLE);
RCC_APBxPeriphClockCmd(USARTx_CLK, ENABLE);
GPIO_InitStructure.GPIO_Pin = USART_TX_PIN; //TX
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//GPIO_Mode_AF_PP;
GPIO_Init(USART_TX_GPIO, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = USART_RX_PIN; //RX
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//GPIO_Mode_AF_PP;
GPIO_Init(USART_RX_GPIO, &GPIO_InitStructure);
/* Configure USARTx */
USART_DeInit(USARTx);
USART_InitStructure.USART_BaudRate = baud;
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;
/* Configure USARTx */
USART_Init(USARTx, &USART_InitStructure);
/* Enable USART1 Receive and Transmit interrupts */
NVIC_InitStructure.NVIC_IRQChannel = USARTx_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE);//DISABLE
USART_ITConfig(USARTx, USART_IT_TXE, DISABLE);
/* Enable the USARTx */
USART_Cmd(USARTx, ENABLE);
}
/*******************************************************************************
* Function Name : TaskBaseTime
* Description : 用作任务管理或其它定时的时间基准。基准为1ms
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void TaskBaseTime(void)
{
/* Setup SysTick Timer for 1 msec interrupts */
if (SysTick_Config(SystemCoreClock / 1000))//5000
{
/* Capture error */
while (1);
}
/* Configure the SysTick handler priority */
NVIC_SetPriority(SysTick_IRQn, 0x0);
}
|
|