ml307a.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #include "ml307a.h"
  2. /**
  3. * @breaf 本页定义
  4. */
  5. bool u4RecvFlag = false;
  6. bool reset4Gmodule = false;
  7. bool ml307aFail = false;
  8. bool module4G_init = false;
  9. uint8_t u4length = 0;
  10. uint8_t resetcount_4g=0;
  11. uint8_t g_ML307A_8buf[2048]={0};
  12. uint8_t g_ML307A_8buf_Down[2048]={0};
  13. /**
  14. * @breaf 本页方法
  15. */
  16. void ML307AReset(void); //4G模块重启
  17. uint8_t sendCmd_4G(char *pCmd, char *pRes, uint32_t timeOut, uint8_t sendNum);
  18. /**
  19. * @breaf 外部声明
  20. */
  21. extern UART_HandleTypeDef huart4;
  22. void ML307A_Init(void)
  23. {
  24. //4Gled 隔1s快闪搜网未注册,隔2s为成功注册上网络
  25. //<***> 单括号内为正常回复
  26. if(!module4G_init) //复位需同时变true
  27. return;
  28. INIT_4G_FRAME();
  29. if(!sendCmd_4G("AT\r\n","OK",1,1))
  30. {
  31. ml307aFail=true;
  32. printf("4G模组异常!\r\n");
  33. }
  34. if(sendCmd_4G("AT+CPIN?\r\n","+CME ERROR: 10",1,1)) //00检测是否有SIM卡 <+CPIN: READY\r\nOK>
  35. {
  36. printf("未检测到SIM卡\r\n");
  37. }
  38. else if(ml307aFail)
  39. {
  40. printf("#4G模块初始化Fail");
  41. }
  42. else if(!ml307aFail)
  43. {
  44. if(sendCmd_4G("AT+CSQ\r\n","ERROR",1,1)) //01查询信号值(信号强度,误码率) <+CSQ: 26,99\r\nOK>
  45. {printf("查询信号Fail\r\n");}
  46. if(sendCmd_4G("AT+CEREG?\r\n","ERROR",1,1)) //02查询附着成功(驻网:*,@ @为1或5表示附着成功) <+CEREG: 0,1\r\nOK>
  47. {printf("查询驻网Fail\r\n");}
  48. if(sendCmd_4G("AT+MIPCALL?\r\n","ERROR",1,1)) //03查询PDP激活状态 <+MIPCALL: 1,1,"10.94.99.162"\r\nOK>
  49. {printf("查询PDP激活状态Fail\r\n");}
  50. }
  51. //初始化后Todo
  52. module4G_init=false;
  53. }
  54. /**
  55. * @breaf 串口发送命令,有接收数组比较函数
  56. */
  57. uint8_t sendCmd_4G(char *pCmd, char *pRes, uint32_t timeOut, uint8_t sendNum)
  58. {
  59. uint8_t i = 0;
  60. uint32_t time;
  61. for(i = 0; i < sendNum; i++)
  62. {
  63. time = timeOut * 10;
  64. USART_SendString(&huart4, pCmd);
  65. HAL_Delay(50);
  66. printf("------->%s",g_ML307A_8buf_Down);
  67. while(time--)
  68. {
  69. if(strstr((const char *)g_ML307A_8buf_Down, pRes) != NULL) // 如果检索到关键词
  70. {
  71. memset(g_ML307A_8buf_Down,0,u4length);
  72. return 1;
  73. }
  74. HAL_Delay(100);
  75. }
  76. }
  77. return 0;
  78. }
  79. /**
  80. @brief 重启模块
  81. @param 无
  82. @return 无
  83. */
  84. void ML307AReset(void)
  85. {
  86. reset4Gmodule=true;
  87. resetcount_4g+=1;
  88. printf("4G Module_Reset\n");
  89. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
  90. HAL_Delay(5000);
  91. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
  92. }
  93. void Transfer4GBuff(void)
  94. {
  95. if(u4RecvFlag)
  96. {
  97. u4RecvFlag=false;
  98. memset(g_ML307A_8buf_Down,0,2048);
  99. memcpy(g_ML307A_8buf_Down,g_ML307A_8buf,u4length);
  100. }
  101. }