日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之03【EC20模组基础串口指令说明】

發布時間:2023/12/14 编程问答 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之03【EC20模组基础串口指令说明】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

QUECTEL上海移遠4G通訊CAT4模組EC20CEFAG模塊串口調試指南之03【EC20模組基礎串口指令說明】

  • 一、準備工作
  • 二、硬件環境的搭建
  • 三、基礎AT指令的說明和測試
  • STM32F103學習筆記(6)——4G模塊EC200S使用
    • TCP/IP AT命令撥號流程
    • 移植文件
    • 使用方法

原文鏈接:https://blog.csdn.net/praguejing/article/details/115794525

本系列博文將系統性講解物聯網模組系列的實際使用和調試指南,以移遠4G模組EC20為例(其他廠家模組的調試方法大同小異),加快嵌入式軟、硬件工程師對物聯網模組調試和使用的上手速度。

一、準備工作

1、軟件:串口調試助手(推薦官方的QCOM,可以講命令保存為腳本,方便后續多次的調用)

2、硬件:EC20硬件套件、USB轉串口線

3、文檔:《Quectel_EC20_R2.1_AT_Commands_Manual》

二、硬件環境的搭建

1、模組正常開機,如果硬件有STATUS電路,STATUS電路的LED指示燈會常亮,指示模組開機成功,同樣也可以使用萬用表測量模組VDD_EXT引腳有穩定1.8V電壓;

2、USB轉串口線連接到電腦USB,另外一端連接到EC20硬件的主串口部分(再次注意串口電平的匹配問題);

3、打開官方的串口調試助手QCOM,根據自己的電腦不同,串口號會有不同,可以在電腦的設備管理器中觀察USB轉串口線插入電腦的前后,設備管理器中端口下面COM口的變化判斷自己的COM號;

三、基礎AT指令的說明和測試

1、打開官方的AT指令手冊《Quectel_EC20_R2.1_AT_Commands_Manual》,因為EC20模組的功能十分強大,下面將以個人認為需要熟練掌握的AT命令做重點介紹,打開手冊中第二章的AT指令如下所示,紅色框框中個人認為是比較重要的部分:

當我們連接好EC20的硬件環境并且模塊開機,我們首先會以AT這個指令為首要指令,判斷模組是否能夠正常響應命令,如果能夠正常響應說明模塊的串口通訊正常,可以進一步的調試工作;

需要特別注意:當PWRKEY引腳拉低進行開機時,注意手冊中給出的串口有效時間(大于等于12s之后);在模塊的串口沒有初始化完成前發送AT指令模塊是不響應的。

AT指令發送示例如下:

①:左下部分紅色框框中的Show Time請選擇性勾選;右上角紅色框框中的白色框必須勾選,因為AT指令是以結尾,如果不勾選,模組會認為沒有收到回車的字符判斷命令還沒有發送完畢,造成命令發送失敗。

②:棕色框框中的部分是發送了什么命令?模組返回OK的指令?大家可以先猜測一下

答案:首先發送了AT,而后又發送了ATE

問題是模組出廠時沒有打開回顯功能,所以造成了不清楚發送了什么命令給模組;當調試較少的指令時還可以記住當下都發送了哪些指令,但是當調試的邏輯越來越復雜,AT指令越來越多,發送的指令根本記不住,所以回顯的打開很重要。詳細解釋下:第一條指令是發送的AT,用來判斷模組的通訊是否正常,如上圖所示模組返回OK;此時發現模組雖然返回了OK,但是模組的回顯功能并沒有打開,所以發送了打開回顯的AT指令ATE,模組返回OK,提示回顯打開成功。所以在下面藍色框框中的所有AT指令都有回顯,打開回顯后的調試閱讀質量瞬間爆棚有木有。

③:ATI指令:此指令可以返回模組的生產廠家,模組的型號和模組的內核固件版本;之所以重要是因為有時候我們需要知道當前模組的固件版本,特別是當模組出現一些未知的Bug,需要提交模組的log給模組的原廠進行協助分析問題的時候。總之一句話:能救命!

④:AT+CGSN:此命令是返回模組的IMEI,眾所周知IMEI號碼是全球唯一的號碼,可以作為設備的唯一識別碼,有很多的模塊應用廠家也都是這么做的,關于IMEI號碼的組成含義大家有興趣可以自行百度;至于是否重要就看你是否用到了設備唯一識別碼了。

⑤:AT+CFUN?:注意輸入命令的時候問號要在英文鍵盤下進行輸入,中文下的問號輸入后,發送命令給模組會造成模組返回ERROR的結果;此命令是確認模組當前所處的功能級別;不同的級別代表著不同的功能;注意發送此命令時模組必須返回+CFUN:1;否則需要手動設置寫命令AT+CFUN=1,模組返回OK后再次進行查詢確認CFUN是否為1。

下面以AT+CFUN指令為例詳細說明AT指令的操作含義:

