⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 car_sim300.c

📁 GPRS-GPS车载机控制源码
💻 C
📖 第 1 页 / 共 5 页
字号:
							0x00,0x01, //MSS
							0x00,0x01, //not defined
							0x00,0x01, //ZDA
							0x00,0x01, //not defined
							0x12,0xC0, // bitrate ----------- //payload
							0x01,0x60, //checksum 
							0xB0,0xB3 // end sequence
						 };
*/						 

BYTE bGpsSet[6][25]={"$PSRF103,00,00,00,01*24","$PSRF103,01,00,00,01*25","$PSRF103,02,00,00,01*26",
				     "$PSRF103,03,00,00,01*27","$PSRF103,04,00,01,01*21","$PSRF103,05,00,00,01*21"};
	

BYTE      B_SuperPassWord[]="159753";//超级密码
BYTE      B_DefaultPassWord[]="1234";//默认密码
//BYTE      B_DefaultMont[]="13392836733";
BYTE      B_DefaultMont[]="13924662814";
BYTE      B_DefaultModem[]="13925296854";
//BYTE      B_DefaultIP[]="202.96.155.118";//默认IP地址
BYTE      B_DefaultIP[]="58.61.160.72";//默认IP地址

typedef struct  {
  BYTE    bLatitude[12];//纬度
  BYTE    bLongitude[12];//经度
  BYTE    bCurDate[12];//当前日期
  BYTE    bCurTime[12];//当前时间
  BYTE    bSpeed[12];//速度
  BYTE    bDirection[12];//方向
}recGpsLct;

recGpsLct  REC_GPSLCTINFO;

BYTE    B_SwapDataCount=0;//重复连接交换数据次数
BYTE    B_SmsSendCnt=0;//短消息重复发送次数

static unsigned char led = 0x00;
static unsigned char relay = 0x00,beep = 0x00;

BYTE B_DisCnctRelayTime;

//BYTE KEY;
//BYTE RELAY;

/**********************************************************************************/
           
/**************************定义函数列表*************************/
void vSmsPutInBuf(BYTE bSmsLen,BYTE  bSmsBuf[]);
void vRelayOut(void),vKeyCheck(void),vLedFlashing(void),vAtCmdOverTime(void);
void vSendSmsData(void);
void vSMSSendSucc(void);
void vGpsCheckOver(void);
void vIinitGps(void);
void vStartAtCommand(BYTE bCommandItem);
void vStopSoftTimer_A(WORD wIndex);
void vSwapGpsLctTime(void);

void vConfirmOK(void),vConfirmERROR(void),vConfirmRING(void),vConfirmCLIP(void),vConfirmCSQ(void),
     vConfirmNOCARIR(void),vConfirmCMGS(void),vConfirmCMS_ERROR(void),vConfirmCCNT_OK(void),
     vConfirmCLOSED(void),vConfirmCMGL(void),vConfirmCMTI(void),vConfirmCMGR(void),vConfirmCCID(void),
     vConfirmCSCA(void),vConfirmIPD(void),vConfirmCallRdy(void),vConfirmCCNTFAIL(void),vSwapGpsStart(BYTE *bPhone,BYTE fbDataMode);
     

#define     MAX_CONFIRM_FUNC_NUM                        26

struct FunctionTable    REC_ConfirmFunTable[ MAX_CONFIRM_FUNC_NUM ] = 
{
	{
		"OK",
		vConfirmOK//1
	},

	{
		"SHUT OK",
		vConfirmOK//2
	},
	
	{
		"SEND OK",
		vConfirmOK//3
	},
	
	{
		"ERROR",
		vConfirmERROR//4
	},

	{
		"+CME ERROR:",
		vConfirmERROR//5
	},
	
	{
		"+CMS ERROR:",
		vConfirmCMS_ERROR//6
	},

	{
		"SEND FAIL:",
		vConfirmERROR//7
	},

	{
		"RING",
		vConfirmRING//8
	},
	
	{
		"+CLIP:",
		vConfirmCLIP//9
	},

	{
		"+CMGS:",
		vConfirmCMGS//10
	},

	{
		"CONNECT OK",
		vConfirmCCNT_OK//11
	},
	
	{
		"CLOSED",
		vConfirmCLOSED//12
	},

	{
		"NO CARRIER",
		vConfirmNOCARIR//13
	},
	
	{
		"NO ANSWER",
		vConfirmNOCARIR//14
	},
	
	{
		"BUSY",
		vConfirmNOCARIR//15
	},

	{
		"+CMGL:",
		vConfirmCMGL//16
	},
	
	{
		"+CMTI:",
		vConfirmCMTI//17
	},
	
	{
		"+CMGR:",
		vConfirmCMGR//18
	},
	
	{
		"+CSCA:",
		vConfirmCSCA//19
	},
	
	{
		"+IPD",
		vConfirmIPD//20
	},
	
	{
		"Call Ready",
		vConfirmCallRdy//21
	},
	
	{
		"CONNECT FAIL",
		vConfirmCCNTFAIL//22
	},
	
	{
		"AT+CCID",
		vConfirmCCID//23
	},

	{
		"NO DIALTONE",
		vConfirmNOCARIR//24//NO DIALTONE 
	},

	{
		"+CSQ:",
		vConfirmCSQ//25
	}

};

 /*setupclock function*/
