




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)購(gòu)房轉(zhuǎn)讓合同范本
- 個(gè)人轉(zhuǎn)讓德文合同范本
- 分包混凝土合同范本
- 買賣車位轉(zhuǎn)讓合同范本
- 包子工用工合同范本
- 創(chuàng)業(yè)加盟合同范本
- 廣西買房合同范本
- 出國(guó)勞務(wù)外派合同范本
- 勞動(dòng)合同范本工資
- 出租包車合同范本
- 2022-2023學(xué)年湖南省長(zhǎng)沙市統(tǒng)招專升本語(yǔ)文模擬練習(xí)題三及答案
- 社會(huì)救助法課件
- 1.裝配式建筑概述(裝配式混凝土結(jié)構(gòu)施工技術(shù))
- 第七講+漢字字音
- 新零件的成熟保障MLA
- 【基于杜邦分析法的企業(yè)盈利能力研究國(guó)內(nèi)外文獻(xiàn)綜述4000字】
- 初中語(yǔ)文七下-上下句默寫
- 《董存瑞舍身炸碉堡》PPT課件新
- 新川教版信息技術(shù)六年級(jí)下冊(cè)全冊(cè)教案
- 第20章補(bǔ)充芯片粘接技術(shù)
- 旅行社運(yùn)營(yíng)實(shí)務(wù)電子課件 5.1 旅行社電子商務(wù)概念
評(píng)論
0/150
提交評(píng)論