從上圖可以看出AT指令大概分為三種命令狀態:其一為測試命令,返回的結果為該命令都支持哪些參數設置,各個參數的含義在文檔中會進行明確的解釋和說明;其二是讀命令,返回結果為當前模組所處的狀態;其三為寫命令,設置參數給模組,使模組達到自己預期的狀態,返回結果可以判斷命令設置是否成功。

關于AT+CMEE=1命令: 此命令是操作模組遇到ERROR時,返回錯誤的代號;例如上圖中+CME ERROR:;模組默認是僅僅返回ERROR,設置為 AT+CMEE=1 后可以根據模組返回的err代碼進行輔助判斷問題大致出現在什么地方;此命令在后面章節會有更加詳細的說明。

以上就是針對移遠4G通訊CAT4模組EC20關于基礎串口指令的操作的介紹,希望大家能夠對模組AT命令調試方面有一些更加深刻的認識,下一節會針對模組的串口調試的駐網部分做詳細介紹,請拭目以待。

STM32F103學習筆記(6)——4G模塊EC200S使用

https://blog.csdn.net/qq_36347513/article/details/108853788?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164465013816780271933309%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164465013816780271933309&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-108853788.pc_search_result_positive&utm_term=ec200+stm32&spm=1018.2226.3001.4187

TCP/IP AT命令撥號流程

移植文件

board_ec200s.c

/********************************************************************** INCLUDES*/ #include "stdlib.h" #include "string.h" #include "stm32f10x.h" #include "FreeRTOS.h" #include "task.h" #include "board_usart.h" #include "board_ec200s.h" uint8_t sendCmd(char *pCmd, char *pRes, uint32_t timeOut, uint8_t sendNum); void clearBuffer(void); void reset(void);/********************************************************************** GLOBAL VARIABLES*/ uint8_t g_usart2RecvFinish = 0; // 串口2接收標志串口接收完成標志 char g_ec200sBuf[1024] = {0}; // 接收緩存 uint32_t g_ec200sCnt = 0; // 接收計數 /********************************************************************** LOCAL VARIABLES*/ static uint8_t s_isSendFail = 0; /********************************************************************** PUBLIC FUNCTIONS*/ /**@brief 初始化@param 無@return 1 - 成功;0 - 失敗 */ uint8_t EC200S_Init(void) { printf("EC200S_Init\r\n");uint8_t result = 0;uint8_t step = 0;switch(step){case 0:if(sendCmd("AT\r\n","OK", 10, 5)) // 測試AT指令功能是否正常{step++;}else{printf("Err:AT\r\n");reset();break;} case 1:if(sendCmd("AT+CPIN?\r\n","+CPIN: READY", 20, 2)) // 查詢SIM卡是否正常,返回ready則表示SIM卡正常{step++;}else{printf("Err:AT+CPIN?\r\n"); // 20秒內,無法識別SIM狀態,重啟模塊reset();break;}case 2:if(sendCmd("AT+CREG?\r\n","+CREG: 0,1", 90, 2)) // 查詢模組是否注冊上GSM網絡{step++; }else{printf("Err:AT+CREG?\r\n"); // 90秒內,沒有注冊上CS業務,重啟模塊 reset();break;}case 3:if(sendCmd("AT+CGREG?\r\n","+CGREG: 0,1", 60, 2)) // 查詢模組是否注冊上GPRS網絡{step++; }else{printf("Err:AT+CGREG?\r\n"); // 60秒內,沒有注冊上PS業務reset(); break;}case 4:if(sendCmd("AT+QICSGP=1,1,\"CMNET\",\"\",\"\",1\r\n", "OK", 40, 3)) // 查詢模組是否注冊上GPRS網絡{result = EC200S_NetConfig(); }else{printf("Err:AT+QICSGP=1,1\r\n"); // 如果3次都沒停止成功或超過40秒沒有回應,則重啟模塊reset();break;}}return result; }/**@brief 網絡配置@param 無@return 無 */ void EC200S_GpioConfig(void) {GPIO_InitTypeDef gpioInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 使能GPIOgpioInitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_1; // 選擇要初始化的GPIOB引腳PB1,PB8gpioInitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 設置引腳工作模式為通用推挽輸出 gpioInitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 設置引腳輸出最大速率為50MHzGPIO_Init(GPIOB, &gpioInitStructure); }/**@brief 網絡配置@param 無@return 1 - 成功;0 - 失敗 */ uint8_t EC200S_NetConfig(void) { uint8_t result = 0;if(sendCmd("AT+QIDEACT=1\r\n", "OK", 40, 1)) // 在激活GPRS場景之前先關閉GPRS場景,確保連接正確{if(sendCmd("AT+QIACT=1\r\n", "OK", 150, 1)) // 激活移動場景{EC200S_Connect();} else // 等待150秒后,沒有響應重啟模塊{printf("Err:AT+QIACT=1\r\n"); // 重啟模塊reset();}} else // 等待40秒后,沒有響應重啟模塊{printf("Err:AT+QIDEACT=1\r\n"); // 重啟模塊reset();} }/**@brief 連接TCP服務器@param 無@return 無 */ void EC200S_Connect(void) {if(sendCmd("AT+QIOPEN=1,0,\"TCP\",\"180.97.81.180\",53540,0,1\r\n", "+QIOPEN:", 150, 5)) {printf("Connect Success\r\n");} else{printf("Err:AT+QIOPEN=1,0\r\n");} }/**@brief 發送數據到TCP服務器@param pString -[in] 發送數據@return 無 */ void EC200S_Send(char *pString) {if(!s_isSendFail){if(sendCmd("AT+QISEND=0\r\n", ">", 60, 1)) {if(sendCmd("AT+QISEND=0,0\r\n", "OK", 5, 24)) // 2分鐘后(每5秒查詢一次,共24次){/* 發送數據成功,對方收到數據 */}else{printf("Err:AT+QISEND=0\r\n"); s_isSendFail = 1;if(sendCmd("AT+QICLOSE=0\r\n", "OK", 10, 1)) // TCP連接出現異常,關閉TCP連接{printf("AT+QICLOSE\r\n");EC200S_Connect();}else{reset(); // 等待10秒,沒有響應重啟模塊} }}else{reset(); // 等待60秒,沒有響應重啟模塊}}else{reset(); // 等待60秒,沒有響應重啟模塊 } }/**@brief 從TCP服務器接收數據@param pRecvDataBuf -[out] 接收數據@return 接收數據長度 */ uint32_t EC200S_Receive(char *pRecvDataBuf) {uint32_t recvDataLen = 0;if(g_isUsart2RecvFinish) // 如果串口接收完成{if(strstr((const char *)g_ec200sBuf, "+QIURC: \"recv\",0,") != NULL) // 如果檢索到關鍵詞{memcpy(pRecvDataBuf, g_ec200sBuf, g_ec200sCnt);recvDataLen = g_ec200sCnt;}clearBuffer();} return recvDataLen; }/********************************************************************** LOCAL FUNCTIONS*/ /**@brief 發送AT命令@param pCmd -[in] 命令字符串@param pRes -[in] 需要檢測的返回命令字符串@param timeOut -[in] 等待時間@param sendNum -[in] 命令發送次數@return 1 - 成功;0 - 失敗 */ uint8_t sendCmd(char *pCmd, char *pRes, uint32_t timeOut, uint8_t sendNum) {uint8_t i = 0;uint32_t time;clearBuffer(); // 清空緩存 for(i = 0; i < sendNum; i++){time = timeOut * 10;USART_SendString(USART2, pCmd);while(time--){if(g_usart2RecvFinish) // 如果串口接收完成{if(strstr((const char *)g_ec200sBuf, pRes) != NULL) // 如果檢索到關鍵詞{printf("%s", g_ec200sBuf);return 1;}} vTaskDelay(100); // 等待100毫秒}clearBuffer();}return 0; }/**@brief 清空緩存@param 無@return 無 */ void clearBuffer(void) {memset(g_ec200sBuf, 0, sizeof(g_ec200sBuf));g_ec200sCnt = 0;g_usart2RecvFinish = 0; }/**@brief 重啟模塊@param 無@return 無 */ void reset(void) {printf("reset\n");g_isEc200sInit = 0;s_isSendFail = 0;GPIO_ResetBits(GPIOB, GPIO_Pin_8);vTaskDelay(2000);GPIO_SetBits(GPIOB, GPIO_Pin_8); }/****************************************************END OF FILE****************************************************/

