atk-lora-01無線串口模塊使用說明 阿波羅f429 _an1801d _W_第1頁(yè)
atk-lora-01無線串口模塊使用說明 阿波羅f429 _an1801d _W_第2頁(yè)
atk-lora-01無線串口模塊使用說明 阿波羅f429 _an1801d _W_第3頁(yè)
atk-lora-01無線串口模塊使用說明 阿波羅f429 _an1801d _W_第4頁(yè)
atk-lora-01無線串口模塊使用說明 阿波羅f429 _an1801d _W_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、AN1801D ATK-LORA-01 無線串口模塊 使用說明 本應(yīng)用文檔( AN1801D ) 將教大家如何在 ALIENTEK ATK-LORA-01 無線串口模塊。本文檔分為如下幾部分: 1, ATK-LORA-01 模塊簡(jiǎn)介 2, 硬件連接 3, 軟件實(shí)現(xiàn) 4, 驗(yàn)證 1、ATK-LORA-01 模塊簡(jiǎn)介 羅 F429 開發(fā)板上使用 ATK-LORA-01-V3.0(V3.0 是版本號(hào),下面均以 ATK-LORA-01 表示該產(chǎn)品)是 ALIENTEK 推出的一款體積小、微功率、低功耗、高性能遠(yuǎn)距離 LORA 無線串口模塊。模塊設(shè)計(jì)是采用高效的 ISM 頻段射頻 SX1278 擴(kuò)頻芯片

2、,模塊的工作頻率在 410Mhz441Mhz,以 1Mhz 頻率為步進(jìn)信道,共 32 個(gè)信道??赏ㄟ^ AT 指令在線修改串口速率,發(fā)射功率,空中速率,工作模式等各種參數(shù),并且支持固件升級(jí)功能。 ATK-LORA-01 模塊具有:體積小、靈敏度高、支持低功耗省電,特點(diǎn)包括: 1、工業(yè)頻段:433Mhz 免申請(qǐng)頻段 2、多種功率等級(jí)(最大 20dBm,最大 100mW) 3、多種串口波特率、空中速率、工作模式 4、支持空中喚醒功能,低接收功耗 5、雙 512 環(huán)形 FIFO6、頻率 410-441Mhz,提供 32 個(gè)信道 7、接收靈敏度達(dá)-136dBm,傳輸距離 3000 米 8、自動(dòng)分包傳輸,

3、保證數(shù)據(jù)包的完整性模塊電器參數(shù)如表 1.1 所示。 1項(xiàng)目 說明 模塊尺寸 36*20mm(不含 SMA 接頭和天線) 工作頻段 410-441Mhz(共 32 個(gè)通道),1Mhz,出廠默認(rèn) 433Mhz調(diào)制方式 LoRa 擴(kuò)頻 通信距離 約 3000 米(測(cè)試條件:晴朗、空曠,最大功率 20dbm,空中速率 2.4Kbps, 天線增益 3dbi) 發(fā)射功率 最大 20dBm(約 100mW),4 級(jí)可調(diào)(0-3),每一級(jí)增減約 3dBm空中速率 6 級(jí)可調(diào)(0.3、1.2、2.4、4.8、9.6、19.2Kbps) 工作電壓 3.35V發(fā)射電流 118ma(20dbm 100mw 電壓 5V

4、) 接收電流 17ma(模式 0、模式 1),最低約 2.3uA(模式 2+2S 喚醒) 通口 UART 串口,8N1、8E1、8O1,從 1200-115200 共 8 種波特率(默認(rèn) 9600、8N1)發(fā)射長(zhǎng)度 內(nèi)部環(huán)形 FIFO 緩存 512 字節(jié),內(nèi)部自動(dòng)分包發(fā)送。某些空速與波特率組合, 可發(fā)送無限長(zhǎng)度數(shù)據(jù)包。 接收長(zhǎng)度 內(nèi)部環(huán)形 FIFO 緩存 512 字節(jié),內(nèi)部自動(dòng)分包發(fā)送。某些空速與波特率組合可 表 1.1 ATK-LORA-01 無線串口模塊電器參數(shù)1.1硬件簡(jiǎn)介 ATK-LORA-01 無線串口模塊外觀如圖 1.1-1 正面圖和圖 1.1-2 背面圖所示: 圖 1.1-1 A

5、TK-LORA-01 無線串口模塊實(shí)物圖正面圖 1.1-2 ATK-LORA-01 無線串口模塊實(shí)物圖背面 模塊通過一個(gè) 1*6 的排針與外部電路連接,各引腳的詳細(xì)的詳細(xì)描述如表 1.1.2 所示: 表 1.1.2 ATK-LORA-01 無線串口模塊引腳說明 從表 1.1.2 可以看到 MD0 與 AUX 引腳有兩個(gè)功能,根據(jù)兩者配合進(jìn)入不同狀態(tài)。模塊在初次上電時(shí),AUX 引腳為輸入狀態(tài)模式,若 MD0 與 AUX 引腳同時(shí)接入 3.3V TTL 高電平, 并且保持 1 秒時(shí)間(引腳電平不變),則模塊會(huì)進(jìn)入固件升級(jí)模式,等待固件升級(jí)。否則進(jìn)入無線通信模式(AUX 引腳會(huì)變回輸出狀態(tài)模式,用于

6、指示模塊的工作狀態(tài)),關(guān)于模塊的介紹,我們就介紹到這里,詳細(xì)的介紹,請(qǐng)看 ATK-LORA-01 無線串口模塊用戶手冊(cè)_V1.2.pdf。 2序號(hào) 名稱 引腳方向 說明 1MD0輸入 1、配置進(jìn)入?yún)?shù)配置 2、上電時(shí)與 AUX 引腳配合進(jìn)入固件升級(jí)模式 2AUX1、輸出 2、輸入 1、用于指示模塊工作狀態(tài), 用戶喚醒外部MCU2、上電時(shí)與 MD0 引腳配合進(jìn)入固件升級(jí)模式 3RXD輸入 TTL 串口輸入,連接到外部 TXD 輸出引腳 4TXD輸出 TTL 串口輸出,連接到外部 RXD 輸入引腳 5GND地線 6VCCDC3.35V 電源輸入 發(fā)送無限長(zhǎng)度數(shù)據(jù)包。 模塊地址 可配置 65536

7、個(gè)地址(便于組網(wǎng)支持廣播和定向傳輸) 接收靈敏度 -136dBm0.3Kbps(接收靈敏度和串口波特率、延遲時(shí)間無關(guān)) 天線形式 SMA 天線 工作溫度 -40+85 存儲(chǔ)溫度 -40+125 1.2 模塊功能介紹 模塊根據(jù) MD0 的配置與 AUX 引腳的狀態(tài)會(huì)進(jìn)入不同的功能,如表 1.2.1 所示: 表 1.2.1 功能介紹其中通信功能下,包含 4 種工作模式,如表 1.2.2 所示:表 1.2.2 工作模式 注意:工作模塊需要模塊進(jìn)入配置功能發(fā)送 AT 指令才能切換。 1.3 快速了解 (1) 透明傳輸:即透?jìng)鲾?shù)據(jù),例如:A 設(shè)備發(fā) 5 字節(jié)數(shù)據(jù) AA BB CC DD EE 到 B 設(shè)

