找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3528|回復: 0
打印 上一主題 下一主題
收起左側(cè)

SI4438 Directional硬件SPI STM8S105單片機IAR代碼分享

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:191308 發(fā)表于 2018-11-23 19:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式


單片機源程序如下:
  1. #include "stm8s.h"
  2. #include "data_base.h"
  3. #include "radio.h"
  4. #include "si446x_cmd.h"
  5. #include "gpio.h"
  6. #include "delay.h"
  7. #include "user.h"

  8.    
  9. uint8_t bRadio_Process();

  10. U8   bMain_IT_Status;
  11. uint8_t RFstate;


  12. extern uint8_t tx_data[];
  13. extern  volatile uint16_t  tick_timer;

  14. #define EnableMaster   0

  15. /*
  16. Demo程序流程:Master   EnableMaster=1,發(fā)送tx_data數(shù)據(jù)包后等待接收端ack數(shù)據(jù)包,若500ms后未接收到ack數(shù)據(jù)包超時處理,若接收到ack數(shù)據(jù)包LED閃爍指示
  17.               Slaver   EnableMaster=0,接收到tx_data數(shù)據(jù)包后發(fā)送ack數(shù)據(jù)包,發(fā)送完成后LED燈閃爍指示

  18. */

  19. void main(void)
  20. {
  21.   vInitializeHW();// Initialize the Hardware and Radio

  22. #if   EnableMaster
  23.    RFstate=RFLR_STATE_TX_INIT;
  24. #else   
  25.    RFstate=RFLR_STATE_RX_INIT;
  26. #endif
  27. while(1)
  28. {
  29.     bRadio_Process();
  30. }
  31. }


  32. uint8_t bRadio_Process()
  33. {
  34. switch(RFstate)
  35. {
  36.    case RFLR_STATE_RX_INIT://接收初始化
  37.    
  38.    GPIO_WriteLow(SI4463_TX_PORT,SI4463_TX_IO);
  39.    GPIO_WriteHigh(SI4463_RX_PORT,SI4463_RX_IO);//開關切換到接收通路
  40.    vRadio_StartRX(pRadioConfiguration->Radio_ChannelNumber, 0);
  41.    tick_timer=0;
  42.    RFstate=RFLR_STATE_RX_RUNNING;
  43.    break;
  44.    
  45.    case RFLR_STATE_RX_RUNNING://接收處理
  46.      bMain_IT_Status = bRadio_Check_Tx_RX();
  47.      if(bMain_IT_Status==SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_RX_PEND_BIT)
  48.      {
  49.        if(EnableMaster)
  50.        {
  51.         RFstate=RFLR_STATE_RX_ACK_DONE;
  52.        }
  53.        else
  54.        {
  55.          RFstate=RFLR_STATE_RX_DONE;
  56.        }
  57.      }
  58.      if(tick_timer>500)
  59.      {
  60.       RFstate=RFLR_STATE_RX_TIMEOUT;
  61.      }
  62.      
  63.    break;
  64.    
  65.    case RFLR_STATE_TX_INIT://發(fā)射客戶數(shù)據(jù)包初始化
  66.      GPIO_WriteHigh(SI4463_TX_PORT,SI4463_TX_IO);
  67.      GPIO_WriteLow(SI4463_RX_PORT,SI4463_RX_IO);//開關切換到發(fā)送通路
  68.      gSampleCode_SendVariablePacket();//打包發(fā)送客戶數(shù)據(jù)包
  69.      tick_timer=0;
  70.      RFstate=RFLR_STATE_TX_RUNNING;
  71.    break;
  72.    
  73.    
  74.    case RFLR_STATE_TX_ACK_INIT://發(fā)射ack數(shù)據(jù)包初始化
  75.      GPIO_WriteHigh(SI4463_TX_PORT,SI4463_TX_IO);
  76.      GPIO_WriteLow(SI4463_RX_PORT,SI4463_RX_IO);//開關切換到發(fā)送通路
  77.      vSampleCode_SendAcknowledge();//打包發(fā)送ACK數(shù)據(jù)包
  78.      tick_timer=0;
  79.      RFstate=RFLR_STATE_TX_RUNNING;
  80.    break;
  81.    
  82.    
  83.    case RFLR_STATE_TX_RUNNING://發(fā)射處理
  84.      bMain_IT_Status = bRadio_Check_Tx_RX();
  85.      if(bMain_IT_Status==SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_SENT_PEND_BIT)
  86.      {
  87.        if(EnableMaster)
  88.        {
  89.         RFstate=RFLR_STATE_TX_DONE;
  90.        }
  91.        else
  92.        {
  93.         RFstate=RFLR_STATE_TX_ACK_DONE;
  94.        }
  95.      }
  96.      if(tick_timer>500)
  97.      {
  98.       RFstate=RFLR_STATE_TX_TIMEOUT;
  99.      }
  100.    break;
  101.      
  102.    
  103.    case RFLR_STATE_RX_DONE://接收客戶數(shù)據(jù)包完成
  104.      
  105.        if(gSampleCode_StringCompare(customRadioPacket, tx_data,20)==TRUE)
  106.        {
  107.         RFstate=RFLR_STATE_TX_ACK_INIT;//收到正確數(shù)據(jù)包后發(fā)射ack數(shù)據(jù)包
  108.        }
  109.        else
  110.        {
  111.          RFstate=RFLR_STATE_RX_INIT;
  112.        }
  113.    break;
  114.    
  115.    case RFLR_STATE_RX_ACK_DONE://接收ack數(shù)據(jù)包完成
  116.       
  117.        if(gSampleCode_StringCompare(customRadioPacket, "ACK",3)==TRUE)
  118.        {
  119.           GPIO_WriteLow(RF_LED1_PORT,RF_LED1_IO);//LED指示燈閃爍
  120.           m928_delay(20);
  121.           GPIO_WriteHigh(RF_LED1_PORT,RF_LED1_IO);
  122.         }
  123.         
  124.         m928_delay(100);
  125.         RFstate=RFLR_STATE_TX_INIT;
  126.    break;
  127.       
  128.    case RFLR_STATE_TX_DONE://發(fā)射完客戶數(shù)據(jù)包
  129.      
  130.       RFstate=RFLR_STATE_RX_INIT;
  131.    break;
  132.    
  133.    case RFLR_STATE_TX_ACK_DONE://發(fā)射完ack數(shù)據(jù)包
  134.      
  135.         GPIO_WriteLow(RF_LED1_PORT,RF_LED1_IO);//LED燈閃爍
  136.         m928_delay(20);
  137.         GPIO_WriteHigh(RF_LED1_PORT,RF_LED1_IO);
  138.         
  139.         RFstate=RFLR_STATE_RX_INIT;
  140.       
  141.    break;
  142.    
  143.    case RFLR_STATE_TX_TIMEOUT://發(fā)射超時
  144.      
  145.        if(EnableMaster)
  146.        {
  147.         RFstate=RFLR_STATE_TX_INIT;
  148.        }
  149.        else
  150.        {
  151.         RFstate=RFLR_STATE_RX_INIT;
  152.        }
  153.    break;
  154.      
  155.    case RFLR_STATE_RX_TIMEOUT://接收超時
  156.      
  157.        if(EnableMaster)
  158.        {
  159.         RFstate=RFLR_STATE_TX_INIT;
  160.        }
  161.        else
  162.        {
  163.         RFstate=RFLR_STATE_RX_INIT;
  164.        }
  165.    break;
  166.    
  167.    default:break;
  168. }
  169. return RFstate;
  170. }
復制代碼

所有資料51hei提供下載:
SI4438 Directional 硬件spi STM8S105 IAR.rar (10.74 MB, 下載次數(shù): 34)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表