|
stm32把IMU測(cè)量數(shù)據(jù)通過(guò)nrf24l01無(wú)線通信,同時(shí)通過(guò)串口助手觀察通信是否成功。需要兩塊32的單片機(jī)進(jìn)行通信
單片機(jī)源程序如下:
- #include "main.h" //main.h 中含有TX/RX、軟件SPI/硬件SPI選擇配置選項(xiàng)
- #include <string.h>
- #include <stdio.h>
- #include "Main.h"
- #include "stm32f10x_rcc.h"
- #include "stm32f10x_gpio.h"
- #include "drv_UART.h"
- #include "UART2.h"
- #include "drv_delay.h"
- #include "JY901.h"
- #include "celiang.h"
- uint8_t g_UartRxBuffer1[ 100 ] = "zmbyaaaaa";
- const char *g_Ashining = "receive";
- uint8_t g_TxMode = 0, g_UartRxFlag = 0;
- uint8_t g_UartRxBuffer[ 100 ] = { 0 };
- uint8_t g_RF24L01RxBuffer[ 32 ] = { 0 };
- struct SAcc stcAcc; //加速度
- struct SGyro stcGyro; //角速度
- struct SAngle stcAngle; //角度
- //CopeSerialData為串口2中斷調(diào)用函數(shù),串口每收到一個(gè)數(shù)據(jù),調(diào)用一次這個(gè)函數(shù)。
- void CopeSerial2Data(unsigned char ucData)
- {
- static unsigned char ucRxBuffer[250];
- static unsigned char ucRxCnt = 0;
- ucRxBuffer[ucRxCnt++]=ucData; //將收到的數(shù)據(jù)存入緩沖區(qū)中
- if (ucRxBuffer[0]!=0x55) //數(shù)據(jù)頭不對(duì),則重新開(kāi)始尋找0x55數(shù)據(jù)頭
- {
- ucRxCnt=0;
- return;
- }
- if (ucRxCnt<9) {return;}//數(shù)據(jù)不滿11個(gè),則返回
- else
- {
- switch(ucRxBuffer[1])//判斷數(shù)據(jù)是哪種數(shù)據(jù),然后將其拷貝到對(duì)應(yīng)的結(jié)構(gòu)體中,有些數(shù)據(jù)包需要通過(guò)上位機(jī)打開(kāi)對(duì)應(yīng)的輸出后,才能接收到這個(gè)數(shù)據(jù)包的數(shù)據(jù)
- {
- //memcpy為編譯器自帶的內(nèi)存拷貝函數(shù),需引用"string.h",將接收緩沖區(qū)的字符拷貝到數(shù)據(jù)結(jié)構(gòu)體里面,從而實(shí)現(xiàn)數(shù)據(jù)的解析。
- case 0x51: memcpy(&stcAcc,&ucRxBuffer[2],8);break;
- case 0x52: memcpy(&stcGyro,&ucRxBuffer[2],8);break;
- case 0x53: memcpy(&stcAngle,&ucRxBuffer[2],8);break;
-
- }
- ucRxCnt=0;//清空緩存區(qū)
- }
- }
- void CopeSerial1Data(unsigned char ucData)
- {
- UART2_Put_Char(ucData);//轉(zhuǎn)發(fā)串口1收到的數(shù)據(jù)給串口2(JY模塊)
- }
- uint16_t Array_Size(uint8_t * array_pt)
- {
- uint8_t * pt;
- uint16_t size;
- for(pt = array_pt; *pt != '\n'; pt++)
- {
- size++;
- }
- return size;
- }
- int main( void )
- {
-
- uint8_t j = 0;
- //celiang();
- // date();
-
- /******IMU的初始化****/
- char str[100];
-
-
- unsigned char len,i;
- Initial_UART1(9600);//接PC的串口
- Initial_UART2(9600);//接JY-901模塊的串口
- drv_delay_init();
- drv_delay_500Ms(2); //等等JY-91初始化完成
-
-
- /********無(wú)線的初始化 *******/
-
- //串口初始化
-
- drv_uart_init( 9600 );
-
-
- //延時(shí)初始化
-
- drv_delay_init( );
- //
- drv_button_init( );
-
-
- //LED初始化
- drv_led_init( );
- //SPI初始化
- drv_spi_init( );
-
- //RF24L01引腳初始化
- NRF24L01_Gpio_Init( );
-
- //檢測(cè)nRF24L01
- NRF24L01_check( );
- RF24L01_Init( );
- led_red_off( );
- led_green_off( );
- for( j = 0; j< 6; j++ )
- {
- led_red_flashing( );
- led_green_flashing( );
- drv_delay_500Ms( 1 );
- }
- /*******************循環(huán)*****/
-
- while(1)
- {
-
-
- drv_delay_500Ms(2);
- drv_delay_ms(10);
- //角加速度
-
- //輸出加速度
- 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);
- UART1_Put_String(str);
- // dengdai (str);
-
- // j=Array_Size(str)+3;
-
-
- NRF24L01_TxPacket(str ,28);
-
- drv_delay_ms(10);
- //輸出角速度
- 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);
- UART1_Put_String(str);
- drv_delay_ms(10);;
- //輸出角度
- 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);
- UART1_Put_String(str);
- drv_delay_ms(10);
- drv_delay_ms(10);//等待傳輸完成
- led_red_flashing( );
-
-
- //按鍵初始化
- //drv_button_init( );
-
- // RF24L01_Set_Mode( MODE_TX ); //發(fā)送模式
-
- //模式切換
- // if( BUTOTN_PRESS_DOWN == drv_button_check( ))
- // {
- // g_TxMode = 1 - g_TxMode; //模式會(huì)在 TX_MODE_1( 0 ),TX_MODE_2( 1 )之間切換
- //
- // //狀態(tài)顯示清零
- // led_green_off( );
- // led_red_off( );
- //
- // if( TX_MODE_1 == g_TxMode )
- // {
- // for( j = 0; j < 6; j++ )
- // {
- // led_red_flashing( ); //固定發(fā)送模式,紅燈閃爍3次
- // drv_delay_500Ms( 1 );
- // }
- // }
- // else
- // {
- // for( j = 0; j < 6; j++ )
- // {
- // led_green_flashing( ); //串口發(fā)送模式,綠燈閃爍3次
- // drv_delay_500Ms( 1 );
- // }
- // }
- // }
- //
- // //發(fā)送
- // if( TX_MODE_1 == g_TxMode )
- // {
- // NRF24L01_TxPacket( (uint8_t *)g_Ashining,8); //模式1發(fā)送固定字符,1S一包
- // drv_delay_500Ms( 1 );
- // drv_delay_500Ms( 1 );
- // led_red_flashing( );
- // }
- // else
- // {
- // //查詢(xún)串口數(shù)據(jù)
- //
- // j = drv_uart_rx_bytes( g_UartRxBuffer);
- //
- // if( 0 != j)
- // {
- // NRF24L01_TxPacket( g_UartRxBuffer, j );
- // led_green_flashing( );
- // }
- // }
- //
- //
- }
-
-
-
- }
復(fù)制代碼
以上代碼51hei提供下載:
發(fā)送接收.7z
(120.58 KB, 下載次數(shù): 15)
2021-3-16 14:41 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|