8、備,B 設(shè)備就可以收到數(shù)據(jù) AA BB CC DD EE。(透明傳輸,針對(duì)設(shè)備相同地址、相同的通信信道, 用戶數(shù)據(jù)可以是字符或 16 進(jìn)制數(shù)據(jù)形式) (2) 定向傳輸:即定點(diǎn)傳輸,例如:A 設(shè)備(地址為:0x1400,信道為 0x17(23 信道、433Mhz)需要向 B 設(shè)備(地址為:0x1234,信道為 0x10(16 信道、426Mhz)發(fā)送數(shù)據(jù) AA BB CC,其通信格式為:12 34 10 AA BB CC,其中 1234 為模塊 B 的地址,10 為信道,則模塊 B 可以收到 AA BB CC。同理,如果 B 設(shè)備需要向 A 設(shè)備發(fā)送數(shù)據(jù) AA BB CC,其通信格式為:14 0

9、0 17 AA BB CC,則 A 設(shè)備可以收到 AA BB CC。(定向傳輸,針對(duì)設(shè)備間地址和通信信道不同,數(shù)據(jù)格式為 16 進(jìn)制,發(fā)送格式:高位地址+低位地址+信道+用戶數(shù)據(jù)) (3) 廣播與數(shù)據(jù):將模塊地址設(shè)置為 0xFFFF(即 65535),可以相同信道上的所有模塊的數(shù)據(jù)傳輸,發(fā)送的數(shù)據(jù),可以被相同信道上任意地址的模塊收到,從而起到廣播 和的作用。 以上是模塊的簡(jiǎn)單說明,關(guān)于模塊通信功能及更多詳細(xì)說明及應(yīng)用,請(qǐng)查看ATK-LORA-01 無線串口模塊用戶手冊(cè)_V1.2.pdf。 3模式(0-2) 介紹 備注 0 一般模式 無線透明、定向數(shù)據(jù)傳輸 接收方必須是模式 0、11 喚醒模式

10、和模式 0 唯一區(qū)別:數(shù)據(jù)包發(fā)射前,自動(dòng)增加喚醒碼,這樣才能喚醒工作在模式 2 的接收方 接收方可以是模式 0、1、22 省電模式 串口接收關(guān)閉,無線處于空中喚醒模式,收到無線數(shù)據(jù)后打開串口發(fā)出數(shù)據(jù) 發(fā)射方必須是模式 1 該模式下串口接收關(guān)閉,不能無線發(fā)射 3 信號(hào)強(qiáng)度模式 查看通訊雙方的信號(hào)強(qiáng)度 接收方必須是模式 0、1功能 介紹 進(jìn)入方法 配置功能 模塊參數(shù)配置(AT 指令) 上電后,AUX 空閑狀態(tài) (AUX=0),MD0=1通信功能 無線通信 上電后,AUX 空閑狀態(tài) (AUX=0),MD0=0固件升級(jí)功能 固件升級(jí) 上電后,AUX=1 且 MD0=1(持續(xù) 1 秒時(shí)間,電平不變)2、

11、硬件連接2.1 功能介紹 本實(shí)驗(yàn)功能簡(jiǎn)介:本實(shí)驗(yàn)用于測(cè)試 ATK-LORA-01 無線串口模塊,工作流程如下: 上電后,先檢測(cè)模塊是否存在(通過配置進(jìn)入配置功能,發(fā)送 AT 指令),存在則進(jìn)入主菜單,主菜單會(huì)顯示模塊需要配置的參數(shù)以及進(jìn)入通信,通過開發(fā)板按鍵 KEY0、KEY1、KEY_UP 進(jìn)行功能的操作。按下按鍵 KEY1、或 KEY0,上下箭頭選擇要配置的參數(shù)或者選擇進(jìn)入通信。若選中的是“配置參數(shù)”:當(dāng)按下 KEY_UP 按鍵,會(huì)選中該項(xiàng)(下方顯示下劃線),這時(shí)通過按下 KEY1 或 KEY0 可以對(duì)參數(shù)進(jìn)行配置,配置完后再次按下 KEY_UP 按鍵,可退出該項(xiàng)的選中(下滑線取消)。 若

12、選擇“進(jìn)入通信”選項(xiàng)。按下 KEY_UP 按鍵,則會(huì)進(jìn)入無線通信測(cè)試界面,模塊會(huì)根據(jù)主菜單中用戶設(shè)置的參數(shù)進(jìn)行配置(在配置功能(串口波特率:115200,8 位數(shù)據(jù)位、1 位停止位、無校驗(yàn)位)發(fā)送 AT 指令,配置完后需重新切換回?zé)o線通信下串口配置),參數(shù)配置結(jié)束后,DS1 綠燈會(huì)閃爍,屏幕左上方會(huì)顯示模塊的當(dāng)前配置:模塊地址、通信信道、空中速率、發(fā)射功率、工作模式以及發(fā)送狀態(tài)。屏幕右上方則提示,KEY_UP 返回主菜單、KEY1 發(fā)送數(shù)據(jù)。 若發(fā)送狀態(tài)設(shè)置的是:“定向傳輸”,則會(huì)顯示多一個(gè)選項(xiàng):“KEY0 設(shè)置參數(shù)”。設(shè)置參數(shù)目的主要是設(shè)置發(fā)送目標(biāo)設(shè)備的“地址”和“信道”。按下 KEY0 后

13、,會(huì)顯示輸入框,提示用戶輸入目標(biāo)地址,地址最大值為 65535,輸入結(jié)束后按下“確定”,會(huì)提示繼續(xù)輸入目標(biāo)信道, 信道最大值為 31。再次按下“確定”則返回?zé)o線通信測(cè)試界面。按下 KEY1 則對(duì)目標(biāo)設(shè)備發(fā)送數(shù)據(jù),DS0 紅燈會(huì)指示數(shù)據(jù)發(fā)送或接收的狀態(tài)。 紅燈亮:表示數(shù)據(jù)開始發(fā)送或數(shù)據(jù)開始接收。紅燈滅:則表示數(shù)據(jù)發(fā)送完畢或者數(shù)據(jù)接收完成。發(fā)送和接收的數(shù)據(jù)會(huì)顯示在屏幕上,同時(shí)接收到的數(shù)據(jù)會(huì)串口輸出。按下 KEY_UP, 則返回主菜單界面。 注意: (1) 進(jìn)入配置功能,串口需設(shè)置:“波特率:115200,8 位數(shù)據(jù)位、1 位停止位、無校驗(yàn)位”, 退出配置功能,返回?zé)o線通信需設(shè)置通信下的串口參數(shù),以

14、免無線通信下工作不正常。 (2) AUX 指示:模塊輸出數(shù)據(jù)給 MCU,AUX 引腳會(huì)有上升沿電平,提示數(shù)據(jù)開始輸出,當(dāng)AUX 引腳下降沿電平,表示數(shù)據(jù)輸出完畢。MCU 發(fā)送數(shù)據(jù)給模塊,AUX 引腳上升沿電平表示數(shù)據(jù)開始發(fā)送,當(dāng) AUX 下降沿電平,則表示 MCU 發(fā)送的數(shù)據(jù)已發(fā)送完畢。 2.2 硬件準(zhǔn)備資源 本實(shí)驗(yàn)所需要的硬件資源如下 1,ALIENTEK羅 STM32F429 開發(fā)板 1 個(gè) 2,TFTLCD/RGB 液晶屏模塊 3,ATK-LORA-01 模塊 1 個(gè) 4,USB 線一條(用于供電和模塊與電腦串口調(diào)試助手通信) 5,DC12V 1A 電源適配器 6,SD 卡(若需要更新字

15、庫(kù),則將模塊資料下 SD 卡根目錄文件里對(duì)應(yīng)開發(fā)板的 SYSTEM 文件內(nèi)容復(fù)制到 SD 卡中) 注意:模塊在發(fā)射時(shí),瞬間的工作電流會(huì)比較大,只用 USB 線供電給板子,液晶屏有可能會(huì)出現(xiàn)閃屏現(xiàn)象,建議使用 DC12V 1A 的電源適配器供電。 42.3 模塊與開發(fā)板連接 ATK-LORA-01 模塊可直接與ALIENTEK羅STM32F429 開發(fā)板板載的ATK 模塊接口(ATKMODULE)進(jìn)行連接,ATK MODULE 與 MCU 連接原理圖,如圖 2.3.1 所示: 圖 2.3.1 ATK-MODULE 接口與 MCU 連接關(guān)系 從上圖看出,ATK MODULE 接口,使用時(shí)必須將 P