void SetupClock(void)
{
  RCC_DeInit ();                        /* RCC system reset(for debug purpose)*/
  RCC_HSEConfig (RCC_HSE_ON);           /* Enable HSE                         */

  /* Wait till HSE is ready                                                   */
  while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);

  RCC_HCLKConfig   (RCC_SYSCLK_Div1);   /* HCLK   = SYSCLK                    */
  RCC_PCLK2Config  (RCC_HCLK_Div1);     /* PCLK2  = HCLK                      */
  RCC_PCLK1Config  (RCC_HCLK_Div2);     /* PCLK1  = HCLK/2                    */
  RCC_ADCCLKConfig (RCC_PCLK2_Div4);    /* ADCCLK = PCLK2/4                   */

  *(vu32 *)0x40022000 = 0x01;           /* Flash 2 wait state                 */

  /* PLLCLK = 8MHz * 9 = 72 MHz                                               */
  RCC_PLLConfig (RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

  RCC_PLLCmd (ENABLE);                  /* Enable PLL                         */

  /* Wait till PLL is ready                                                   */
  while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

  /* Select PLL as system clock source                                        */
  RCC_SYSCLKConfig (RCC_SYSCLKSource_PLLCLK);

  /* Wait till PLL is used as system clock source                             */
  while (RCC_GetSYSCLKSource() != 0x08);

  /* Enable USART1 and GPIOA clock                                            */
  RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

  /* Enable GPIOB clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  /* Enable USART2	*/
  RCC_APB1PeriphClockCmd (RCC_APB1Periph_USART2, ENABLE);

  /* I2C1 Periph clock enable */
  //RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);

  /* Check if the system has resumed from IWDG reset -------------------------*/
  if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET)
  {	/* IWDGRST flag set */
	/* Clear reset flags */
    RCC_ClearFlag();
  }

  /* Enable LSI	*/
  RCC_LSICmd(ENABLE);

 
  /* Enable write access to IWDG_PR and IWDG_RLR registers */
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

  /* IWDG counter clock: 32KHz(LSI) / 32 = 1KHz */
  IWDG_SetPrescaler(IWDG_Prescaler_32);

  /* Set counter reload value to 349 */
  IWDG_SetReload(349);

  /* Reload IWDG counter */
  IWDG_ReloadCounter();

  /* SysTick event each 10 ms with input clock equal to 9MHz (HCLK/8)         */
  SysTick_SetReload(90000);

  SysTick_ITConfig(ENABLE);             /* Enable SysTick interrupt           */
}

/*******************************************************************************
* Function Name  : NVIC_Configuration
* Description    : Configures the nested vectored interrupt controller.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

#ifdef  VECT_TAB_RAM  
  /* Set the Vector Table base location at 0x20000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
#endif

  /* Enable the USART1 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
	
 /* Enable the USART2 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
	
}



 void SetupUART (void)  {

  GPIO_InitTypeDef  GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
  
  /* Configure USART1 Rx (PA10) as input floating                             */
  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Configure USART1 Tx (PA9) as alternate function push-pull                */
  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  
  /* Configure USART2 Rx (PA3) as input floating                             */
  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Configure USART2 Tx (PA2) as alternate function push-pull                */
  GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* USART1,2 configured as follow:
        - BaudRate = 115200 baud  
        - Word Length = 8 Bits
        - One Stop Bit
        - No parity
        - Hardware flow control disabled (RTS and CTS signals)
        - Receive and transmit enabled
        - USART Clock disabled
        - USART CPOL: Clock is active low
        - USART CPHA: Data is captured on the middle 
        - USART LastBit: The clock pulse of the last data bit is not output to 
                         the SCLK pin
  */
  USART_InitStructure.USART_BaudRate            = 4800;
  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_InitStructure.USART_Clock               = USART_Clock_Disable;
  USART_InitStructure.USART_CPOL                = USART_CPOL_Low;
  USART_InitStructure.USART_CPHA                = USART_CPHA_2Edge;
  USART_InitStructure.USART_LastBit             = USART_LastBit_Disable;
  
  USART_Init(USART2, &USART_InitStructure);

  USART_InitStructure.USART_BaudRate            = 4800;

  USART_Init(USART1, &USART_InitStructure);
  
  /* Enable the USART Transmoit interrupt: this interrupt is generated when the 
   USART1 transmit data register is empty */  
//  USART_ITConfig(USART1, USART_IT_TXE, ENABLE);

/* Enable the USART Receive interrupt: this interrupt is generated when the 
   USART1 receive data register is not empty */
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

/* Enable the USART Transmoit interrupt: this interrupt is generated when the 
   USART2 transmit data register is empty */  
//  USART_ITConfig(USART2, USART_IT_TXE, ENABLE);

/* Enable the USART Receive interrupt: this interrupt is generated when the 
   USART1 receive data register is not empty */
  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);

  
  USART_Cmd(USART1, ENABLE); 
  USART_Cmd(USART2, ENABLE); 
}


void SetRELAYOut(void) {

  GPIO_InitTypeDef  GPIO_InitStructure;

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

}


void SetSCLOut (void) {

  GPIO_InitTypeDef  GPIO_InitStructure;

  /* Configure I2C1 pins: SCL */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

}

void SetSDAOut(void) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -