日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32 驅動無線NRF24L01 的穩(wěn)定修正

          STM32 驅動無線NRF24L01 的穩(wěn)定修正

          作者: 時間:2016-12-03 來源:網(wǎng)絡 收藏
          修正處

          void sent_data(u8* fp,u16 flong)
          {
          u16 i;
          TX_Mode((u8*)&flong); //傳送長度
          while(!tran); //等待完成
          tran=0;
          flong=flong/33+1;
          while(flong)
          {
          for(i=0;i<20000;i++);//這個延時的非常必要 大約2MS 左右
          if(MAX_RT) return;//無應答返回
          TX_Mode(fp); //傳送數(shù)據(jù)
          while(!tran); //等待完成
          tran=0;
          fp+=32;flong--;
          }

          本文引用地址:http://yuyingmama.com.cn/article/201612/325213.htm

          }

          更加合理的延時寫法 ,發(fā)送分兩部分 首先發(fā)送內(nèi)容長度 然后發(fā)送內(nèi)容

          修正處

          if(RX_NU==2&&Timer2==0)

          {
          USART2_Puts("傳輸錯誤 ");
          USART2_Puts("rn");
          RX_NU=1;

          }

          貌似這個if的進入是不可能的 但是由于在中斷里更新了 Timter2 所以產(chǎn)生了不可預計的后果。

          修正處

          if(RX_DR) // 判斷是否接受到數(shù)據(jù)
          {
          if(RX_NU==1)
          {
          CE_L;
          SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH); // 從RX FIFO讀出數(shù)據(jù)
          SPI_RW_Reg(RF_WRITE_REG + STATUS, sta); //清除RX_DS中斷標志
          rectnu=RX_BUF[0];rectnu|=RX_BUF[1]<<8; //接收串長
          onerc=rectnu/33+1; //計算接收次數(shù)
          Timer2=50;RX_NU=2;///*超時時間*/
          PRX_BUF=RX_BUF; //恢復指針
          RX_Mode();return;

          }

          if(RX_NU==2)
          {
          CE_L;
          SPI_Read_Buf(RD_RX_PLOAD, PRX_BUF, TX_PLOAD_WIDTH); // 從RX FIFO讀出數(shù)據(jù)
          SPI_RW_Reg(RF_WRITE_REG + STATUS, sta); // 清除RX_DS中斷標志
          onerc--;PRX_BUF+=32;//接收計數(shù) 接收指針移動
          if(!onerc)
          {
          RX_NU=1;
          RX_BUF[rectnu]=