16、9 的 USART3_TX(PB10)和 GBC_RX 以及 USART3_RX(PB11)和 GBC_TX 連接,才能完成和 STM32 的連接。 羅 STM32F429 開發(fā)板與 ATK-LORA-01 模塊的連接關(guān)系如表 2.3.2 所示: 表 2.3.2 ATK-LORA-01 模塊與羅 STM32F429 開發(fā)板連接關(guān)系圖ATK-LORA-01 模塊插入到開發(fā)板的 ATK MODULE 接口,如圖 2.3.3 所示: 5ATK-LORA-01 無線串口模塊與開發(fā)板連接關(guān)系 ATK-LORA-01 模塊 VCCGNDTXDRXDAUXMD0羅 STM32F429 開發(fā)板 5VGNDPB

17、11PB10PI11PA4圖 2.3.3 ATK-LORA-01 模塊與開發(fā)板對(duì)接實(shí)物圖3、軟件實(shí)現(xiàn) 本實(shí)驗(yàn)在 STM32F429羅開發(fā)板的 ATK-SIM800C 模塊擴(kuò)展實(shí)驗(yàn)基礎(chǔ)上進(jìn)行修改,在HARDWARE 文件夾內(nèi)新建了 LORA 文件夾,并在工程中添加 LORA 分組,新建 lora_ui.c、lora_ui.h、lora_app.c、lora_app.h、lora_cfg.h 共五個(gè)文件,存放在 LORA 文件夾內(nèi)。將 lora_app.c、lora_ui.app、lora_cfg.h 加入 LORA 分組,并添加 LORA 文件夾到頭文件包含路徑。 最終的工程如圖 3.1 所示:

18、 圖 3.1 ATK-LORA-01 模塊測(cè)試實(shí)驗(yàn)工程截圖 本例程代碼量不多,我們僅對(duì)部分重要代碼講解(lora_app.c、lora_ui.c、lora_cfg.h),以及 main 函數(shù)進(jìn)行講解。 Lora_ui.c 文件是液晶顯示 UI 和底層驅(qū)動(dòng)功能的一些函數(shù),這里我們只列出部分代碼,代碼如下: 6/lora 發(fā)送命令后,檢測(cè)接收到的應(yīng)答 /str:期待的應(yīng)答結(jié)果 /返回值:0,沒有得到期待的應(yīng)答結(jié)果 /其他,期待應(yīng)答結(jié)果的位置(str 的位置) u8* lora_check_cmd(u8 *str)char *strx=0;if(USART3_RX_STA&0X8000)/接收到一次

19、數(shù)據(jù)了 USART3_RX_BUFUSART3_RX_STA&0X7FFF=0;/添加結(jié)束符 u8* lora_check_cmd(u8 *str)是檢測(cè)模塊應(yīng)答函數(shù),該函數(shù)用于檢測(cè) ATK-LORA-01 模塊發(fā)送回來的應(yīng)答/數(shù)據(jù),其中 str 為期待應(yīng)答字符串,返回值如果是 0,則表示沒有收到期待應(yīng)答字符串,否則為期待應(yīng)答字符串所在的位置。 u8 lora_send_cmd(u8 *cmd,u8 *ack,u16 waittime),該函數(shù)用于向 ATK-LORA-01 模塊發(fā)送命令。cmd 為命令字符串,當(dāng) cmd=0XFF 的時(shí)候,則直接發(fā)送 cmd。Ack 為期待應(yīng)答字符串, 7st

20、rx=strstr(const char*)USART3_RX_BUF,(const char*)str);return (u8*)strx;/lora 發(fā)送命令 /cmd:發(fā)送的命令字符串(不需要添加回車了),當(dāng) cmd0XFF 的時(shí)候,發(fā)送數(shù)字(比如發(fā)送 0X1A),大于的時(shí)候發(fā)送字符串./ack:期待的應(yīng)答結(jié)果,如果為空,則表示不需要等待應(yīng)答 /waittime:等待時(shí)間(單位:10ms)/返回值:0,發(fā)送成功(得到了期待的應(yīng)答結(jié)果)/1,發(fā)送失敗 u8 lora_send_cmd(u8 *cmd,u8 *ack,u16 waittime)u8 res=0; USART3_RX_STA=

