|
SI4438 Demo 程序說明文檔
工程說明:
1、Demo 工程是基于Stm32F103 單片機(jī)在MDK(KEIL5)平臺(tái)下對(duì)SI4438 無線模塊的開發(fā)例程,用戶可在此基礎(chǔ)上加強(qiáng)對(duì)SI4438的理解,也可在此基礎(chǔ)上進(jìn)行移植以便對(duì)SI4438 模塊進(jìn)行2 次開發(fā)。
2、Demo 工程主要實(shí)現(xiàn)兩個(gè)功能 (TX/RX ):
一、發(fā)送功能:模塊配置為發(fā)送功能,在發(fā)送模式 1,每秒發(fā)送一次固定字符串 “ashining”;在發(fā)送模式2,通過串口發(fā)送自定義數(shù)據(jù)(如www.zg4o1577.cn )。發(fā)送模式1 和發(fā)送模式2 通過按鍵切換。
二、接收功能:模塊配置為接收功能,接收數(shù)據(jù)并通過串口將接收到的數(shù)據(jù)輸出, 串口波特率默認(rèn)配置為9600。
3、Demo 程序提供了硬件SPI 接口和軟件模擬SPI 接口(基于C52 的Demo 程序只有軟件模擬SPI 接口),用戶在移植時(shí)可根據(jù)不同的PCB 布局和實(shí)際應(yīng)用需求進(jìn)行選擇。
4、Demo 程序開始運(yùn)行時(shí),兩個(gè)LED 燈會(huì)閃爍3 個(gè)周期(一亮一滅為一個(gè)周期),代表無線模塊已經(jīng)初始化完成處于發(fā)送狀態(tài)或接收狀態(tài)。如果上電兩個(gè)LED 沒有正常閃爍,說明無線模塊初始化失敗或未檢測到無線模塊,建議斷電重新插拔芯片再上電。
工程配置:
1、發(fā)送功能和接收功能的選擇切換:Demo 工程只需經(jīng)過簡單的配置修改就可以在發(fā)
送功能和接收功能之間進(jìn)行切換,采用這種編寫方式的目的是為了讓用戶更加容易
理解SI4438 無線模塊發(fā)送和接收功能的操作方式到底有何不同,讓用戶更容易掌握
對(duì)無線模塊的操作并進(jìn)行2 次開發(fā)。
發(fā)送和接收功能切換方法(以從默認(rèn)的發(fā)送功能切換到接收功能為例):解壓Demo
工程壓縮包,在Demo_SI4438_Stm32F103\Project_SI4438\Source_Files\app\inc 文件
夾下打開main.h 頭文件(或者通過開發(fā)軟件打開工程找到main.h),該頭文件在包
含其他相關(guān)頭文件后,便是關(guān)于工程配置的宏定義,第一個(gè)宏定義為發(fā)送功能和接
收功能選擇切換使用的宏定義。第一個(gè)宏定義為#define __SI4438_TX_TEST__,保留
該宏定義工程就被配置成發(fā)送功能(默認(rèn)工程配置為發(fā)送功能,即保留了該宏定義),
通過屏蔽該宏定義(在#define 前加“//”),可將工程由默認(rèn)的發(fā)送功能配置成接收
功能。
2、硬件SPI 接口和軟件模擬SPI 接口的選擇切換:為了使Demo 程序適應(yīng)性更強(qiáng),可
移植性更高,Demo 程序提供了硬件SPI 接口和軟件模擬SPI 接口可供用戶選擇。程
序默認(rèn)配置為硬件SPI 接口 (部分單片機(jī)無硬件SPI 接口如C52 單片機(jī),這種情況
下只有軟件模擬SPI 接口,固不存在SPI 接口的切換)。
硬件SPI 接口和軟件模擬SPI 接口的切換方法:切換方法同發(fā)送、接收功能的切換
方法一致,main.h 中第二個(gè)宏定義為#define __USE_SOFT_SPI_INTERFACE,屏蔽該宏
定義為選擇硬件SPI 接口(工程默認(rèn)配置為選擇硬件SPI 接口),保留該宏定義為選
擇軟件模擬SPI 接口。
注:在修改工程配置后,需要重新編譯再下載修改才會(huì)起效。
SI4463 和SI4438 程序除了配置頭文件不一樣,其他一樣。
開發(fā)環(huán)境:
1、優(yōu)化選項(xiàng)選擇默認(rèn)值,即不做修改。
2、編輯環(huán)境設(shè)置(適用于Demo 程序V3.0 版Keil 平臺(tái)):
Edit -> Configuration 目錄下:
Editor -> Tab size 推薦設(shè)置為4,有利于工程中代碼和注釋的對(duì)齊。
Enconding 推薦設(shè)置為 UTF-8 的編碼格式,兼容性較好,不易出現(xiàn)亂碼。
stm32單片機(jī)源程序(主程序)如下:
- /**
- ******************************************************************************
- * @author 澤耀科技 ASHINING
- * @version V3.0
- * @date 10-08
- * @brief 主函數(shù)C文件
- ******************************************************************************
- * @attention
- ******************************************************************************
- */
- #include "main.h" //main.h 中含有TX/RX、軟件SPI/硬件SPI選擇配置選項(xiàng)
- const char *g_Ashining = "ashining";
- uint8_t g_TxMode = 0, g_UartRxFlag = 0;
- uint8_t g_UartRxBuffer[ 64 ] = { 0 };
- uint8_t g_SI4463ItStatus[ 9 ] = { 0 };
- uint8_t g_SI4463RxBuffer[ 64 ] = { 0 };
- /**
- * @brief :主函數(shù)
- * @param :無
- * @note :無
- * @retval:無
- */
- int main( void )
- {
- uint16_t i = 0;
- //串口初始化波特率 9600
- drv_uart_init( 9600 );
-
- //延時(shí)初始化
- drv_delay_init( );
-
- //LED初始化
- drv_led_init( );
-
- //SPI初始化
- drv_spi_init( );
-
- //SI4463初始化
- SI446x_Init( );
-
- led_red_off( );
- led_green_off( );
- for( i = 0; i < 6; i++ ) //模塊初始化完成,LED燈閃爍3個(gè)周期
- {
- led_red_flashing( );
- led_green_flashing( );
- drv_delay_500Ms( 1 );
- }
-
-
- #ifdef __SI4438_TX_TEST__
- //=========================================================================================//
- //*****************************************************************************************//
- //************************************* 發(fā)送 **********************************************//
- //*****************************************************************************************//
- //=========================================================================================//
-
- //按鍵初始化
- drv_button_init( ); //Demo程序中 只有在發(fā)送時(shí)才會(huì)使用按鍵
-
- while( 1 )
- {
- //模式切換
- if( BUTOTN_PRESS_DOWN == drv_button_check( )) //檢查按鍵動(dòng)作
- {
- g_TxMode = 1 - g_TxMode; //模式會(huì)在 TX_MODE_1( 0 ),TX_MODE_2( 1 )之間切換
-
- //狀態(tài)顯示清零
- led_green_off( );
- led_red_off( );
-
- if( TX_MODE_1 == g_TxMode )
- {
- for( i = 0; i < 6; i++ ) //固定發(fā)送模式,紅燈閃爍3次
- {
- led_red_flashing( );
- drv_delay_500Ms( 1 );
- }
- }
- else
- {
- for( i = 0; i < 6; i++ ) //串口發(fā)送模式,綠燈閃爍3次
- {
- led_green_flashing( );
- drv_delay_500Ms( 1 );
- }
- }
- }
-
- //發(fā)送固定字符串
- if( TX_MODE_1 == g_TxMode )
- {
- //發(fā)送數(shù)據(jù)
- #if PACKET_LENGTH == 0
- SI446x_Send_Packet( (uint8_t *)g_Ashining, 8, 0, 0 );
- #else
- SI446x_Send_Packet( (uint8_t *)g_Ashining, PACKET_LENGTH, 0, 0 );
- #endif
- drv_delay_500Ms( 1 );
- led_red_flashing( ); //1S左右發(fā)送一包 每發(fā)送一包紅燈閃爍一次
- drv_delay_500Ms( 1 );
- }
- else //發(fā)送串口接收到的字符串
- {
- //查詢串口數(shù)據(jù)
- i = drv_uart_rx_bytes( g_UartRxBuffer );
-
- if( 0 != i )
- {
- if( 16 < i )
- {
- i = 0;
- }
- #if PACKET_LENGTH == 0
- SI446x_Send_Packet( (uint8_t *)g_UartRxBuffer, i, 0, 0 );
- #else
- SI446x_Send_Packet( (uint8_t *)g_UartRxBuffer, PACKET_LENGTH, 0, 0 );
- #endif
- led_red_flashing( );
- }
- }
- }
-
- #else
- //=========================================================================================//
- //*****************************************************************************************//
- //************************************* 接收 **********************************************//
- //*****************************************************************************************//
- //=========================================================================================//
-
- while( 1 )
- {
- SI446x_Interrupt_Status( g_SI4463ItStatus ); //讀中斷狀態(tài)
-
- if( g_SI4463ItStatus[ 3 ] & ( 0x01 << 4 ))
- {
- i = SI446x_Read_Packet( g_SI4463RxBuffer ); //讀FIFO數(shù)據(jù)
- if( i != 0 )
- {
- led_green_flashing( );
- drv_uart_tx_bytes( g_SI4463RxBuffer,i ); //輸出接收到的字節(jié)
- }
-
- SI446x_Change_Status( 6 );
- while( 6 != SI446x_Get_Device_Status( ));
- SI446x_Start_Rx( 0, 0, PACKET_LENGTH,0,0,3 );
- }
- else
- {
- if( 3000 == i++ )
- {
- i = 0;
- SI446x_Init( );
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載(完整代碼+說明):
Demo_SI4438_Stm32F103.zip
(764.69 KB, 下載次數(shù): 233)
2017-9-19 14:47 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|