X1278芯片上移植Semtech官方PING-PONG例程 移植環(huán)境:keil5.20 硬件平臺:stm32f051+sx1278 1、下載源碼:Semtech官網(wǎng)下載最新例程鏈接: 2、準(zhǔn)備文件: SX12xxDrivers-V2.1.0文件夾下只有src為我們需要使用的文件夾,src文件夾下有platform文件夾、radio文件夾和一個文件main.c,platform文件夾存放的是不同硬件平臺的驅(qū)動,我們只需要sx12xxEiger文件夾和platform.h;另外,由于我用的是STM32F0,所以sx12xxEiger文件夾里面有關(guān)其他STM32硬件平臺的文件也都不要,LoRa芯片使用的是SX1278,關(guān)于sx1272、sx1276、sx1232、sx1509的文件也都不要,還有一個radio文件夾,里面關(guān)于sx1272、sx1276、sx1232、sx1509的文件也都不要。 3、在KEIL里建工程,直接拿官方的固件庫來建就行了,不再贅述。把步驟2整理后的文件加到工程中,基本框架就搭好了。 4、啥都不說,先編譯一下,數(shù)不清的錯誤。從main.c文件開始捋一捋,程序過程很簡單,先初始化stm32f0的時鐘,初始化SPI,初始化LED等,初始化systick,接著再初始化6個GPIO口作為sx1278中斷的檢測口,STM32F0的初始化完成了; 5、再復(fù)位LoRa芯片sx1278,復(fù)位完成,然后是初始化LoRa模塊;設(shè)置LoRa工作方式為睡眠模式,設(shè)置射頻通信方式為LoRa模式,設(shè)置工作方式為待機模式,讀取LoRa所有寄存器(111個寄存器,一共112個寄存器,0x00寄存器是讀接收緩存區(qū)的,沒收到數(shù)據(jù),不用讀)的值,這些值是LoRa寄存器的上電缺省值,有些在后面會用到,這里一次性讀了;然后繼續(xù)初始化,設(shè)置LoRa的參數(shù),如:LNA放大增益、通信主頻率、擴頻因子、帶寬、編碼率、超時閾值、天線發(fā)射功率等等等等,了解全部參考datasheet即可。 6、初始化完成后,設(shè)置LoRa為接收模式,然后進入while循環(huán),循環(huán)里面運行函數(shù)SX1276LoRaProcess(),這個函數(shù)最為重要,是整個程序的核心,函數(shù)里面類似于一個狀態(tài)機,LoRa的個個狀態(tài)下都有相應(yīng)的實現(xiàn)代碼,完成動作(比如完成一次接受)后,返回相應(yīng)的值,通過調(diào)用這個函數(shù),判斷它的返回值,來確定下一步動作。 7、整個例程的工作流程到這里就結(jié)束了。例程有地方不太明白,就多看幾遍,基本就理解了。 8、分析完了程序的工作流程,開始調(diào)試;先試一試SPI通信是否正常,SX1276ReadBuffer( REG_LR_OPMODE, &buff, 1 );,讀取當(dāng)前工作模式,通過查看返回值判斷通信是否正常;然后就切換到接收模式,發(fā)送一個字符串;發(fā)送完成,切換到接收模式,接收到數(shù)據(jù),再切換到發(fā)送模式,發(fā)送一個字符串,如此循環(huán); 9、為了方便調(diào)試,用串口把接收到的數(shù)據(jù)打印出來,同時,接收到數(shù)據(jù)后,讓LED1燈狀態(tài)翻轉(zhuǎn)一下,發(fā)送完成后,讓LED2狀態(tài)翻轉(zhuǎn)一下。移植到此就完成了。 10、debug小技巧,官方給的源文件里面,有很多代碼你都沒有用到,建議把他們都屏蔽掉,還有宏也是,這樣報錯會少很多。
貼一下我的工程目錄: 也有沒用到的.c文件,把里面的內(nèi)容注釋了。 已上,完!
|