21、0;if(u32)cmdSR&0X40)=0);/等待上一次數(shù)據(jù)發(fā)送完成USART3-DR=(u32)cmd;else u3_printf(%srn,cmd);/發(fā)送命令 if(ack&waittime)/需要等待應(yīng)答 while(-waittime)/等待倒計(jì)時(shí) delay_ms(10);if(USART3_RX_STA&0X8000)/接收到期待的應(yīng)答結(jié)果 if(lora_check_cmd(ack)USART3_RX_STA=0;break;/得到有效數(shù)據(jù) if(waittime=0)res=1;return res;waittime 為等待時(shí)間(單位:10ms)。在 usart3.c

22、的串口接收函數(shù)中,模塊在配置功能下,發(fā)送命令時(shí),串口兩個(gè)字符接收間隔以 10ms 為標(biāo)準(zhǔn)的,超過 10ms 為一次接收完成。(具體的 請(qǐng) 查 看 timer.c 中 TIM7_IRQHandler() 定 時(shí) 器 7 的 中 斷 服 務(wù) 函 數(shù) 和 usart3.c 中USART3_IRQHandler 串口 3 的中斷服務(wù)函數(shù))。 lora_ui.c 我們就介紹到這里,我們?cè)趤砜纯?lora_cfg.h 文件,lora_cfg.h 代碼如下: 8/設(shè)備參數(shù)定義typedef structu16 addr;/設(shè)備地址u8 chn;/信道 u8 power;/發(fā)射功率u8 wlrate;/空中速

23、率 u8 wltime;/休眠時(shí)間u8 mode;/工作模式u8 mode_sta;/發(fā)送狀態(tài)u8 bps;/串口波特率u8 parity;/校驗(yàn)位 _LoRa_CFG;/空中速率(單位:Kbps)#define LORA_RATE_0K3 0 /0.3 #define LORA_RATE_1K2 1 /1.2 #define LORA_RATE_2K4 2 /2.4 #define LORA_RATE_4K8 3 /4.8 #define LORA_RATE_9K6 4 /9.6 #define LORA_RATE_19K2 5 /19.2/休眠時(shí)間(單位:秒)#define LORA_WL

24、TIME_1S 0/1 秒 #define LORA_WLTIME_2S 1/2 秒 /工作模式 #define LORA_MODE_GEN0/一般模式#define LORA_MODE_WK1/喚醒模式#define LORA_MODE_SLEEP 2/省電模式 /發(fā)射功率 #define LORA_PW_11dBm 0 /11dBm #define LORA_PW_14Bbm 1 /14dBm #define LORA_PW_17Bbm 2 /17dBm #define LORA_PW_20Bbm 3 /20dBm/發(fā)送狀態(tài) #define LORA_STA_Tran 0 /透明傳輸 該文

25、件主要是模塊參數(shù)的一些宏定義。在下面可以看到列出的設(shè)備出廠默認(rèn)參數(shù),這些參數(shù)到時(shí)會(huì)在配置模塊的時(shí)候用到。 接下來我們說下lora_app.c 文件,該文件比較重要,包含模塊配置參數(shù)和發(fā)送接收過程。 我們先說下設(shè)備配置的參數(shù)結(jié)構(gòu)體,代碼如下: 9/設(shè)備參數(shù)初始化(具體設(shè)備參數(shù)見 lora_cfg.h 定義)_LoRa_CFG LoRa_CFG=.addr = LORA_ADDR,/設(shè)備地址 .power = LORA_POWER,/發(fā)射功率 .chn = LORA_CHN,/信道 .wlrate = LORA_RATE,/空中速率 .wltime = LORA_WLTIME,/睡眠時(shí)間 .mod

26、e = LORA_MODE,/工作模式 .mode_sta = LORA_STA,/發(fā)送狀態(tài) .bps = LORA_TTLBPS ,/波特率設(shè)置 .parity = LORA_TTLPAR/校驗(yàn)位設(shè)置 ;#define LORA_STA_Dire 1/定向傳輸 /串口波特率(單位:bps)#define LORA_TTLBPS_12000/1200 #define LORA_TTLBPS_24001/2400 #define LORA_TTLBPS_48002/4800 #define LORA_TTLBPS_96003/9600 #define LORA_TTLBPS_192004/192

27、00 #define LORA_TTLBPS_384005/38400 #define LORA_TTLBPS_576006/57600 #define LORA_TTLBPS_1152007/115200/串口數(shù)據(jù)校驗(yàn) #define LORA_TTLPAR_8N10 /8 位數(shù)據(jù) #define LORA_TTLPAR_8E1 1 /8 位數(shù)據(jù)+1 位偶校驗(yàn) #define LORA_TTLPAR_8O1 2 /8 位數(shù)據(jù)+1 位奇校驗(yàn) /設(shè)備出廠默認(rèn)參數(shù) #define LORA_ADDR0/設(shè)備地址 #define LORA_CHN23/通信信道#define LORA_POWERLO

28、RA_PW_20Bbm/發(fā)射功率#define LORA_RATELORA_RATE_19K2/空中速率#define LORA_WLTIMELORA_WLTIME_1S/休眠時(shí)間#define LORA_MODELORA_MODE_GEN/工作模式#define LORA_STALORA_STA_Tran/發(fā)送狀態(tài)#define LORA_TTLBPSLORA_TTLBPS_9600/波特率#define LORA_TTLPARLORA_TTLPAR_8N1/校驗(yàn)位 該結(jié)構(gòu)體成員參數(shù)賦予了設(shè)備出廠的默認(rèn)參數(shù),在初始化配置時(shí)和 UI 的顯示會(huì)用到該結(jié)構(gòu)體。接下來我們看下 Aux_Int 中斷設(shè)

