|
M26模組的應(yīng)用例子,包括接聽語音呼叫、模塊撥號測試、GSM錄音、使用 TEXT 模式發(fā)送短信、使用 PDU 模式發(fā)送短信、藍(lán)牙傳輸測試
、TCP連接測試、UDP透傳測試、模塊基站定位
EasyM26每一個(gè)功能實(shí)驗(yàn)對應(yīng)一個(gè)函數(shù)實(shí)現(xiàn),
當(dāng)要驗(yàn)證某一功能時(shí), 只需要將主函數(shù) while
循環(huán)下該函數(shù)前注釋刪掉.
單片機(jī)源程序如下:
- /**
- * @file main.c
- * @author dibo
- * @version 1.0
- * @data 2018-3-18
- * @brief
- * COPYRIGHT(c) 2018 ZERO CHIP
- */
- #include "main.h"
- #include "stm32f1xx_hal.h"
- #include "clk.h"
- #include "led.h"
- #include "uart2.h"
- #include "m26.h"
- int main(void)
- {
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
- /* Configure the system clock */
- SystemClock_Config();
- /* Initialize all configured peripherals */
- led_init();
- MX_USART2_UART_Init();
- open_uart2_rx();
-
- while (1)
- {
- // m26_ring_test(); /* 實(shí)驗(yàn)1 GSM接電話 */
- // m26_call_test(); /* 實(shí)驗(yàn)2 GSM打電話 */
- // m26_gsm_record(); /* 實(shí)驗(yàn)3 GSM錄音 */
- // m26_sms_text(); /* 實(shí)驗(yàn)4 發(fā)短信(TEXT模式) */
- // m26_sms_pdu(); /* 實(shí)驗(yàn)5 發(fā)短信(PDU模式) */
- // m26_bt_master(); /* 實(shí)驗(yàn)6 藍(lán)牙主機(jī)模式 */
- // m26_bt_slave(); /* 實(shí)驗(yàn)7 藍(lán)牙從機(jī)模式 */
- // m26_tcp_test(); /* 實(shí)驗(yàn)8 TCP透傳 */
- // m26_udp_test(); /* 實(shí)驗(yàn)9 UDP透傳 */
- // m26_locator_test(); /* 實(shí)驗(yàn)10 LBS基站定位 */
- }
- }
- void Error_Handler(void)
- {
- }
- /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
復(fù)制代碼- /**
- * @file m26.c
- * @author dibo
- * @version 1.0
- * @data 2018-3-18
- * @brief
- * COPYRIGHT(c) 2018 ZERO CHIP
- */
- #include "m26.h"
- #include "uart2.h"
- #include <string.h>
- uint8_t M26_State = 0;
- /*-------------------------------------------------------------------*/
- /* 內(nèi)部函數(shù)原型 -----------------------------------------------------*/
- void m26_poweron(void);
- uint8_t m26_send_cmd(char *cmd, char *ack, uint16_t waittime);
- char* m26_check_cmd(char *str);
- /*-------------------------------------------------------------------*/
- /*-------------------------------------------------------------------*/
- /**
- * @brief M26 模塊撥號測試
- */
- void m26_call_test(void)
- {
- switch(M26_State)
- {
- case 0:
- m26_poweron();
- M26_State++;
- break;
- case 1:
- /* 啟用命令回顯 */
- m26_send_cmd("ATE1\r\n", "OK", 200);
- /* 確保模塊工作正常 */
- m26_send_cmd("AT+CPIN?\r\n", "OK", 200); /* 查詢SIM卡狀態(tài) */
- m26_send_cmd("AT+CSQ\r\n", "OK", 200); /* 信號質(zhì)量 */
- m26_send_cmd("AT+CREG?\r\n", "OK", 200); /* 網(wǎng)絡(luò)注冊信息 */
- m26_send_cmd("AT+CGREG?\r\n", "OK", 200); /* GPRS網(wǎng)絡(luò)注冊狀態(tài) */
- /* 顯示被叫識別 */
- m26_send_cmd("AT+COLP=1\r\n", "OK", 200);
- /* 切換音頻通道為耳機(jī)通道 */
- m26_send_cmd("AT+QAUDCH=1\r\n", "OK", 200);
-
- /* 建立語音呼叫, 撥打 10086 */
- m26_send_cmd("ATD10086;\r\n", "OK", 200);
-
- M26_State++;
- break;
- case 2:
- HAL_Delay(10000);
- M26_State++;
- break;
- case 3:
- m26_send_cmd("ATH\r\n", "OK", 200);
- M26_State++;
- break;
- default:
- break;
- }
- }
- /**
- * @brief 接聽語音呼叫
- */
- void m26_ring_test(void)
- {
- switch(M26_State)
- {
- case 0:
- m26_poweron();
- M26_State++;
- break;
- case 1:
- /* 切換音頻通道為耳機(jī)通道 */
- m26_send_cmd("AT+QAUDCH=1\r\n", "OK", 200);
-
- USART2RxSta = 0;
-
- M26_State++;
- break;
- case 2:
- /* 接收到一次數(shù)據(jù) */
- if (USART2RxSta & 0x8000)
- {
- /* 添加結(jié)束符 */
- USART2RxBuf[USART2RxSta & 0x7FFF] = 0;
-
- if ( strstr((const char*)USART2RxBuf, (const char*)"RING") )
- {
- M26_State++;
- }
-
- USART2RxSta = 0;
- }
-
- break;
- case 3:
- /* 接聽語音呼叫 */
- m26_send_cmd("ATA\r\n", "OK", 200);
-
- M26_State++;
- break;
- default:
- break;
- }
- }
- /**
- * @brief M26 GSM錄音
- */
- void m26_gsm_record(void)
- {
- switch(M26_State)
- {
- case 0:
- m26_poweron();
- M26_State++;
- break;
- case 1:
- /* 啟用命令回顯 */
- m26_send_cmd("ATE1\r\n", "OK", 200);
- /* 切換音頻通道為耳機(jī)通道 */
- m26_send_cmd("AT+QAUDCH=1\r\n", "OK", 200);
- /* 建立語音呼叫, 撥打 10086 */
- m26_send_cmd("ATD10086;\r\n", "OK", 200);
-
- /* 開始錄音 */
- m26_send_cmd("AT+QAUDCH=1,\"test.amr\"\r\n", "OK", 200);
-
- M26_State++;
- break;
- case 2:
- HAL_Delay(10000);
- M26_State++;
- break;
- case 3:
- /* 停止錄音 */
- m26_send_cmd("AT+QAUDRD=0\r\n", "OK", 200);
- M26_State++;
- break;
- case 4:
- /* 播放錄音 */
- m26_send_cmd("AT+QAUDPLAY=\"test.amr\",0,60\r\n", "OK", 200);
-
- HAL_Delay(10000);
-
- /* 停止錄音 */
- m26_send_cmd("AT+QAUDSTOP\r\n", "OK", 200);
- M26_State++;
- default:
- break;
- }
- }
- /**
- * @brief 使用 TEXT 模式發(fā)送短信
- */
- void m26_sms_text(void)
- {
- switch(M26_State)
- {
- case 0:
- m26_poweron();
- M26_State++;
- break;
- case 1:
- m26_send_cmd("AT+CMGF=1\r\n", "OK", 200);
- m26_send_cmd("AT+CSCS=\"GSM\"\r\n", "OK", 200);
- m26_send_cmd("AT+CMGS=\"10086\"\r\n", ">", 200);
- m26_send_cmd("1\r\n", "OK", 200);
-
- M26_State++;
- break;
- case 2:
- break;
- default:
- break;
- }
- }
- /**
- * @brief 使用 PDU 模式發(fā)送短信
- */
- void m26_sms_pdu(void)
- {
- switch(M26_State)
- {
- case 0:
- m26_poweron();
- M26_State++;
- break;
- case 1:
- m26_send_cmd("AT+CSCS=\"GSM\"\r\n", "OK", 200);
- m26_send_cmd("AT+CMGF=0\r\n", "OK", 200);
- m26_send_cmd("AT+CSCS=\"UCS2\"\r\n", "OK", 200);
- m26_send_cmd("AT+CMGS=39\r\n", ">", 200);
- m26_send_cmd("0891683108501705F011000D91688152613201F800080018\
- 670968A660F376844EBAFF0C547D90FD662F82E67684FF01\r\n", "OK", 200);
-
- M26_State++;
- break;
- case 2:
- break;
- default:
- break;
- }
- }
- /**
- * @brief M26 藍(lán)牙主機(jī)模式
- */
- void m26_bt_master(void)
- {
- switch(M26_State)
- {
- case 0:
- m26_poweron();
- M26_State++;
- break;
- case 1:
- m26_send_cmd("AT+QBTPWR=1\r\n", "OK", 200); /* 打開藍(lán)牙模塊 */
- m26_send_cmd("AT+QBTUNPAIR=1\r\n", "OK", 200); /* 刪除已配對藍(lán)牙設(shè)備 */
- m26_send_cmd("AT+QBTSCAN\r\n", "OK", 1000); /* 掃描藍(lán)牙設(shè)備, 等待10s */
-
- M26_State++;
- break;
- case 2:
- if (USART2RxSta & 0x8000)
- {
- /* 添加結(jié)束符 */
- USART2RxBuf[USART2RxSta & 0x7FFF] = 0;
- if (strstr((char*)USART2RxBuf, (char*)"+QBTSCAN:0"))
- {
- M26_State++;
- }
-
- USART2RxSta = 0;
- }
- break;
- case 3:
- /* 配對, 藍(lán)牙設(shè)備列表第一個(gè)掃描到設(shè)備, 等待10s */
- m26_send_cmd("AT+QBTPAIR=1\r\n", "+QBTPAIR", 1000);
- /* 接受配對 */
- m26_send_cmd("AT+QBTPAIRCNF=1\r\n", "+QBTPAIRCNF", 200);
-
- USART2RxSta = 0; /* 清接收狀態(tài) */
-
- M26_State++;
- break;
- case 4:
- if (USART2RxSta & 0x8000)
- {
- /* 添加結(jié)束符 */
- USART2RxBuf[USART2RxSta & 0x7FFF] = 0;
- if (strstr((char*)USART2RxBuf, (char*)"+QBTPAIRCNF: 1,1,1"))
- {
- M26_State++;
- }
-
- USART2RxSta = 0;
- }
- break;
- case 5:
- /* 初始化連接, 以透傳方式 */
- m26_send_cmd("AT+QBTCONN=1,0,2\r\n", "+QBTCONN", 200);
- M26_State++;
- case 6:
- /* 發(fā)送數(shù)據(jù)到從機(jī)(這里以手機(jī)為例) */
- m26_send_cmd("EasyM26, BT 主機(jī)模式測試.\r\n", "+QBTCONN", 200);
- HAL_Delay(10000);
- break;
- default:
- break;
- }
- }
- /**
- * @brief M26 藍(lán)牙從機(jī)模式
- */
- void m26_bt_slave(void)
- {
- switch(M26_State)
- {
- case 0:
- m26_poweron();
- M26_State++;
- break;
- case 1:
- m26_send_cmd("AT+QBTPWR=1\r\n", "OK", 200); /* 打開藍(lán)牙模塊 */
- m26_send_cmd("AT+QBTVISB=1\r\n", "OK", 200); /* 設(shè)置 M26 藍(lán)牙可見 */
- m26_send_cmd("AT+QBTNAME=\"M26\"\r\n", "OK", 200); /* 藍(lán)牙名稱 */
-
- /* 清接收狀態(tài), 準(zhǔn)備接收配對 */
- USART2RxSta = 0;
-
- M26_State++;
- break;
- case 2:
- if (USART2RxSta & 0x8000)
- {
- /* 添加結(jié)束符 */
- USART2RxBuf[USART2RxSta & 0x7FFF] = 0;
-
- if (strstr((char*)USART2RxBuf, (char*)"+QBTIND: \"pair\""))
- {
- /* 接受配對 */
- m26_send_cmd("AT+QBTPAIRCNF=1\r\n", "OK", 200);
- }
- else if (strstr((char*)USART2RxBuf, (char*)"+QBTIND: \"conn\""))
- {
- /* 接受連接 */
- m26_send_cmd("AT+QBTACPT=1,2\r\n", "OK", 200);
-
- M26_State++;
- }
-
- USART2RxSta = 0;
- }
- break;
- case 3:
-
- break;
- default:
- break;
- }
- }
- /**
- * @brief M26 TCP連接測試
- */
- void m26_tcp_test(void)
- {
- switch(M26_State)
- {
- case 0:
- m26_poweron();
- M26_State++;
- break;
- case 1:
- m26_send_cmd("ATE0\r\n", "OK", 200); /* 關(guān)閉回顯 */
- /* 確保模塊工作正常 */
- m26_send_cmd("AT+CPIN?\r\n", "OK", 200); /* 查詢SIM卡狀態(tài) */
- m26_send_cmd("AT+CSQ\r\n", "OK", 200); /* 信號質(zhì)量 */
- m26_send_cmd("AT+CREG?\r\n", "OK", 200); /* 網(wǎng)絡(luò)注冊信息 */
- m26_send_cmd("AT+CGREG?\r\n", "OK", 200); /* GPRS網(wǎng)絡(luò)注冊狀態(tài) */
- /* TCP設(shè)置 */
- m26_send_cmd("AT+QIMODE=0\r\n", "OK", 200); /* 配置TCPIP應(yīng)用模式為非透傳模式 */
- m26_send_cmd("AT+QICSGP=1,\"FXTX.ZB.SD\"\r\n", "OK", 200); /* 設(shè)置接入點(diǎn),聯(lián)通移動(dòng)默認(rèn)CMNET. 由于測試使用的是專網(wǎng)卡,所以這里設(shè)置了專用接入點(diǎn) */
- m26_send_cmd("AT+QIREGAPP\r\n", "OK", 200);
- m26_send_cmd("AT+QICSGP?\r\n", "OK", 200);
- m26_send_cmd("AT+QIACT\r\n", "OK", 200);
- m26_send_cmd("AT+QILOCIP\r\n", "QILOCIP", 200); /* 獲取IP */
- /* 連接服務(wù)器 */
- m26_send_cmd("ATV1\r\n", "OK", 200);
- m26_send_cmd("AT+QIHEAD=1\r\n", "OK", 200);
- m26_send_cmd("AT+QIDNSIP=1\r\n", "OK", 200);
- m26_send_cmd("AT+QIOPEN=\"TCP\",\"zerochip.in.3322.org\",\"7425\"\r\n", "OK", 200);
- /* 發(fā)送數(shù)據(jù)到遠(yuǎn)端服務(wù)器 */
- m26_send_cmd("AT+QISEND=18\r\n", ">", 200);
- m26_send_cmd("zerochip easy m26.", "SEND OK", 200);
- /* 關(guān)閉連接 */
- m26_send_cmd("AT+QICLOSE\r\n", "CLOSE OK", 200);
-
- HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
-
- M26_State++;
- break;
- case 2:
- HAL_Delay(10000);
- M26_State++;
- break;
- case 3:
-
- // M26_State++;
- break;
- default:
- break;
- }
- }
- /**
- * @brief M26 UDP透傳測試
- */
- void m26_udp_test(void)
- {
- switch(M26_State)
- {
- case 0:
- m26_poweron();
- M26_State++;
- break;
- case 1:
- m26_send_cmd("ATE0\r\n", "OK", 200); /* 關(guān)閉回顯 */
- /* 確保模塊工作正常 */
- m26_send_cmd("AT+CPIN?\r\n", "OK", 200); /* 查詢SIM卡狀態(tài) */
- m26_send_cmd("AT+CSQ\r\n", "OK", 200); /* 信號質(zhì)量 */
- m26_send_cmd("AT+CREG?\r\n", "OK", 200); /* 網(wǎng)絡(luò)注冊信息 */
- m26_send_cmd("AT+CGREG?\r\n", "OK", 200); /* GPRS網(wǎng)絡(luò)注冊狀態(tài) */
- /* TCP設(shè)置 */
- m26_send_cmd("AT+QIMODE=0\r\n", "OK", 200); /* 配置TCPIP應(yīng)用模式為非透傳模式 */
- m26_send_cmd("AT+QICSGP=1,\"CMNET\"\r\n", "OK", 200); /* 設(shè)置接入點(diǎn),聯(lián)通移動(dòng)默認(rèn)CMNET */
- m26_send_cmd("AT+QIREGAPP\r\n", "OK", 200);
- m26_send_cmd("AT+QICSGP?\r\n", "OK", 200);
- m26_send_cmd("AT+QIACT\r\n", "OK", 200);
- m26_send_cmd("AT+QILOCIP\r\n", "QILOCIP", 200); /* 獲取IP */
- /* 連接服務(wù)器 */
- m26_send_cmd("ATV1\r\n", "OK", 200);
- m26_send_cmd("AT+QIHEAD=1\r\n", "OK", 200);
- m26_send_cmd("AT+QIDNSIP=1\r\n", "OK", 200);
- m26_send_cmd("AT+QIOPEN=\"UDP\",\"zerochip.in.3322.org\",\"7425\"\r\n", "OK", 200);
-
- /* 發(fā)送數(shù)據(jù)到遠(yuǎn)端服務(wù)器 */
- m26_send_cmd("AT+QISEND\r\n", ">", 200);
- m26_send_cmd("EasyM26 UDP test.", "SEND OK", 200);
- /* 關(guān)閉連接 */
- m26_send_cmd("AT+QICLOSE\r\n", "CLOSE OK", 200);
-
- HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
-
- M26_State++;
- break;
- case 2:
- HAL_Delay(10000);
- M26_State++;
- break;
- default:
- break;
- }
- }
- /**
- * @brief M26模塊基站定位
- */
- void m26_locator_test(void)
- {
- switch(M26_State)
- {
- case 0:
- m26_poweron();
- M26_State++;
- break;
- case 1:
- m26_send_cmd("ATE0\r\n", "OK", 200); /* 關(guān)閉回顯 */
- /* 確保模塊工作正常 */
- m26_send_cmd("AT+CPIN?\r\n", "OK", 200); /* 查詢SIM卡狀態(tài) */
- m26_send_cmd("AT+CSQ\r\n", "OK", 200); /* 信號質(zhì)量 */
- m26_send_cmd("AT+CREG?\r\n", "OK", 200); /* 網(wǎng)絡(luò)注冊信息 */
- m26_send_cmd("AT+CGREG?\r\n", "OK", 200); /* GPRS網(wǎng)絡(luò)注冊狀態(tài) */
- /* TCP設(shè)置 */
- m26_send_cmd("AT+QIMODE=0\r\n", "OK", 200); /* 配置TCPIP應(yīng)用模式為非透傳模式 */
- m26_send_cmd("AT+QIFGCNT=0\r\n", "OK", 200);
- m26_send_cmd("AT+QICSGP=1,\"FXTX.ZB.SD\"\r\n", "OK", 200); /* 設(shè)置接入點(diǎn),聯(lián)通移動(dòng)默認(rèn)CMNET. 由于測試使用的是專網(wǎng)卡,所以這里設(shè)置了專用接入點(diǎn) */
- m26_send_cmd("AT+QIREGAPP\r\n", "OK", 200);
- m26_send_cmd("AT+QICSGP?\r\n", "OK", 200);
- m26_send_cmd("AT+QIACT\r\n", "OK", 200);
- m26_send_cmd("AT+QILOCIP\r\n", "QILOCIP", 200); /* 獲取IP */
- /* 獲取位置 */
- m26_send_cmd("AT+QCELLLOC=1\r\n", "+QCELLLOC", 200);
-
- HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
-
- M26_State++;
- break;
- case 2:
- HAL_Delay(10000);
- M26_State++;
- break;
- case 3:
-
- // M26_State++;
- break;
- default:
- break;
- }
- }
- /*-------------------------------------------------------------------*/
- /* 內(nèi)部函數(shù)實(shí)現(xiàn) -----------------------------------------------------*/
- /**
- * @brief M26 模塊開機(jī)
- */
- void m26_poweron(void)
- {
- /* 手動(dòng)開機(jī) */
- // M26_ON_L();
- // M26_PWR_L();
- // HAL_Delay(5000);
- // M26_PWR_H();
- // HAL_Delay(1000);
- // M26_ON_H();
- // HAL_Delay(1000);
- // M26_ON_L();
- // HAL_Delay(5000);
-
- /* 上電等待模塊自啟動(dòng) */
- HAL_Delay(10000);
- }
- /**
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
GSM模組M26單片機(jī)DEMO例子(基于STM32單片機(jī)).7z
(1.13 MB, 下載次數(shù): 293)
2019-3-7 01:09 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|