GPRS底層驅動
char GPRS_LINK = 0;
char gprs_send_id = 0;
uint16_t gprs_time = 5000;
struct Config_Info GPRS_Cmd[]={
"AT+CGATT?\r\n", "+CGATT: 1",50,\
"AT+CIPMODE=0\r\n","OK",50,\
"AT+CSTT=\"CMNET\"\r\n", "OK",25,\
"AT+CIICR\r\n","OK",25,\
"AT+CIFSR\r\n", ".", 25,\
"AT+CIPSTART=\"UDP\",\"120.25.67.66\",\"9718\"\r\n","CONNECT",50
};
unsigned char send_gprs[200] = {0};
void Delay_MS(uint32_t nCount)
{
TimingDelay = nCount;
while(TimingDelay != 0)
{
}
}
void GPRS_INIT(void)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_0 | GPIO_Pin_2|GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //複用模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推輓
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // 內部上拉
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC, GPIO_Pin_9);
GPIO_ResetBits(GPIOC, GPIO_Pin_9);
// GPIO_SetBits(GPIOC, GPIO_Pin_9);
GPIO_SetBits(GPIOC, GPIO_Pin_1);
GPIO_ResetBits(GPIOC, GPIO_Pin_2);
GPIO_ResetBits(GPIOC, GPIO_Pin_0);
Delay_MS(1000);
GPIO_SetBits(GPIOC, GPIO_Pin_0);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_2);
// GPIO_ResetBits(GPIOB, GPIO_Pin_2);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB, GPIO_Pin_2); //485 EN
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_12;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_Pin_1); //SD EN
GPIO_SetBits(GPIOA, GPIO_Pin_11); // RF EN
GPIO_ResetBits(GPIOA, GPIO_Pin_8); //3.3 EN
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_ResetBits(GPIOC, GPIO_Pin_6); //5V EN
GPIO_SetBits(GPIOB, GPIO_Pin_2); //485 EN
GPIO_ResetBits(GPIOA, GPIO_Pin_11); // RF EN
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_ResetBits(GPIOD, GPIO_Pin_2); //M0
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOC, GPIO_Pin_12); //M1
}
void send_gprsData(unsigned char *ptmp,unsigned char len)
{
unsigned char tmp[20] = "AT+CIPSEND=15\r\n";
tmp[11] = len/10 + 48;
tmp[12] = len%10 + 48;
// sprintf(tmp,"AT+CIPSEND=%2d\r\n",len);
USART_SEND(tmp,15,USART2);
Delay_MS(50);
USART_SEND(ptmp,len,USART2);
}
void GPRS_SEND(void)
{
if(GPRS_LINK == 0)
{
gprs_time = GPRS_Cmd[gprs_send_id].time * 100;
if(gprs_send_id == 6)
{
USART_SEND("ATE0\r\n",6,USART2);
}
else
USART_SEND(GPRS_Cmd[gprs_send_id].command,strlen((const char *)GPRS_Cmd[gprs_send_id].command),USART2);
// gprs_send_id++;
}
else
{
// gprs_time = 10000;
gprs_data_send();
// send_gprsData("AT+CIPSTART=\"UDP\",\"120.25.67.66\",\"9718\"\r\n",16);
}
}
void GPRS_READ(unsigned char *usart2_dat,unsigned char len)
{
if(GPRS_LINK == 0)
{
if(gprs_send_id == 6)
{
gprs_send_id = 0;
GPRS_LINK = 1;
}
else if(strstr((const char *)usart2_dat, (const char *)GPRS_Cmd[gprs_send_id].retComd))
{
gprs_send_id++;
}
}
else
{
}
usart_clea(usart2_dat,len);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.