29、置函數(shù)和 EXTI15_10_IRQHandler 中斷服務(wù)函數(shù),代碼如下: 10GPIO_InitTypeDef GPIO_Initure;/設(shè)備工作模式(用于記錄設(shè)備狀態(tài))u8 Lora_mode=0;/ 0:配置模式 1:接收模式 2:發(fā)送模式 /記錄中斷狀態(tài) static u8 Int_mode=0;/0:關(guān)閉 1:上升沿 2:下降沿 /AUX 中斷設(shè)置 /mode:配置的模式 0:關(guān)閉 1:上升沿 2:下降沿void Aux_Int(u8 mode)if(!mode)HAL_NVIC_DisableIRQ(EXTI15_10_IRQn);/失能中斷線 11elseif(mode=1)

30、GPIO_Initure.Pin=GPIO_PIN_11; /PI11 GPIO_Initure.Mode=GPIO_MODE_IT_RISING;/上升沿觸發(fā) else if(mode=2)GPIO_Initure.Pin=GPIO_PIN_11; /PI11 GPIO_Initure.Mode=GPIO_MODE_IT_FALLING;/下降沿觸發(fā) HAL_GPIO_Init(GPIOI,&GPIO_Initure);/重新初始化 HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_11);/清除中斷標(biāo)志位HAL_NVIC_SetPriority(EXTI15_10_IRQn,

31、2,0); /搶占優(yōu)先級(jí)為 2,子優(yōu)先級(jí)為 0 HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);/使能 Int_mode = mode;/記錄中斷模式 void EXTI15_10_IRQHandler(void)HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);/調(diào)用中斷處理公用函數(shù) /中斷服務(wù)程序中需要做的事情 /在 HAL 庫(kù)中所有的外部中斷服務(wù)函數(shù)都會(huì)調(diào)用此函數(shù) /GPIO_Pin:中斷引腳號(hào) 我們先說下 lora_mode 和 Int_mode 變量,lora_mode 變量用于記錄模塊工作模式狀態(tài)的情況(配置模式、接收模式、發(fā)送模式)

32、。Int_mode 變量用于記錄中斷配置情況(關(guān)閉、上升沿、下降沿)。 Aux_int 中斷設(shè)置函數(shù),該函數(shù)用于配置 MCU 外部中斷觸發(fā)方式,有三種方式:關(guān)閉中斷、上升沿中斷、下降沿中斷。它可用于獲取 Aux 引腳的中斷情況,若 MCU 要接收模塊發(fā)送的數(shù)據(jù),則可配置上升沿觸發(fā),以提示數(shù)據(jù)要來了,MCU 請(qǐng)做好準(zhǔn)備。當(dāng) MCU 想知道模塊的數(shù)據(jù)是否已全部發(fā)送給 MCU,則可配置下降沿中斷,提示數(shù)據(jù)已經(jīng)接收完了。在配置中斷后,我們使用 Int_mode 變量來記錄中斷配置的情況。 接下來看下 HAL_GPIO_EXTI_Callback()中斷服務(wù)函數(shù),在函數(shù)中可以看到,當(dāng)是上升沿中斷觸發(fā),先

33、判斷是否為接收模式,是則將串口接收數(shù)據(jù)計(jì)數(shù)清零,然后設(shè)置下降沿觸發(fā), 同時(shí)點(diǎn)亮 LED0,以表示模塊開始發(fā)送數(shù)據(jù)或開始輸出數(shù)據(jù)。當(dāng)下次下降沿中斷來臨,若是接收模式模式則標(biāo)記串口接收數(shù)據(jù)已接收完成,若當(dāng)前是發(fā)送模式狀態(tài)的話,則知道數(shù)據(jù)已發(fā)送完畢,重新標(biāo)記為接收模式,同時(shí) LED0 燈滅,然后再調(diào)用 Aux_Int 函數(shù)配置下次觸發(fā)的邊沿中斷,再繼續(xù)實(shí)現(xiàn)一次發(fā)送或接收。 LoRa_Init()函數(shù)為模塊的初始化函數(shù),代碼如下: 11/LoRa 模塊初始化 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)if(GPIO_Pin=GPIO_PIN_11)if

34、(Int_mode=1)/上升沿(發(fā)送:開始發(fā)送數(shù)據(jù) 接收:數(shù)據(jù)開始輸出)if(Lora_mode=1)/接收模式 USART3_RX_STA=0;/數(shù)據(jù)計(jì)數(shù)清 0Int_mode=2;/設(shè)置下降沿LED0=0;/DS0 亮 else if(Int_mode=2)/下降沿(發(fā)送:數(shù)據(jù)已發(fā)送完 接收:數(shù)據(jù)輸出結(jié)束)if(Lora_mode=1)/接收模式 USART3_RX_STA|=18)&0xff; lora_addrl = LoRa_CFG.addr&0xff;sprintf(char*)sendbuf,AT+ADDR=%02x,%02x,lora_addrh,lora_addrl);/設(shè)

35、置設(shè)備地址lora_send_cmd(sendbuf,OK,50); sprintf(char*)sendbuf,AT+WLRATE=%d,%d,LoRa_CFG.chn,LoRa_CFG.wlrate);/設(shè)置信道和空中速率lora_send_cmd(sendbuf,OK,50);sprintf(char*)sendbuf,AT+TPOWER=%d,LoRa_CFG.power);/設(shè)置發(fā)射功率lora_send_cmd(sendbuf,OK,50); sprintf(char*)sendbuf,AT+CWMODE=%d,LoRa_CFG.mode);/設(shè)置工作模式lora_send_cmd