board_ec200s.h

#ifndef _BOARD_EC200S_H_ #define _BOARD_EC200S_H_/********************************************************************** INCLUDES*/ #include "stm32f10x.h"/********************************************************************** GLOBAL VARIABLES*/ extern uint8_t g_usart2RecvFinish; // 串口2接收標志串口接收完成標志 extern char g_ec200sBuf[1024]; // 接收緩存 extern uint32_t g_ec200sCnt; // 接收計數/********************************************************************** API FUNCTIONS*/ uint8_t EC200S_Init(void); void EC200S_GpioConfig(void); uint8_t EC200S_NetConfig(void); void EC200S_Connect(void); void EC200S_Send(char *pString); uint32_t EC200S_Receive(char *pRecvDataBuf);#endif /* _BOARD_EC200S_H_ */

使用方法

char recvDataBuf[MAX_RECV_BUF_SIZE] = {0}; vTaskDelay(3000); EC200S_Init(); while(1) // 任務都是一個無限循環,不能返回 {EC200S_Send("TES");vTaskDelay(10000); char recvDataBuf[256] = {0};int recvDataLen = EC200S_Receive(recvDataBuf); } /**@brief 串口2收發中斷@param 無@return 無 */ void USART2_IRQHandler(void) {if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) // 接收中斷{g_usart2RecvFinish = 1; // 串口2接收標志if(g_ec200sCnt >= sizeof(g_ec200sBuf)){g_ec200sCnt = 0; // 防止串口被刷爆}g_ec200sBuf[g_ec200sCnt++] = USART2->DR;USART_ClearFlag(USART2, USART_FLAG_RXNE);} }

總結

以上是生活随笔為你收集整理的QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之03【EC20模组基础串口指令说明】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。