|
單片機(jī)源程序如下:
- #include "stm8s.h"
- #include "data_base.h"
- #include "radio.h"
- #include "si446x_cmd.h"
- #include "gpio.h"
- #include "delay.h"
- #include "user.h"
-
- uint8_t bRadio_Process();
-
- U8 bMain_IT_Status;
- uint8_t RFstate;
- extern uint8_t tx_data[];
- extern volatile uint16_t tick_timer;
- #define EnableMaster 0
- /*
- Demo程序流程:Master EnableMaster=1,發(fā)送tx_data數(shù)據(jù)包后等待接收端ack數(shù)據(jù)包,若500ms后未接收到ack數(shù)據(jù)包超時(shí)處理,若接收到ack數(shù)據(jù)包LED閃爍指示
- Slaver EnableMaster=0,接收到tx_data數(shù)據(jù)包后發(fā)送ack數(shù)據(jù)包,發(fā)送完成后LED燈閃爍指示
- */
- void main(void)
- {
- vInitializeHW();// Initialize the Hardware and Radio
- #if EnableMaster
- RFstate=RFLR_STATE_TX_INIT;
- #else
- RFstate=RFLR_STATE_RX_INIT;
- #endif
- while(1)
- {
- bRadio_Process();
- }
- }
- uint8_t bRadio_Process()
- {
- switch(RFstate)
- {
- case RFLR_STATE_RX_INIT://接收初始化
-
- GPIO_WriteLow(SI4463_TX_PORT,SI4463_TX_IO);
- GPIO_WriteHigh(SI4463_RX_PORT,SI4463_RX_IO);//開關(guān)切換到接收通路
- vRadio_StartRX(pRadioConfiguration->Radio_ChannelNumber, 0);
- tick_timer=0;
- RFstate=RFLR_STATE_RX_RUNNING;
- break;
-
- case RFLR_STATE_RX_RUNNING://接收處理
- bMain_IT_Status = bRadio_Check_Tx_RX();
- if(bMain_IT_Status==SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_RX_PEND_BIT)
- {
- if(EnableMaster)
- {
- RFstate=RFLR_STATE_RX_ACK_DONE;
- }
- else
- {
- RFstate=RFLR_STATE_RX_DONE;
- }
- }
- if(tick_timer>500)
- {
- RFstate=RFLR_STATE_RX_TIMEOUT;
- }
-
- break;
-
- case RFLR_STATE_TX_INIT://發(fā)射客戶數(shù)據(jù)包初始化
- GPIO_WriteHigh(SI4463_TX_PORT,SI4463_TX_IO);
- GPIO_WriteLow(SI4463_RX_PORT,SI4463_RX_IO);//開關(guān)切換到發(fā)送通路
- gSampleCode_SendVariablePacket();//打包發(fā)送客戶數(shù)據(jù)包
- tick_timer=0;
- RFstate=RFLR_STATE_TX_RUNNING;
- break;
-
-
- case RFLR_STATE_TX_ACK_INIT://發(fā)射ack數(shù)據(jù)包初始化
- GPIO_WriteHigh(SI4463_TX_PORT,SI4463_TX_IO);
- GPIO_WriteLow(SI4463_RX_PORT,SI4463_RX_IO);//開關(guān)切換到發(fā)送通路
- vSampleCode_SendAcknowledge();//打包發(fā)送ACK數(shù)據(jù)包
- tick_timer=0;
- RFstate=RFLR_STATE_TX_RUNNING;
- break;
-
-
- case RFLR_STATE_TX_RUNNING://發(fā)射處理
- bMain_IT_Status = bRadio_Check_Tx_RX();
- if(bMain_IT_Status==SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_SENT_PEND_BIT)
- {
- if(EnableMaster)
- {
- RFstate=RFLR_STATE_TX_DONE;
- }
- else
- {
- RFstate=RFLR_STATE_TX_ACK_DONE;
- }
- }
- if(tick_timer>500)
- {
- RFstate=RFLR_STATE_TX_TIMEOUT;
- }
- break;
-
-
- case RFLR_STATE_RX_DONE://接收客戶數(shù)據(jù)包完成
-
- if(gSampleCode_StringCompare(customRadioPacket, tx_data,20)==TRUE)
- {
- RFstate=RFLR_STATE_TX_ACK_INIT;//收到正確數(shù)據(jù)包后發(fā)射ack數(shù)據(jù)包
- }
- else
- {
- RFstate=RFLR_STATE_RX_INIT;
- }
- break;
-
- case RFLR_STATE_RX_ACK_DONE://接收ack數(shù)據(jù)包完成
-
- if(gSampleCode_StringCompare(customRadioPacket, "ACK",3)==TRUE)
- {
- GPIO_WriteLow(RF_LED1_PORT,RF_LED1_IO);//LED指示燈閃爍
- m928_delay(20);
- GPIO_WriteHigh(RF_LED1_PORT,RF_LED1_IO);
- }
-
- m928_delay(100);
- RFstate=RFLR_STATE_TX_INIT;
- break;
-
- case RFLR_STATE_TX_DONE://發(fā)射完客戶數(shù)據(jù)包
-
- RFstate=RFLR_STATE_RX_INIT;
- break;
-
- case RFLR_STATE_TX_ACK_DONE://發(fā)射完ack數(shù)據(jù)包
-
- GPIO_WriteLow(RF_LED1_PORT,RF_LED1_IO);//LED燈閃爍
- m928_delay(20);
- GPIO_WriteHigh(RF_LED1_PORT,RF_LED1_IO);
-
- RFstate=RFLR_STATE_RX_INIT;
-
- break;
-
- case RFLR_STATE_TX_TIMEOUT://發(fā)射超時(shí)
-
- if(EnableMaster)
- {
- RFstate=RFLR_STATE_TX_INIT;
- }
- else
- {
- RFstate=RFLR_STATE_RX_INIT;
- }
- break;
-
- case RFLR_STATE_RX_TIMEOUT://接收超時(shí)
-
- if(EnableMaster)
- {
- RFstate=RFLR_STATE_TX_INIT;
- }
- else
- {
- RFstate=RFLR_STATE_RX_INIT;
- }
- break;
-
- default:break;
- }
- return RFstate;
- }
復(fù)制代碼
所有資料51hei提供下載:
SI4438 Directional 硬件spi STM8S105 IAR.rar
(10.74 MB, 下載次數(shù): 34)
2018-11-24 02:06 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|