📄 car_sim300.c
字号:
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 + -