边做饭边被躁BD在线看_国产成人AV综合久久视色_亚洲人成在线观看_走红网

物聯網之LoRa開發與應用二(驅動移植)

LoRa官方固件下載:https://pan.baidu.com/s/1ftP-HMJTmF9PtA05Lt-Tag 密碼:bc8y
IAR代碼操作快捷鍵

如果要在整個工程中查找 某個單詞或者其他,則按照如下方式查找:

LoRa驅動框架

硬件接口設計

硬件接口函數

驅動移植過程(修改代碼之后可以先編譯,然后再看哪里還需要修改)
LoRa固件中相關文件復制到IAR工程里面

IAR工程中添加工作組

添加相關文件(platform文件中請將下圖的sx1232-Hal.c換成sx1276-Hal.c,特此更正)

修改硬件平臺:添加宏定義,選擇sx1276的硬件庫(platform文件中請將下圖的sx1232-Hal.c換成sx1276-Hal.c,特此更正)

添加新增文件的包含路徑

修改硬件平臺:修改相關代碼,并添加宏定義,選擇我們實際使用的MCU硬件庫(本項目中使用的是STM32F051K8)(先編譯代碼,然后根據錯誤提示修改)

注釋掉USB相關代碼和初始化函數(先編譯代碼,然后根據錯誤提示修改)

修改led.h中IO口定義(根據IO功能映射表)

PB0 LED4 數字輸出-無線通信網絡指示燈
PB1 LED3 數字輸出-無線通信發送指示燈
PB2 LED2 數字輸出-無線通信接收指示燈

typedef enum
{
LED_GREEN = 0,//如果從第二個成員開始,第一個就沒有任何意義,隨便填一個就可以了
LED_RX = 1,//接收指示燈,根據端口映射表可知,我們實際使用了三個指示燈。假設我們從第二個成員開始
LED_TX = 2,//發送指示燈
LED_NT = 3,//網絡指示燈
#if defined( STM32F4XX ) || defined( STM32F2XX ) || defined( STM32F429_439xx )
LED_DBG3 = 4,
#endif
} tLed;

// RED
#define LED1_PIN GPIO_PIN_2 //因為我們只用了三個指示燈,而且是從第二個成員開始定義的,所以這第一個是無效的,可以隨便填一個
#define LED1_GPIO_PORT GPIOB
//#define LED1_GPIO_CLK RCC_APB2Periph_GPIOE//以前的固件庫時鐘定義,HAL庫是不支持的,所以注釋掉
// GREEN
#define LED2_PIN GPIO_PIN_2 //無線通信接收指示燈
#define LED2_GPIO_PORT GPIOB
//#define LED2_GPIO_CLK RCC_APB2Periph_GPIOE//以前的固件庫時鐘定義,HAL庫是不支持的,所以注釋掉
// DBG1
#define LED3_PIN GPIO_PIN_1 //無線通信發送指示燈
#define LED3_GPIO_PORT GPIOB
//#define LED3_GPIO_CLK RCC_APB2Periph_GPIOE//以前的固件庫時鐘定義,HAL庫是不支持的,所以注釋掉
// DBG2
#define LED4_PIN GPIO_PIN_0 //無線通信網絡指示燈
#define LED4_GPIO_PORT GPIOB
//#define LED4_GPIO_CLK RCC_APB2Periph_GPIOE//以前的固件庫時鐘定義,HAL庫是不支持的,所以注釋掉

修改led.c

void LedOn( tLed led )//燈亮
{
HAL_GPIO_WritePin( LedPort[led], LedPin[led], LED_ON );//HAL庫函數原型:void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
}

void LedOff( tLed led )//燈滅
{
HAL_GPIO_WritePin( LedPort[led], LedPin[led], LED_OFF ); //HAL庫函數原型:void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
}

void LedToggle( tLed led )//燈狀態翻轉,此處不使用
{
//LedPort[led]->ODR ^= LedPin[led];
}

