ml307a.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include "ml307a.h"
  2. #include "mba32a.h"
  3. uint8_t u4length=0;
  4. uint8_t resetcount_4g=0;
  5. bool u4RecvFlag = false;
  6. bool ml307aFail = false;
  7. uint8_t g_ML307A_8buf[2048]={0};
  8. uint8_t g_ML307A_8buf_Down[2048]={0};
  9. bool reset4Gmodule = false;
  10. extern UART_HandleTypeDef huart3;
  11. extern UART_HandleTypeDef huart4;
  12. uint8_t sendCmd_4G(char *pCmd, char *pRes, uint32_t timeOut, uint8_t sendNum);
  13. void ML307A_Init(void)
  14. {
  15. //HAL_Delay(2000);
  16. INIT_4G_FRAME();
  17. if(!sendCmd_4G("AT\r\n","OK",1,1))
  18. {
  19. ml307aFail=true;
  20. printf("4G模组异常!\r\n");
  21. }
  22. if (ml307aFail)
  23. {
  24. printf("#4G模块初始化Fail");
  25. }
  26. else
  27. {
  28. //HAL_Delay(2000);
  29. if (sendCmd_4G("AT+CPIN?\r\n", "+CME ERROR: 10", 1, 1)) // 00检测是否有SIM卡 <+CPIN: READY\r\nOK>
  30. {
  31. printf("\tERROR!-->未检测到SIM卡\r\n");
  32. OLED_ShowString(42,50,(unsigned char*)"NO_SIM",12,0);
  33. }
  34. }
  35. }
  36. uint8_t sendCmd_4G(char *pCmd, char *pRes, uint32_t timeOut, uint8_t sendNum)
  37. {
  38. uint8_t i = 0;
  39. uint32_t time;
  40. for(i = 0; i < sendNum; i++)
  41. {
  42. time = timeOut * 10;
  43. USART_SendString(&huart4, pCmd);
  44. HAL_Delay(50);
  45. printf("------->%s",g_ML307A_8buf_Down);
  46. while(time--)
  47. {
  48. if(strstr((const char *)g_ML307A_8buf_Down, pRes) != NULL) // 如果检索到关键词
  49. {
  50. return 1;
  51. }
  52. HAL_Delay(100);
  53. }
  54. }
  55. return 0;
  56. }
  57. /**
  58. @brief 重启模块
  59. @param 无
  60. @return 无
  61. */
  62. void ML307AReset(void)
  63. {
  64. reset4Gmodule=true;
  65. resetcount_4g+=1;
  66. printf("4G Module_Reset\n");
  67. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
  68. HAL_Delay(5000);
  69. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
  70. }