36、(sendbuf,OK,50); sprintf(char*)sendbuf,AT+TMODE=%d,LoRa_CFG.mode_sta);/設(shè)置發(fā)送狀態(tài)lora_send_cmd(sendbuf,OK,50); sprintf(char*)sendbuf,AT+WLTIME=%d,LoRa_CFG.wltime);/設(shè)置睡眠時(shí)間lora_send_cmd(sendbuf,OK,50); sprintf(char*)sendbuf,AT+UART=%d,%d,LoRa_CFG.bps,LoRa_CFG.parity);/設(shè)置串口波特率、數(shù)據(jù)校驗(yàn)位lora_send_cmd(sendbuf,OK

37、,50);LORA_MD0=0;/退出配置,進(jìn)入通信delay_ms(40);while(LORA_AUX);/判斷是否空閑(模塊會(huì)重新配置參數(shù))if(retry=0) temp=1;/檢測(cè)失敗return temp;函數(shù)中,先對(duì)通信串口設(shè)置波特率 115200、無校驗(yàn)位,然后進(jìn)入配置功能模式,發(fā)送AT 指令配置設(shè)備地址、信道、空中速率等參數(shù),配置完成后推出配置功能模式,用 Lora_mode 變量標(biāo)記為接收模式,同時(shí)通信串口重新設(shè)置回通信下的設(shè)置,最后設(shè)置 AUX 中斷,等待數(shù)據(jù)接收或數(shù)據(jù)的發(fā)送。 LoRa_SendData()函數(shù),該函數(shù)實(shí)現(xiàn)模塊發(fā)送數(shù)據(jù),具體代碼如下: 中斷為上升沿14u

38、8 Dire_Date=0x11,0x22,0x33,0x44,0x55;/定向傳輸數(shù)據(jù)u8 date30=0;/定向數(shù)組 u8 Tran_Data30=0;/透?jìng)鲾?shù)組 #define Dire_DateLen sizeof(Dire_Date)/sizeof(Dire_Date0) extern u32 obj_addr;/記錄用戶輸入目標(biāo)地址 extern u8 obj_chn;/記錄用戶輸入目標(biāo)信道 u8 wlcd_buff10=0; /LCD 顯示字符串緩沖區(qū) /Lora 模塊發(fā)送數(shù)據(jù) void LoRa_SendData(void)static u8 num=0; u16 addr;

39、u8 chn; u16 i=0;if(LoRa_CFG.mode_sta = LORA_STA_Tran)/透明傳輸 sprintf(char*)Tran_Data,ATK-LORA-01 TEST %d,num); u3_printf(%srn,Tran_Data); LCD_Fill(0,195,240,220,WHITE);/清除顯示 Show_Str_Mid(10,195,Tran_Data,16,240);/顯示發(fā)送的數(shù)據(jù) num+; if(num=255) num=0;else if(LoRa_CFG.mode_sta = LORA_STA_Dire)/定向傳輸 addr = (u

40、16)obj_addr;/目標(biāo)地址chn = obj_chn;/目標(biāo)信道 USART3_RX_STA=0;Lora_mode=1;/ 標(biāo) 記 接 收 模 式 usart3_set(LoRa_CFG.bps,LoRa_CFG.parity);/返回通信,更新通信串口配置(波特率、數(shù)據(jù)校驗(yàn)位) Aux_Int(1);/設(shè)置 LORA_AUX 上升沿中斷 當(dāng)設(shè)備是“透明傳輸”或“定向傳輸”時(shí),分別調(diào)用不同的數(shù)據(jù)發(fā)送,其中 obj_addr 和 obj_chn 為全局變量,是用戶輸入的目標(biāo)地址和信道(具體的請(qǐng)看 lora_ui.c 文件下 Dire_Set 函數(shù)),這兩個(gè)參數(shù)只在定向傳輸才用到。在定向

41、傳輸,發(fā)送的數(shù)據(jù)前三個(gè)字節(jié)為“高位地址、低位地址、目標(biāo)信道”,然后后面才是用戶真正的數(shù)據(jù)。 LoRa_ReceData()函數(shù),該函數(shù)實(shí)現(xiàn)模塊接收數(shù)據(jù),具體代碼如下: 15u8 rlcd_buff10=0; /LCD 顯示字符串緩沖區(qū) /Lora 模塊接收數(shù)據(jù) void LoRa_ReceData(void)u16 i=0;u16 len=0;/有數(shù)據(jù)來了if(USART3_RX_STA&0x8000)len = USART3_RX_STA&0X7FFF;USART3_RX_BUFlen=0;/添加結(jié)束符USART3_RX_STA=0;for(i=0;i8)&0xff;/高位地址datei+