#if LED_INV
#define LED_ON GPIO_PIN_RESET
#define LED_OFF GPIO_PIN_SET
#else
#define LED_ON GPIO_PIN_SET
#define LED_OFF GPIO_PIN_RESET
#endif

修改sx1276-Hal.c(請將下圖的sx1232-Hal.c換成sx1276-Hal.c,其代碼修改方式一致,特此更正)

PA7 NSS_LoRa LoRa模塊片選接口

PA11 DIO0 數字量輸入-LoRa數字IO0
PA12 DIO1

數字量輸入-LoRa數字IO1
PA2 DIO3 數字量輸入-LoRa數字IO3
PA3 DIO2 數字量輸入-LoRa數字IO2

/*!
* SX1232 SPI NSS I/O definitions
*/
#if defined( STM32F4XX ) || defined( STM32F2XX )
#define NSS_IOPORT GPIOA
#define NSS_PIN GPIO_Pin_15
#else
#define NSS_IOPORT GPIOA
#define NSS_PIN GPIO_PIN_7
#endif

/*!
* SX1232 DIO pins I/O definitions
*/
#if defined( STM32F4XX ) || defined( STM32F2XX )
#define DIO0_IOPORT GPIOG
#define DIO0_PIN GPIO_Pin_13
#else
#define DIO0_IOPORT GPIOA
#define DIO0_PIN GPIO_PIN_11
#endif

#if defined( STM32F4XX ) || defined( STM32F2XX )
#define DIO1_IOPORT GPIOB
#define DIO1_PIN GPIO_Pin_8
#else
#define DIO1_IOPORT GPIOA
#define DIO1_PIN GPIO_PIN_12
#endif

#if defined( STM32F4XX ) || defined( STM32F2XX )
#define DIO2_IOPORT GPIOA
#define DIO2_PIN GPIO_Pin_2
#else
#define DIO2_IOPORT GPIOA
#define DIO2_PIN GPIO_PIN_3
#endif

#if defined( STM32F4XX ) || defined( STM32F2XX )
#define DIO3_IOPORT
#define DIO3_PIN RF_DIO3_PIN
#else
#define DIO3_IOPORT GPIOA
#define DIO3_PIN GPIO_PIN_2
#endif

另外具體分析 sx1276-Hal.c中的如下代碼:

?void SX1276WriteBuffer( uint8_t addr, uint8_t *buffer, uint8_t size )
{
uint8_t i;

//NSS = 0;
HAL_GPIO_WritePin( NSS_IOPORT, NSS_PIN, GPIO_PIN_RESET );//SPI片選引腳NSS拉低,SPI被選中

SpiInOut( addr | 0x80 );//SPI第一個數據字節為地址域,bit7 為讀寫控制位, “1” 表示寫, “0” 表示讀;bit(6-0)對應當前操作的寄存器地址,這里是寫操作
for( i = 0; i < size; i++ )
{
SpiInOut( buffer[i] );
}

//NSS = 1;
HAL_GPIO_WritePin( NSS_IOPORT, NSS_PIN, GPIO_PIN_SET );//SPI片選引腳NSS拉高,SPI不工作
}

void SX1276ReadBuffer( uint8_t addr, uint8_t *buffer, uint8_t size )
{
uint8_t i;

//NSS = 0;
HAL_GPIO_WritePin( NSS_IOPORT, NSS_PIN, GPIO_PIN_RESET );

SpiInOut( addr & 0x7F );//SPI第一個數據字節為地址域,bit7 為讀寫控制位, “1” 表示寫, “0” 表示讀;bit(6-0)對應當前操作的寄存器地址,這里是讀操作

for( i = 0; i < size; i++ )
{
buffer[i] = SpiInOut( 0 );
}

//NSS = 1;
HAL_GPIO_WritePin( NSS_IOPORT, NSS_PIN, GPIO_PIN_SET );
}

void SX1276Write( uint8_t addr, uint8_t data )
{
SX1276WriteBuffer( addr, &data, 1 );
}

void SX1276Read( uint8_t addr, uint8_t *data )
{
SX1276ReadBuffer( addr, data, 1 );
}

