久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2727|回復: 0
打印 上一主題 下一主題
收起左側

stm32把IMU測量數據通過nrf24l01無線通信 源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:828888 發表于 2021-3-16 09:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
stm32把IMU測量數據通過nrf24l01無線通信,同時通過串口助手觀察通信是否成功。需要兩塊32的單片機進行通信

單片機源程序如下:

  1. #include "main.h"                //main.h 中含有TX/RX、軟件SPI/硬件SPI選擇配置選項
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include "Main.h"
  5. #include "stm32f10x_rcc.h"
  6. #include "stm32f10x_gpio.h"
  7. #include "drv_UART.h"
  8. #include "UART2.h"
  9. #include "drv_delay.h"
  10. #include "JY901.h"
  11. #include "celiang.h"


  12. uint8_t g_UartRxBuffer1[ 100 ] = "zmbyaaaaa";
  13. const char *g_Ashining = "receive";
  14. uint8_t g_TxMode = 0, g_UartRxFlag = 0;
  15. uint8_t g_UartRxBuffer[ 100 ] = { 0 };
  16. uint8_t g_RF24L01RxBuffer[ 32 ] = { 0 };

  17. struct SAcc                 stcAcc;                                        //加速度
  18. struct SGyro                 stcGyro;                                //角速度
  19. struct SAngle         stcAngle;    //角度


  20. //CopeSerialData為串口2中斷調用函數,串口每收到一個數據,調用一次這個函數。
  21. void CopeSerial2Data(unsigned char ucData)
  22. {
  23.         static unsigned char ucRxBuffer[250];
  24.         static unsigned char ucRxCnt = 0;        

  25.         ucRxBuffer[ucRxCnt++]=ucData;        //將收到的數據存入緩沖區中
  26.         if (ucRxBuffer[0]!=0x55) //數據頭不對,則重新開始尋找0x55數據頭
  27.         {
  28.                 ucRxCnt=0;
  29.                 return;
  30.         }
  31.         if (ucRxCnt<9) {return;}//數據不滿11個,則返回
  32.         else
  33.         {
  34.                 switch(ucRxBuffer[1])//判斷數據是哪種數據,然后將其拷貝到對應的結構體中,有些數據包需要通過上位機打開對應的輸出后,才能接收到這個數據包的數據
  35.                 {
  36.         //memcpy為編譯器自帶的內存拷貝函數,需引用"string.h",將接收緩沖區的字符拷貝到數據結構體里面,從而實現數據的解析。
  37.                         case 0x51:        memcpy(&stcAcc,&ucRxBuffer[2],8);break;
  38.                         case 0x52:        memcpy(&stcGyro,&ucRxBuffer[2],8);break;
  39.             case 0x53:        memcpy(&stcAngle,&ucRxBuffer[2],8);break;
  40.                
  41.                 }
  42.                 ucRxCnt=0;//清空緩存區
  43.         }
  44. }


  45. void CopeSerial1Data(unsigned char ucData)
  46. {        
  47.         UART2_Put_Char(ucData);//轉發串口1收到的數據給串口2(JY模塊)
  48. }



  49. uint16_t Array_Size(uint8_t  * array_pt)
  50. {
  51.    uint8_t * pt;
  52.         uint16_t size;
  53.         for(pt = array_pt; *pt != '\n'; pt++)
  54.         {
  55.                 size++;        
  56.         }
  57.         return size;
  58. }

  59. int main( void )
  60. {        

  61.                         uint8_t j = 0;
  62.         //celiang();
  63.         //                date();
  64.                
  65.                 /******IMU的初始化****/

  66.                 char str[100];
  67.         
  68.         
  69.         unsigned char len,i;

  70.         Initial_UART1(9600);//接PC的串口
  71.         Initial_UART2(9600);//接JY-901模塊的串口        
  72.         drv_delay_init();
  73.         drv_delay_500Ms(2);  //等等JY-91初始化完成
  74.                
  75.                
  76.                 /********無線的初始化 *******/
  77.         
  78.                 //串口初始化  
  79.                
  80.         drv_uart_init( 9600 );
  81.                
  82.         
  83.         //延時初始化
  84.         
  85.         drv_delay_init( );
  86. //        
  87.                 drv_button_init( );
  88.         
  89.         
  90.         //LED初始化
  91.         drv_led_init( );

  92.         //SPI初始化
  93.         drv_spi_init( );
  94.         
  95.         //RF24L01引腳初始化
  96.         NRF24L01_Gpio_Init( );
  97.         
  98.         //檢測nRF24L01
  99.         NRF24L01_check( );                        
  100.         RF24L01_Init( );

  101.         led_red_off( );
  102.         led_green_off( );

  103.                 for( j = 0; j< 6; j++ )
  104.         {
  105.                 led_red_flashing( );
  106.                 led_green_flashing( );
  107.                 drv_delay_500Ms( 1 );
  108.         }
  109.         /*******************循環*****/        
  110.                
  111.         while(1)
  112.         {                        
  113.                
  114.                
  115.                         drv_delay_500Ms(2);
  116.                 drv_delay_ms(10);
  117.                 //角加速度
  118.         
  119.                 //輸出加速度
  120.                 sprintf(str,"Acc:%.3f %.3f %.3f\r\n",(float)stcAcc.a[0]/32768*16,(float)stcAcc.a[1]/32768*16,(float)stcAcc.a[2]/32768*16);
  121.                         UART1_Put_String(str);
  122.         //        dengdai (str);
  123.          
  124.         //        j=Array_Size(str)+3;
  125.                
  126.                
  127.                 NRF24L01_TxPacket(str ,28);
  128.                
  129.                         drv_delay_ms(10);
  130.                 //輸出角速度
  131.                 sprintf(str,"Gyro:%.3f %.3f %.3f\r\n",(float)stcGyro.w[0]/32768*2000,(float)stcGyro.w[1]/32768*2000,(float)stcGyro.w[2]/32768*2000);
  132.                         UART1_Put_String(str);
  133.                 drv_delay_ms(10);;
  134.                 //輸出角度
  135.                 sprintf(str,"Angle:%.3f %.3f %.3f\r\n",(float)stcAngle.Angle[0]/32768*180,(float)stcAngle.Angle[1]/32768*180,(float)stcAngle.Angle[2]/32768*180);
  136.                         UART1_Put_String(str);
  137.         drv_delay_ms(10);
  138.         drv_delay_ms(10);//等待傳輸完成
  139.                 led_red_flashing( );
  140.                
  141.         
  142.         //按鍵初始化
  143.         //drv_button_init( );
  144.         
  145. //        RF24L01_Set_Mode( MODE_TX );                //發送模式
  146.         
  147. //模式切換
  148. //                if( BUTOTN_PRESS_DOWN == drv_button_check( ))
  149. //                {
  150. //                        g_TxMode = 1 - g_TxMode;                //模式會在 TX_MODE_1( 0 ),TX_MODE_2( 1 )之間切換
  151. //                        
  152. //                        //狀態顯示清零
  153. //                        led_green_off( );
  154. //                        led_red_off( );
  155. //                        
  156. //                        if( TX_MODE_1 == g_TxMode )
  157. //                        {
  158. //                                for( j = 0; j < 6; j++ )               
  159. //                                {
  160. //                                        led_red_flashing( );        //固定發送模式,紅燈閃爍3次
  161. //                                        drv_delay_500Ms( 1 );               
  162. //                                }
  163. //                        }
  164. //                        else
  165. //                        {
  166. //                                for( j = 0; j < 6; j++ )
  167. //                                {
  168. //                                        led_green_flashing( );        //串口發送模式,綠燈閃爍3次
  169. //                                        drv_delay_500Ms( 1 );
  170. //                                }
  171. //                        }
  172. //                }
  173. //               
  174. //                //發送
  175. //                if( TX_MODE_1 == g_TxMode )
  176. //                {
  177. //                        NRF24L01_TxPacket( (uint8_t *)g_Ashining,8);                //模式1發送固定字符,1S一包
  178. //                        drv_delay_500Ms( 1 );        
  179. //                        drv_delay_500Ms( 1 );        
  180. //                        led_red_flashing( );                        
  181. //                }
  182. //                else
  183. //                {        
  184. //                        //查詢串口數據
  185. //               
  186. //                        j = drv_uart_rx_bytes( g_UartRxBuffer);
  187. //                        
  188. //                        if( 0 != j)
  189. //                        {
  190. //                                NRF24L01_TxPacket( g_UartRxBuffer, j );
  191. //                                led_green_flashing( );
  192. //                  }
  193. //                }
  194. //        
  195. //               
  196.         }
  197.         
  198.         
  199.         
  200. }
