欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
SI4438的串口收發STM32例程
[打印本頁]
作者:
笨鳥想飛
時間:
2017-9-19 14:47
標題:
SI4438的串口收發STM32例程
SI4438 Demo 程序說明文檔
工程說明:
1、Demo 工程是基于Stm32F103 單片機在MDK(KEIL5)平臺下對SI4438 無線模塊的開發例程,用戶可在此基礎上加強對SI4438的理解,也可在此基礎上進行移植以便對SI4438 模塊進行2 次開發。
2、Demo 工程主要實現兩個功能 (TX/RX ):
一、發送功能:模塊配置為發送功能,在發送模式 1,每秒發送一次固定字符串 “ashining”;在發送模式2,通過串口發送自定義數據(如
www.raoushi.com
)。發送模式1 和發送模式2 通過按鍵切換。
二、接收功能:模塊配置為接收功能,接收數據并通過串口將接收到的數據輸出, 串口波特率默認配置為9600。
3、Demo 程序提供了硬件SPI 接口和軟件模擬SPI 接口(基于C52 的Demo 程序只有軟件模擬SPI 接口),用戶在移植時可根據不同的PCB 布局和實際應用需求進行選擇。
4、Demo 程序開始運行時,兩個LED 燈會閃爍3 個周期(一亮一滅為一個周期),代表無線模塊已經初始化完成處于發送狀態或接收狀態。如果上電兩個LED 沒有正常閃爍,說明無線模塊初始化失敗或未檢測到無線模塊,建議斷電重新插拔芯片再上電。
工程配置:
1、發送功能和接收功能的選擇切換:Demo 工程只需經過簡單的配置修改就可以在發
送功能和接收功能之間進行切換,采用這種編寫方式的目的是為了讓用戶更加容易
理解SI4438 無線模塊發送和接收功能的操作方式到底有何不同,讓用戶更容易掌握
對無線模塊的操作并進行2 次開發。
發送和接收功能切換方法(以從默認的發送功能切換到接收功能為例):解壓Demo
工程壓縮包,在Demo_SI4438_Stm32F103\Project_SI4438\Source_Files\app\inc 文件
夾下打開main.h 頭文件(或者通過開發軟件打開工程找到main.h),該頭文件在包
含其他相關頭文件后,便是關于工程配置的宏定義,第一個宏定義為發送功能和接
收功能選擇切換使用的宏定義。第一個宏定義為#define __SI4438_TX_TEST__,保留
該宏定義工程就被配置成發送功能(默認工程配置為發送功能,即保留了該宏定義),
通過屏蔽該宏定義(在#define 前加“//”),可將工程由默認的發送功能配置成接收
功能。
2、硬件SPI 接口和軟件模擬SPI 接口的選擇切換:為了使Demo 程序適應性更強,可
移植性更高,Demo 程序提供了硬件SPI 接口和軟件模擬SPI 接口可供用戶選擇。程
序默認配置為硬件SPI 接口 (部分單片機無硬件SPI 接口如C52 單片機,這種情況
下只有軟件模擬SPI 接口,固不存在SPI 接口的切換)。
硬件SPI 接口和軟件模擬SPI 接口的切換方法:切換方法同發送、接收功能的切換
方法一致,main.h 中第二個宏定義為#define __USE_SOFT_SPI_INTERFACE,屏蔽該宏
定義為選擇硬件SPI 接口(工程默認配置為選擇硬件SPI 接口),保留該宏定義為選
擇軟件模擬SPI 接口。
注:在修改工程配置后,需要重新編譯再下載修改才會起效。
SI4463 和SI4438 程序除了配置頭文件不一樣,其他一樣。
開發環境:
1、優化選項選擇默認值,即不做修改。
2、編輯環境設置(適用于Demo 程序V3.0 版Keil 平臺):
Edit -> Configuration 目錄下:
Editor -> Tab size 推薦設置為4,有利于工程中代碼和注釋的對齊。
Enconding 推薦設置為 UTF-8 的編碼格式,兼容性較好,不易出現亂碼。
stm32單片機源程序(主程序)如下:
/**
******************************************************************************
* @author 澤耀科技 ASHINING
* @version V3.0
* @date 10-08
* @brief 主函數C文件
******************************************************************************
* @attention
******************************************************************************
*/
#include "main.h" //main.h 中含有TX/RX、軟件SPI/硬件SPI選擇配置選項
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 :主函數
* @param :無
* @note :無
* @retval:無
*/
int main( void )
{
uint16_t i = 0;
//串口初始化波特率 9600
drv_uart_init( 9600 );
//延時初始化
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個周期
{
led_red_flashing( );
led_green_flashing( );
drv_delay_500Ms( 1 );
}
#ifdef __SI4438_TX_TEST__
//=========================================================================================//
//*****************************************************************************************//
//************************************* 發送 **********************************************//
//*****************************************************************************************//
//=========================================================================================//
//按鍵初始化
drv_button_init( ); //Demo程序中 只有在發送時才會使用按鍵
while( 1 )
{
//模式切換
if( BUTOTN_PRESS_DOWN == drv_button_check( )) //檢查按鍵動作
{
g_TxMode = 1 - g_TxMode; //模式會在 TX_MODE_1( 0 ),TX_MODE_2( 1 )之間切換
//狀態顯示清零
led_green_off( );
led_red_off( );
if( TX_MODE_1 == g_TxMode )
{
for( i = 0; i < 6; i++ ) //固定發送模式,紅燈閃爍3次
{
led_red_flashing( );
drv_delay_500Ms( 1 );
}
}
else
{
for( i = 0; i < 6; i++ ) //串口發送模式,綠燈閃爍3次
{
led_green_flashing( );
drv_delay_500Ms( 1 );
}
}
}
//發送固定字符串
if( TX_MODE_1 == g_TxMode )
{
//發送數據
#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左右發送一包 每發送一包紅燈閃爍一次
drv_delay_500Ms( 1 );
}
else //發送串口接收到的字符串
{
//查詢串口數據
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 ); //讀中斷狀態
if( g_SI4463ItStatus[ 3 ] & ( 0x01 << 4 ))
{
i = SI446x_Read_Packet( g_SI4463RxBuffer ); //讀FIFO數據
if( i != 0 )
{
led_green_flashing( );
drv_uart_tx_bytes( g_SI4463RxBuffer,i ); //輸出接收到的字節
}
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黑下載附件…………
復制代碼
所有資料51hei提供下載(完整代碼+說明):
Demo_SI4438_Stm32F103.zip
(764.69 KB, 下載次數: 233)
2017-9-19 14:47 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
Paul1960
時間:
2018-3-15 19:01
謝謝樓主!
作者:
chengfgc
時間:
2018-4-17 18:19
學習下,還沒有用過這款發射芯片
作者:
zsk_mcu
時間:
2018-5-25 14:15
正需要,正好學習一下
作者:
星星知我心
時間:
2018-7-16 09:58
謝謝樓主,正是我需要的
作者:
idolpupil
時間:
2018-8-20 15:10
沒分啊,有沒有分享一下
作者:
musich
時間:
2018-8-20 23:53
正在找,不錯, 3q.
作者:
swiky
時間:
2018-11-12 09:49
下載了 正在移植到8位機 到時把代碼也共享出來
作者:
zhouhonghong
時間:
2019-1-21 11:15
發送模式2,一次最長可以發送多少個字節
作者:
fmqwh626
時間:
2019-1-22 10:48
謝謝樓主!
作者:
kevin209
時間:
2019-7-25 22:27
正需要,正好學習一下
作者:
起風了111
時間:
2019-11-16 14:25
有沒有 同志,分享一下?沒分。。
作者:
lllttt
時間:
2021-8-17 13:55
有沒有哪位能送一點分的,簽到攢夠一定記得還,謝謝!
作者:
bo0501
時間:
2023-3-4 17:25
十分感謝,全網都沒找到幾篇關于4438的,如果我最后學會了,一定記你一功(開個玩笑)
作者:
bo0501
時間:
2023-3-4 17:29
如果學會了記你一功
作者:
Lcw97910
時間:
2024-1-24 09:26
發送不需要切換到發送模式嘛?
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1