• STM32 物联网 4G CAT1 SIMCOM A7680C 源码


    基于状态机编写4G模块驱动函数

    1. #include "bsp.h"
    2. char LTE_TX[512],LTE_RX[512];
    3. int LTE_TX_length,LTE_RX_length;
    4. char U1_TX_data[512],U1_RX_data[512];
    5. char LTE_DATA_buf[512];
    6. char LTE_COM_buf[512];
    7. char LTE_SEND_buf[512];
    8. unsigned char U1_TX_flag,U1_RX_flag;
    9. u16 U1_Tx_Counter,U1_Rx_Counter;
    10. char LTE_AT_state;
    11. char LTE_state;
    12. char LTE_SEND0,LTE_SEND1,LTE_SEND2,LTE_SEND3;
    13. char LTE_Connections; //LTEÁ¬½Ó±êÖ¾ 0£ºÎ´Á¬½Ó
    14. char LTE_TEMP_str[32];
    15. void UART1_Config(void)
    16. {
    17. GPIO_InitTypeDef GPIO_InitStructure;
    18. USART_InitTypeDef USART_InitStructure;
    19. NVIC_InitTypeDef NVIC_InitStructure;
    20. DMA_InitTypeDef DMA_Initstructure;
    21. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE, ENABLE);
    22. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);
    23. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
    24. RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM2 , ENABLE);
    25. //4G POWER
    26. RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE, ENABLE);
    27. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    28. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    29. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    30. GPIO_Init(GPIOE, &GPIO_InitStructure);
    31. GPIO_ResetBits(GPIOE, GPIO_Pin_1);
    32. //4G_PWRKEY
    33. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 ;
    34. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    35. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    36. GPIO_Init(GPIOE, &GPIO_InitStructure);
    37. GPIO_SetBits(GPIOE, GPIO_Pin_3);
    38. //4G_RESET
    39. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;
    40. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    41. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    42. GPIO_Init(GPIOB, &GPIO_InitStructure);
    43. GPIO_ResetBits(GPIOB, GPIO_Pin_1);
    44. //4G_RELAY
    45. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
    46. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    47. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    48. GPIO_Init(GPIOE, &GPIO_InitStructure);
    49. GPIO_SetBits(GPIOE, GPIO_Pin_8);
    50. GPIO_SetBits(GPIOE, GPIO_Pin_9);
    51. /* USART1 GPIO config */
    52. /* Configure USART1 Tx (PA.09) as alternate function push-pull */
    53. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    54. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    55. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    56. GPIO_Init(GPIOA, &GPIO_InitStructure);
    57. /* Configure USART1 Rx (PA.10) as input floating */
    58. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    59. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    60. GPIO_Init(GPIOA, &GPIO_InitStructure);
    61. /* USART1 mode config */
    62. USART_InitStructure.USART_BaudRate = 115200;
    63. USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    64. USART_InitStructure.USART_StopBits = USART_StopBits_1;
    65. USART_InitStructure.USART_Parity = USART_Parity_No ;
    66. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    67. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    68. USART_Init(USART1, &USART_InitStructure);
    69. NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
    70. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    71. NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
    72. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    73. NVIC_Init(&NVIC_InitStructure);
    74. /*uart1 RX DMAÅäÖÃ*/
    75. DMA_Initstructure.DMA_PeripheralBaseAddr = (u32)(&USART1->DR);
    76. DMA_Initstructure.DMA_MemoryBaseAddr = (u32)U1_RX_data;
    77. DMA_Initstructure.DMA_DIR = DMA_DIR_PeripheralSRC;
    78. DMA_Initstructure.DMA_BufferSize = 512;
    79. DMA_Initstructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    80. DMA_Initstructure.DMA_MemoryInc =DMA_MemoryInc_Enable;
    81. DMA_Initstructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    82. DMA_Initstructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    83. DMA_Initstructure.DMA_Mode = DMA_Mode_Normal;
    84. DMA_Initstructure.DMA_Priority = DMA_Priority_High;
    85. DMA_Initstructure.DMA_M2M = DMA_M2M_Disable;
    86. DMA_Init(DMA1_Channel5,&DMA_Initstructure); //Æô¶¯DMA
    87. DMA_Cmd(DMA1_Channel5,ENABLE);
    88. USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);
    89. USART_DMACmd(USART1,USART_DMAReq_Rx,ENABLE);
    90. USART_Cmd(USART1, ENABLE);
    91. }
    92. struct //×÷Òµ²ÉÑù
    93. {
    94. u16 LTE_Head;
    95. u16 LTE_Tail;
    96. u16 LTE_Lenght;
    97. char LTE_Buf[4][512];
    98. int LTE_Len[4];
    99. }LTE_Ring;
    100. void LTE_Ring_Init(void)
    101. {
    102. LTE_Ring.LTE_Head=0;
    103. LTE_Ring.LTE_Tail=0;
    104. LTE_Ring.LTE_Lenght=0;
    105. LTE_Ring.LTE_Len[0]=0;
    106. LTE_Ring.LTE_Len[1]=0;
    107. LTE_Ring.LTE_Len[2]=0;
    108. LTE_Ring.LTE_Len[3]=0;
    109. }
    110. unsigned char LTE_Write_Ring(char *data,unsigned int len)
    111. {
    112. if(LTE_Ring.LTE_Lenght >= 4)
    113. {
    114. return 0;
    115. }
    116. LTE_Ring.LTE_Len[LTE_Ring.LTE_Tail]=len;
    117. memcpy(LTE_Ring.LTE_Buf[LTE_Ring.LTE_Tail],data,len);
    118. LTE_Ring.LTE_Tail = (LTE_Ring.LTE_Tail+1)%4;
    119. LTE_Ring.LTE_Lenght++;
    120. return 1;
    121. }
    122. unsigned char LTE_Read_Ring(char *Data)
    123. {
    124. int len;
    125. if(LTE_Ring.LTE_Lenght == 0)
    126. {
    127. return 0;
    128. }
    129. len=LTE_Ring.LTE_Len[LTE_Ring.LTE_Head];
    130. memcpy(Data,LTE_Ring.LTE_Buf[LTE_Ring.LTE_Head],len);
    131. memset(LTE_Ring.LTE_Buf[LTE_Ring.LTE_Head],0,len);
    132. LTE_Ring.LTE_Len[LTE_Ring.LTE_Head]=0;
    133. LTE_Ring.LTE_Head = (LTE_Ring.LTE_Head+1)%4;
    134. LTE_Ring.LTE_Lenght--;
    135. return len;
    136. }
    137. struct //×÷Òµ²ÉÑù
    138. {
    139. u16 LTE_Head;
    140. u16 LTE_Tail;
    141. u16 LTE_Lenght;
    142. char LTE_Buf[4][512];
    143. int LTE_Len[4];
    144. }LTE1_T_Ring;
    145. void LTE1_T_Ring_Init(void)
    146. {
    147. LTE1_T_Ring.LTE_Head=0;
    148. LTE1_T_Ring.LTE_Tail=0;
    149. LTE1_T_Ring.LTE_Lenght=0;
    150. LTE1_T_Ring.LTE_Len[0]=0;
    151. LTE1_T_Ring.LTE_Len[1]=0;
    152. LTE1_T_Ring.LTE_Len[2]=0;
    153. LTE1_T_Ring.LTE_Len[3]=0;
    154. }
    155. unsigned char LTE1_T_Write_Ring(char *data,unsigned int len)
    156. {
    157. if(LTE1_T_Ring.LTE_Lenght >= 4)
    158. {
    159. return 0;
    160. }
    161. LTE1_T_Ring.LTE_Len[LTE1_T_Ring.LTE_Tail]=len;
    162. memcpy(LTE1_T_Ring.LTE_Buf[LTE1_T_Ring.LTE_Tail],data,len);
    163. LTE1_T_Ring.LTE_Tail = (LTE1_T_Ring.LTE_Tail+1)%4;
    164. LTE1_T_Ring.LTE_Lenght++;
    165. return 1;
    166. }
    167. unsigned char LTE1_T_Read_Ring(char *Data)
    168. {
    169. int len;
    170. if(LTE1_T_Ring.LTE_Lenght == 0)
    171. {
    172. return 0;
    173. }
    174. len=LTE1_T_Ring.LTE_Len[LTE1_T_Ring.LTE_Head];
    175. memcpy(Data,LTE1_T_Ring.LTE_Buf[LTE1_T_Ring.LTE_Head],len);
    176. memset(LTE1_T_Ring.LTE_Buf[LTE1_T_Ring.LTE_Head],0,len);
    177. LTE1_T_Ring.LTE_Len[LTE1_T_Ring.LTE_Head]=0;
    178. LTE1_T_Ring.LTE_Head = (LTE1_T_Ring.LTE_Head+1)%4;
    179. LTE1_T_Ring.LTE_Lenght--;
    180. return len;
    181. }
    182. struct //×÷Òµ²ÉÑù
    183. {
    184. u16 LTE_Head;
    185. u16 LTE_Tail;
    186. u16 LTE_Lenght;
    187. char LTE_Buf[4][512];
    188. int LTE_Len[4];
    189. }LTE2_T_Ring;
    190. void LTE2_T_Ring_Init(void)
    191. {
    192. LTE2_T_Ring.LTE_Head=0;
    193. LTE2_T_Ring.LTE_Tail=0;
    194. LTE2_T_Ring.LTE_Lenght=0;
    195. LTE2_T_Ring.LTE_Len[0]=0;
    196. LTE2_T_Ring.LTE_Len[1]=0;
    197. LTE2_T_Ring.LTE_Len[2]=0;
    198. LTE2_T_Ring.LTE_Len[3]=0;
    199. }
    200. unsigned char LTE2_T_Write_Ring(char *data,unsigned int len)
    201. {
    202. if(LTE2_T_Ring.LTE_Lenght >= 4)
    203. {
    204. return 0;
    205. }
    206. LTE2_T_Ring.LTE_Len[LTE2_T_Ring.LTE_Tail]=len;
    207. memcpy(LTE2_T_Ring.LTE_Buf[LTE2_T_Ring.LTE_Tail],data,len);
    208. LTE2_T_Ring.LTE_Tail = (LTE2_T_Ring.LTE_Tail+1)%4;
    209. LTE2_T_Ring.LTE_Lenght++;
    210. return 1;
    211. }
    212. unsigned char LTE2_T_Read_Ring(char *Data)
    213. {
    214. int len;
    215. if(LTE2_T_Ring.LTE_Lenght == 0)
    216. {
    217. return 0;
    218. }
    219. len=LTE2_T_Ring.LTE_Len[LTE2_T_Ring.LTE_Head];
    220. memcpy(Data,LTE2_T_Ring.LTE_Buf[LTE2_T_Ring.LTE_Head],len);
    221. memset(LTE2_T_Ring.LTE_Buf[LTE2_T_Ring.LTE_Head],0,len);
    222. LTE2_T_Ring.LTE_Len[LTE2_T_Ring.LTE_Head]=0;
    223. LTE2_T_Ring.LTE_Head = (LTE2_T_Ring.LTE_Head+1)%4;
    224. LTE2_T_Ring.LTE_Lenght--;
    225. return len;
    226. }
    227. struct //×÷Òµ²ÉÑù
    228. {
    229. u16 LTE_Head;
    230. u16 LTE_Tail;
    231. u16 LTE_Lenght;
    232. char LTE_Buf[4][512];
    233. int LTE_Len[4];
    234. }LTE3_T_Ring;
    235. void LTE3_T_Ring_Init(void)
    236. {
    237. LTE3_T_Ring.LTE_Head=0;
    238. LTE3_T_Ring.LTE_Tail=0;
    239. LTE3_T_Ring.LTE_Lenght=0;
    240. LTE3_T_Ring.LTE_Len[0]=0;
    241. LTE3_T_Ring.LTE_Len[1]=0;
    242. LTE3_T_Ring.LTE_Len[2]=0;
    243. LTE3_T_Ring.LTE_Len[3]=0;
    244. }
    245. unsigned char LTE3_T_Write_Ring(char *data,unsigned int len)
    246. {
    247. if(LTE3_T_Ring.LTE_Lenght >= 4)
    248. {
    249. return 0;
    250. }
    251. LTE3_T_Ring.LTE_Len[LTE3_T_Ring.LTE_Tail]=len;
    252. memcpy(LTE3_T_Ring.LTE_Buf[LTE3_T_Ring.LTE_Tail],data,len);
    253. LTE3_T_Ring.LTE_Tail = (LTE3_T_Ring.LTE_Tail+1)%4;
    254. LTE3_T_Ring.LTE_Lenght++;
    255. return 1;
    256. }
    257. unsigned char LTE3_T_Read_Ring(char *Data)
    258. {
    259. int len;
    260. if(LTE3_T_Ring.LTE_Lenght == 0)
    261. {
    262. return 0;
    263. }
    264. len=LTE3_T_Ring.LTE_Len[LTE3_T_Ring.LTE_Head];
    265. memcpy(Data,LTE3_T_Ring.LTE_Buf[LTE3_T_Ring.LTE_Head],len);
    266. memset(LTE3_T_Ring.LTE_Buf[LTE3_T_Ring.LTE_Head],0,len);
    267. LTE3_T_Ring.LTE_Len[LTE3_T_Ring.LTE_Head]=0;
    268. LTE3_T_Ring.LTE_Head = (LTE3_T_Ring.LTE_Head+1)%4;
    269. LTE3_T_Ring.LTE_Lenght--;
    270. return len;
    271. }
    272. void USART1_IRQHandler(void)
    273. {
    274. unsigned int i,j;
    275. char *buf;
    276. if(USART_GetITStatus(USART1,USART_IT_IDLE) == SET)
    277. {
    278. USART1->SR;
    279. USART1->DR;
    280. DMA_Cmd(DMA1_Channel5,DISABLE);
    281. U1_Rx_Counter = 512 - DMA_GetCurrDataCounter(DMA1_Channel5);
    282. if(buf=strstr(U1_RX_data, "RECV FROM:"))
    283. {
    284. if(buf=strstr(U1_RX_data, "114.116.6.187:10000"))
    285. {
    286. if(buf=strstr(U1_RX_data, "+IPD"))
    287. {
    288. for(i=0;i<512;i++)
    289. {
    290. if(buf[i]==0x0d)
    291. {
    292. if((buf[25]==0x70)&&(buf[26]==0x01)&&(buf[29]==0x01)) //+2µÚÒ»¸ö×Ö½Ú
    293. {
    294. for(j=0;j<30;j++)
    295. {
    296. LTE_IP[j]=buf[j+32];
    297. }
    298. LTE_PORT=(buf[62]<<8)+buf[63];
    299. for(j=0;j<4;j++)
    300. {
    301. local_ip[j]=buf[j+64];
    302. }
    303. for(j=0;j<4;j++)
    304. {
    305. mask_ip[j]=buf[j+68];
    306. }
    307. for(j=0;j<4;j++)
    308. {
    309. gateway_ip[j]=buf[j+72];
    310. }
    311. for(j=0;j<32;j++)
    312. {
    313. Lorawan_EUI[j]=buf[j+83];
    314. }
    315. for(j=0;j<32;j++)
    316. {
    317. Lorawan_DevAddr[j]=buf[j+115];
    318. }
    319. LTE_Connections=1;
    320. }
    321. if((buf[25]==0x70)&&(buf[26]==0x01)&&(buf[29]==0x00))
    322. {
    323. LTE_Connections=0;
    324. }
    325. break;
    326. }
    327. }
    328. }
    329. }
    330. if(buf=strstr(U1_RX_data, "114.116.6.187:20000"))
    331. {
    332. if(buf=strstr(U1_RX_data, "+IPD"))
    333. {
    334. for(i=0;i<512;i++)
    335. {
    336. if(buf[i]==0x0d)
    337. {
    338. if(i==5)UART2_T_Write_Ring((buf+7),(buf[4]-0x30));//1×Ö½Ú
    339. if(i==6)UART2_T_Write_Ring((buf+8),(((buf[4]-0x30)*10)+(buf[5]-0x30)));//2×Ö½Ú
    340. if(i==7)UART2_T_Write_Ring((buf+9),(((buf[4]-0x30)*100)+((buf[5]-0x30)*10)+(buf[6]-0x30)));//3×Ö½Ú
    341. if(i==8)UART2_T_Write_Ring((buf+10),(((buf[4]-0x30)*1000)+((buf[5]-0x30)*100)+((buf[6]-0x30)*10)+(buf[7]-0x30)));//4×Ö½Ú
    342. break;
    343. }
    344. }
    345. }
    346. }
    347. if(buf=strstr(U1_RX_data, "114.116.6.187:30000"))
    348. {
    349. if(buf=strstr(U1_RX_data, "+IPD"))
    350. {
    351. for(i=0;i<512;i++)
    352. {
    353. if(buf[i]==0x0d)
    354. {
    355. if(i==5)UART3_T_Write_Ring((buf+7),(buf[4]-0x30));//1×Ö½Ú
    356. if(i==6)UART3_T_Write_Ring((buf+8),(((buf[4]-0x30)*10)+(buf[5]-0x30)));//2×Ö½Ú
    357. if(i==7)UART3_T_Write_Ring((buf+9),(((buf[4]-0x30)*100)+((buf[5]-0x30)*10)+(buf[6]-0x30)));//3×Ö½Ú
    358. if(i==8)UART3_T_Write_Ring((buf+10),(((buf[4]-0x30)*1000)+((buf[5]-0x30)*100)+((buf[6]-0x30)*10)+(buf[7]-0x30)));//4×Ö½Ú
    359. break;
    360. }
    361. }
    362. }
    363. }
    364. if(buf=strstr(U1_RX_data, "114.116.6.187:40000"))
    365. {
    366. if(buf=strstr(U1_RX_data, "+IPD"))
    367. {
    368. for(i=0;i<512;i++)
    369. {
    370. if(buf[i]==0x0d)
    371. {
    372. if(i==5)UART5_T_Write_Ring((buf+7),(buf[4]-0x30));//1×Ö½Ú
    373. if(i==6)UART5_T_Write_Ring((buf+8),(((buf[4]-0x30)*10)+(buf[5]-0x30)));//2×Ö½Ú
    374. if(i==7)UART5_T_Write_Ring((buf+9),(((buf[4]-0x30)*100)+((buf[5]-0x30)*10)+(buf[6]-0x30)));//3×Ö½Ú
    375. if(i==8)UART5_T_Write_Ring((buf+10),(((buf[4]-0x30)*1000)+((buf[5]-0x30)*100)+((buf[6]-0x30)*10)+(buf[7]-0x30)));//4×Ö½Ú
    376. break;
    377. }
    378. }
    379. }
    380. }
    381. }
    382. else
    383. {
    384. LTE_Write_Ring(U1_RX_data,U1_Rx_Counter);
    385. }
    386. DMA1_Channel5->CNDTR = 512;
    387. DMA_Cmd(DMA1_Channel5,ENABLE);
    388. }
    389. }
    390. void U1_SendString(char *buf1)
    391. {
    392. unsigned int i;
    393. unsigned int len;
    394. len=strlen(buf1);
    395. for(i=0;i
    396. {
    397. while(USART_GetFlagStatus(USART1,USART_FLAG_TC)== RESET);
    398. USART_SendData(USART1,buf1[i]);
    399. }
    400. }
    401. void USART1_Send(char *buf,unsigned int len)
    402. {
    403. unsigned int i;
    404. for(i=0;i
    405. {
    406. while(USART_GetFlagStatus(USART1,USART_FLAG_TC)== RESET);
    407. USART_SendData(USART1,buf[i]);
    408. }
    409. }
    410. void LED1_OPEN(void)
    411. {
    412. GPIO_WriteBit(GPIOE, GPIO_Pin_13, Bit_SET);
    413. }
    414. void LED1_CLOSE(void)
    415. {
    416. GPIO_WriteBit(GPIOE, GPIO_Pin_13, Bit_RESET);
    417. }
    418. void LTE_ATTR(int time1,int time2,int time3,char * buf1,char * buf2,char * buf3,char * buf4,char * buf5,char * buf6,char r ,char w)
    419. {
    420. unsigned int len;
    421. switch(LTE_AT_state)
    422. {
    423. case state_idle:
    424. if(LTE_Delay_Timer>time1)
    425. {
    426. LTE_Delay_Timer=0;
    427. LTE_Timeslimite++;
    428. len=strlen(buf1);
    429. USART1_Send(buf1,len);
    430. LTE_AT_state=state_run;
    431. }
    432. break;
    433. case state_run:
    434. LED1_OPEN();
    435. LTE_Delay_Timer=0;
    436. if(LTE_Read_Ring(LTE_DATA_buf)>0)
    437. {
    438. if((strstr(LTE_DATA_buf, buf2))&&(strlen(buf2))) //×Ö·û´®±È½Ï²»ÄÜÓÐ00£¬¹Ø±Õ»ØÏÔ±ÜÃâÊý¾ÝÖеÄ00Ó°Ïì±È½Ï
    439. {
    440. LTE_AT_state=state_right;
    441. }
    442. else if((strstr(LTE_DATA_buf, buf3))&&(strlen(buf3)))
    443. {
    444. LTE_AT_state=state_right;
    445. }
    446. else if((strstr(LTE_DATA_buf, buf4))&&(strlen(buf4)))
    447. {
    448. LTE_AT_state=state_wrong;
    449. }
    450. else if((strstr(LTE_DATA_buf, buf5))&&(strlen(buf5)))
    451. {
    452. LTE_AT_state=state_wrong;
    453. }
    454. else if((strstr(LTE_DATA_buf, buf6))&&(strlen(buf6)))
    455. {
    456. LTE_AT_state=state_wrong;
    457. }
    458. }
    459. if(LTE_Timeslimite>time2)
    460. {
    461. LTE_AT_state=state_wrong;
    462. }
    463. if(LTE_overtime>time3)
    464. {
    465. LTE_AT_state=state_wrong;
    466. }
    467. break;
    468. case state_right:
    469. LTE_state=r;
    470. LTE_AT_state=state_idle;
    471. LTE_Delay_Timer=0;
    472. LTE_overtime=0;
    473. LTE_Timeslimite=0;
    474. LED1_CLOSE();
    475. memset(LTE_DATA_buf,0,512);
    476. break;
    477. case state_wrong:
    478. LTE_state=w;
    479. LTE_AT_state=state_idle;
    480. LTE_Delay_Timer=0;
    481. LTE_overtime=0;
    482. LTE_Timeslimite=0;
    483. LED1_CLOSE();
    484. memset(LTE_DATA_buf,0,512);
    485. break;
    486. default:
    487. break;
    488. }
    489. }
    490. void LTE_DATATR(int time1,int time2,int time3,char * buf1,int len,char * buf2,char * buf3,char * buf4,char * buf5,char * buf6,char r ,char w)
    491. {
    492. switch(LTE_AT_state)
    493. {
    494. case state_idle:
    495. if(LTE_Delay_Timer>time1)
    496. {
    497. LTE_Delay_Timer=0;
    498. LTE_Timeslimite++;
    499. USART1_Send(buf1,len);
    500. LTE_AT_state=state_run;
    501. }
    502. break;
    503. case state_run:
    504. LED1_OPEN();
    505. LTE_Delay_Timer=0;
    506. if(LTE_Read_Ring(LTE_DATA_buf)>0)
    507. {
    508. if((strstr(LTE_DATA_buf, buf2))&&(strlen(buf2))) //×Ö·û´®±È½Ï²»ÄÜÓÐ00£¬¹Ø±Õ»ØÏÔ±ÜÃâÊý¾ÝÖеÄ00Ó°Ïì±È½Ï
    509. {
    510. LTE_AT_state=state_right;
    511. }
    512. else if((strstr(LTE_DATA_buf, buf3))&&(strlen(buf3)))
    513. {
    514. LTE_AT_state=state_right;
    515. }
    516. else if((strstr(LTE_DATA_buf, buf4))&&(strlen(buf4)))
    517. {
    518. LTE_AT_state=state_wrong;
    519. }
    520. else if((strstr(LTE_DATA_buf, buf5))&&(strlen(buf5)))
    521. {
    522. LTE_AT_state=state_wrong;
    523. }
    524. else if((strstr(LTE_DATA_buf, buf6))&&(strlen(buf6)))
    525. {
    526. LTE_AT_state=state_wrong;
    527. }
    528. }
    529. if(LTE_Timeslimite>time2)
    530. {
    531. LTE_AT_state=state_wrong;
    532. }
    533. if(LTE_overtime>time3)
    534. {
    535. LTE_AT_state=state_wrong;
    536. }
    537. break;
    538. case state_right:
    539. LTE_state=r;
    540. LTE_AT_state=state_idle;
    541. LTE_Delay_Timer=0;
    542. LTE_overtime=0;
    543. LTE_Timeslimite=0;
    544. LED1_CLOSE();
    545. memset(LTE_DATA_buf,0,512);
    546. break;
    547. case state_wrong:
    548. LTE_state=w;
    549. LTE_AT_state=state_idle;
    550. LTE_Delay_Timer=0;
    551. LTE_overtime=0;
    552. LTE_Timeslimite=0;
    553. LED1_CLOSE();
    554. memset(LTE_DATA_buf,0,512);
    555. break;
    556. default:
    557. break;
    558. }
    559. }
    560. void LTE_POWER(void)
    561. {
    562. int i,j;
    563. GPIO_WriteBit(GPIOE, GPIO_Pin_1, Bit_SET);
    564. for(i=0;i<1000;i++)for(j=0;j<1000;j++);
    565. GPIO_WriteBit(GPIOE, GPIO_Pin_1, Bit_RESET);
    566. for(i=0;i<1000;i++)for(j=0;j<1000;j++);
    567. }
    568. void LTE_KEY(void)
    569. {
    570. int i,j;
    571. GPIO_WriteBit(GPIOE, GPIO_Pin_3, Bit_RESET);
    572. for(i=0;i<1000;i++)for(j=0;j<1000;j++);
    573. GPIO_WriteBit(GPIOE, GPIO_Pin_3, Bit_SET);
    574. for(i=0;i<1000;i++)for(j=0;j<1000;j++);
    575. }
    576. void LTE_RST(void)
    577. {
    578. int i,j;
    579. GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_RESET);
    580. for(i=0;i<1000;i++)for(j=0;j<1000;j++);
    581. GPIO_WriteBit(GPIOB, GPIO_Pin_1, Bit_SET);
    582. for(i=0;i<1000;i++)for(j=0;j<1000;j++);
    583. }
    584. /*********************************************END OF FILE**********************/

    .h文件

    1. #ifndef __BSP_UART1_H
    2. #define __BSP_UART1_H
    3. void UART1_Config(void);
    4. void LTE_Ring_Init(void);
    5. unsigned char LTE_Write_Ring(char *data,unsigned int len);
    6. unsigned char LTE_Read_Ring(char *Data);
    7. void LTE1_T_Ring_Init(void);
    8. unsigned char LTE1_T_Write_Ring(char *data,unsigned int len);
    9. unsigned char LTE1_T_Read_Ring(char *Data);
    10. void LTE2_T_Ring_Init(void);
    11. unsigned char LTE2_T_Write_Ring(char *data,unsigned int len);
    12. unsigned char LTE2_T_Read_Ring(char *Data);
    13. void LTE3_T_Ring_Init(void);
    14. unsigned char LTE3_T_Write_Ring(char *data,unsigned int len);
    15. unsigned char LTE3_T_Read_Ring(char *Data);
    16. void U1_SendString(char *buf1);
    17. void USART1_Send(char *buf,unsigned int len);
    18. void LED1_OPEN(void);
    19. void LED1_CLOSE(void);
    20. void LTE_ATTR(int time1,int time2,int time3,char * buf1,char * buf2,char * buf3,char * buf4,char * buf5,char * buf6,char r ,char w);
    21. void LTE_DATATR(int time1,int time2,int time3,char * buf1,int len,char * buf2,char * buf3,char * buf4,char * buf5,char * buf6,char r ,char w);
    22. void LTE_POWER(void);
    23. void LTE_KEY(void);
    24. void LTE_RST(void);
    25. #endif /* __BSP_UART1_H */

  • 相关阅读:
    java-php-python-ssm学生宿舍管理系统计算机毕业设计
    一体式城市内涝监测站
    湖南中创教育提示你积极维权,保护自身利益
    复盘Linux期末考试【已凉凉】
    Web3 新手攻略:9 个不可或缺的 APP 助力你踏入加密领域
    AD20~PCB板图的后续制作
    爬虫基本原理介绍、实现以及问题解决
    JVM学习笔记
    突破编程_C++_面试(模板编程(3))
    SpringMVC - 详解RESTful
  • 原文地址:https://blog.csdn.net/gd1984812/article/details/132570204