void SX1276WriteFifo( uint8_t *buffer, uint8_t size )
{
SX1276WriteBuffer( 0, buffer, size );/* 在連續讀寫操作模式時, 寄存器會自動加“1” ,
直到NSS腳被拉高;特別注意: FIFO操作時, 寄存器地址不會自動增加,
而是FIFO內的緩存地址。*/
}

void SX1276ReadFifo( uint8_t *buffer, uint8_t size )
{
SX1276ReadBuffer( 0, buffer, size ); /*在連續讀寫操作模式時, 寄存器會自動加“1” ,
直到NSS腳被拉高;特別注意: FIFO操作時, 寄存器地址不會自動增加,
而是FIFO內的緩存地址。*/
}

inline uint8_t SX1276ReadDio0( void )
{
return HAL_GPIO_ReadPin( DIO0_IOPORT, DIO0_PIN );//讀取DIO0引腳的狀態
}

inline uint8_t SX1276ReadDio1( void )
{
return HAL_GPIO_ReadPin( DIO1_IOPORT, DIO1_PIN );
}

inline uint8_t SX1276ReadDio2( void )
{
return HAL_GPIO_ReadPin( DIO2_IOPORT, DIO2_PIN );
}

修改sx1276-Hal.h

#define GET_TICK_COUNT( ) ( HAL_GetTick() )
#define TICK_RATE_MS( ms ) ( ms )

修改spi.c

//**********************************//
//
//函數名稱: SpiInOut
//
//函數描述: SPI總線讀取寫入單個字節
//
//函數參數: uint8_t
//
//返回值: uint8_t
//
//創建者:
//*******************************//

uint8_t SpiInOut( uint8_t outData )
{
uint8_t pData = 0;
//outData:發送的數據 pData:接收數據的緩存區 1:表示數據長度為1 0xffff:超時時間
if(HAL_SPI_TransmitReceive(&hspi1,&outData,&pData,1,0xffff) != HAL_OK)
return ERROR;
else
return pData;
}

LoRa模塊上電自檢:如果能讀取LoRa芯片的版本號,則SPI功能正確,驅動移植成功

上電通過SPI總線讀取芯片版本,判斷讀取值是否為0x12,并打印模塊版本號。

//如果要使用sx1278相關的接口函數,則需要包含如下頭文件
#include "platform.h"
#include "radio.h"
#include "sx1276-Hal.h"
#include "sx1276-LoRa.h"
#include "sx1276-LoRaMisc.h"

uint8_t RegVersion = 0;
SX1276Read( REG_LR_VERSION, &RegVersion );

if(RegVersion != 0x12)
{
printf("LoRa read Error!\r\n");
printf("LoRa RegVersion = %d!\r\n",RegVersion);
}
else
{
printf("LoRa read Ok!\r\n");
printf("LoRa RegVersion = %d!\r\n",RegVersion);
}


---------------------
作者:許新天
來源:CSDN
原文:https://blog.csdn.net/weixin_39148042/article/details/81664681
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

說明:LPWA物聯網應用站(LPWAP.com)通過公開互聯網收集、整理并轉載有關LPWA物聯網應用解決方案,以供廣大LPWA應用開發者和愛好者共同學習交流和參考運用到實際生產生活中。本站所有轉載的文章、圖片、音頻、視頻等資料的版權歸版權所有人所有并衷心感謝您的付出,由于本站采納的非本站原創文章及圖片等內容無法一一聯系確認版權者,如果本網所選內容的文章原創作者認為其作品不宜放在本站,請及時通過以下留言功能通知我們采取適當措施,避免給雙方造成不必要的經濟損失。如果您希望保留文章在本站,但希望文章末尾提供對作者的致謝或者產品、網站交換鏈接的,也請將需求寫入以下留言欄中,謝謝您的支持。讓我們共同努力,打造萬物互聯的未來美好生活!

您的留言或需求:

 
边做饭边被躁BD在线看_国产成人AV综合久久视色_亚洲人成在线观看_走红网 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>