42、= addr&0xff;/低位地址datei = chn;/無線信道 for(i=0;iDire_DateLen;i+)/數(shù)據(jù)寫到發(fā)送 BUFFdate3+i = Dire_Datei;for(i=0;i(Dire_DateLen+3);i+)while( HAL_UART_GET_FLAG(&UART3_Handler,UART_FLAG_TXE)= RESET);/循環(huán)發(fā)送,直到發(fā)送完畢HAL_UART_Transmit(&UART3_Handler,&datei,1,1000);/將十六進(jìn)制的數(shù)據(jù)轉(zhuǎn)化為字符串打印在 lcd_buff 數(shù)組 sprintf(char*)wlcd_buff,

43、%x %x %x %x %x %x %x %x, date0,date1,date2,date3,date4,date5,date6,date7);LCD_Fill(0,200,240,230,WHITE);/清除顯示 Show_Str_Mid(10,200,wlcd_buff,16,240);/顯示發(fā)送的數(shù)據(jù) Dire_Date4+;/Dire_Date4數(shù)據(jù)更新 根據(jù)前面的了解,我們知道在數(shù)據(jù)接收完畢后會(huì)標(biāo)記接收完成,然后我們就可以根據(jù)標(biāo) 志來讀取數(shù)據(jù),并且將數(shù)據(jù)顯示在屏幕上。 LoRa_Process()函數(shù),該函數(shù)實(shí)現(xiàn)發(fā)送和接收處理函數(shù),具體代碼如下:16/發(fā)送和接收處理 void L

44、oRa_Process(void)u8 key=0; u8 t=0;DATA:Process_ui();/界面顯示 LoRa_Set();/LoRa 配置(進(jìn)入配置需設(shè)置串口波特率為 115200,) while(1)key = KEY_Scan(0); if(key=KEY0_PRES)if(LoRa_CFG.mode_sta=LORA_STA_Dire)/若是定向傳輸,則進(jìn)入配置目標(biāo)地址和信道界面 usart3_rx(0);/關(guān)閉串口接收Aux_Int(0);/關(guān)閉中斷 while( HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TXE)= RESE

45、T);/循環(huán)發(fā)送,直到發(fā)送完畢HAL_UART_Transmit(&UART1_Handler,&USART3_RX_BUFi,1,1000);LCD_Fill(10,260,240,320,WHITE);if(LoRa_CFG.mode_sta=LORA_STA_Tran)/透明傳輸 Show_Str_Mid(10,270,USART3_RX_BUF,16,240);/顯示接收到的數(shù)據(jù) else if(LoRa_CFG.mode_sta=LORA_STA_Dire)/定向傳輸 /將十六進(jìn)制的數(shù)據(jù)轉(zhuǎn)化為字符串打印在 lcd_buff 數(shù)組sprintf(char*)rlcd_buff,%x %

46、x %x %x %x, USART3_RX_BUF0,USART3_RX_BUF1,USART3_RX_BUF2, USART3_RX_BUF3,USART3_RX_BUF4);Show_Str_Mid(10,270,rlcd_buff,16,240);/顯示接收到的數(shù)據(jù) memset(char*)USART3_RX_BUF,0x00,len);/串口接收緩沖區(qū)清 0該函數(shù)調(diào)用了剛剛我們提到的 LoRa_SendData()發(fā)送和 LoRa_ReceDate()接收函數(shù),在發(fā)送數(shù)據(jù)時(shí)需判斷 AUX 是否為空閑才能進(jìn)行發(fā)送。我們?cè)诙ㄏ騻鬏斉渲媚繕?biāo)設(shè)備地址和信道或在返回主菜單參數(shù)頁(yè)面前,會(huì)先把串口

47、接收和 AUX 中給關(guān)閉,然后再進(jìn)行下一步的操作。 Lora_Test()函數(shù),該函數(shù)為模塊的測(cè)試函數(shù),會(huì)調(diào)用前面我們講解的函數(shù),具體代碼如 下: 17/主測(cè)試函數(shù) void Lora_Test(void)u8 t=0; u8 key=0;u8 netpro=0;Dire_Set();/進(jìn)入設(shè)置目標(biāo)地址和信道goto DATA;else if(key=WKUP_PRES)/返回主菜單頁(yè)面 LORA_MD0=1; /進(jìn)入配置模式delay_ms(40);usart3_rx(0);/關(guān)閉串口接收Aux_Int(0);/ 關(guān) 閉 中 斷break;else if(key=KEY1_PRES)/發(fā)送數(shù)

48、據(jù) if(!LORA_AUX&(LoRa_CFG.mode!=LORA_MODE_SLEEP)/空閑且非省電模式 Lora_mode=2;/標(biāo)記發(fā)送狀態(tài) LoRa_SendData();/發(fā)送數(shù)據(jù) /數(shù)據(jù)接收LoRa_ReceData();t+;if(t=20)t=0; LED1=LED1;delay_ms(10);18LCD_Clear(WHITE); POINT_COLOR=RED;Show_Str_Mid(0,30,ATK-LORA-01 測(cè)試程序,16,240);while(LoRa_Init()/初始化 ATK-LORA-01 模塊 Show_Str(40+30,50+20,200,16,未檢測(cè)到模塊!,16,0);delay_ms(300);Show_Str(40+30,50+20,200,16,16,0);Show_Str(40+30,50+20,200,16,檢測(cè)到模塊!,16,0);delay_ms(500); Menu_ui();/菜單 while(1)key = KEY_Scan(0); if(key)Show_Str(30+10,95+45+netpro*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論