復制代碼

以上代碼51hei提供下載:
發送接收.7z (120.58 KB, 下載次數: 15)


評分

參與人數 1黑幣 +10 收起 理由
admin + 10 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费在线播放视频 | 中文字幕日韩一区 | 一本色道精品久久一区二区三区 | 中文字幕一区在线观看视频 | 精品亚洲一区二区 | 91久久精品日日躁夜夜躁国产 | 免费天天干 | 婷婷久久综合 | 日韩免费电影 | 成人av免费| 97伦理电影网 | 一区欧美| 国产精品一区二区av | 91精品国产91久久久久久最新 | 久久久久久天堂 | 亚洲精品久久久蜜桃网站 | 久久成人免费 | 一区欧美| 午夜久久久 | 精品国产一区二区三区成人影院 | 国产91在线精品 | 国产精品99999999 | 亚洲国产精品久久久久秋霞不卡 | 91精品久久久久久久久久入口 | 91一区二区三区在线观看 | 激情综合五月 | 区一区二区三在线观看 | 亚洲 成人 在线 | 欧美一区二区三区在线观看 | 中文字幕亚洲视频 | www.亚洲精品 | 国产精品福利网站 | 国产福利免费视频 | 中文字幕av网站 | 日本黄色的视频 | 久久se精品一区精品二区 | 国产精品成人国产乱一区 | 婷婷色国产偷v国产偷v小说 | 欧美日韩电影一区二区 | 午夜黄色 | 国产成人免费视频网站视频社区 |