WT901C485接線圖.jpg (125.68 KB, 下載次數: 53)
下載附件
2021-8-3 14:55 上傳
WT901C485現象.jpg (94.91 KB, 下載次數: 54)
下載附件
2021-8-3 14:55 上傳
單片機源程序如下:
- /*
- 編寫者:Kevin
- 編譯環境:MDK-Lite Version: 5.17
- 初版時間: 2016-1-31
- 功能:
- 用STM32Core平臺串口2讀取JY901的數據,然后通過串口1打印到串口助手,串口助手波特率要選為9600。
- JY-901的波特率要修改為9600.
- 注意:示例程序輸出的是ASCLL碼,用16進制(HEX)顯示是不能看到準確數據的。
- 硬件接線:
- USB-TTL工具 STM32Core JY901
- VCC ----- VCC -------------------------- VCC
- TX ----- RX1(管腳10)
- RX ----- TX1(管腳9)
- GND ----- GND -------------------------- GND
- TX2(管腳2)RX2(管腳3)需要轉換成485總線電平
- A ---- A
- B ---- B
- ------------------------------------
- */
- #include <string.h>
- #include <stdio.h>
- #include "Main.h"
- #include "stm32f10x_rcc.h"
- #include "stm32f10x_gpio.h"
- #include "UART1.h"
- #include "UART2.h"
- #include "delay.h"
- #include "JY901.h"
- #include "DIO.h"
- struct STime stcTime;
- struct SAcc stcAcc;
- struct SGyro stcGyro;
- struct SAngle stcAngle;
- struct SMag stcMag;
- struct SDStatus stcDStatus;
- struct SPress stcPress;
- struct SLonLat stcLonLat;
- struct SGPSV stcGPSV;
- struct SQ stcQ;
- unsigned char cmd[8] = {0X50,0X03,0X00,0X34,0X00,0X0C,0X09,0X80};//讀取0X34之后的12個寄存器
- void CharToShort(unsigned char cTemp[],short sTemp[],short sShortNum)
- {
- int i;
- for (i = 0;i<3;i++)
- sTemp[i] = (cTemp[2*i+sShortNum]<<8)|(cTemp[2*i+sShortNum+1]&0xff);
- }
- //CopeSerialData為串口2中斷調用函數,串口每收到一個數據,調用一次這個函數。
- void CopeSerial2Data(unsigned char ucData)
- {
- static unsigned char ucRxBuffer[250];
- static unsigned char ucRxCnt = 0;
-
- ucRxBuffer[ucRxCnt++]=ucData; //將收到的數據存入緩沖區中
- if (ucRxBuffer[0]!=0x50) //數據頭不對,則重新開始尋找0x55數據頭
- {
- ucRxCnt=0;
- return;
- }
- if (ucRxCnt<29) {return;}//數據不滿29個,則返回
- else
- {
- ucRxCnt=0;//清空緩存區,將接收緩沖區的字符拷貝到數據結構體里面,從而實現數據的解析。
- CharToShort(ucRxBuffer,stcAcc.a,3);
- CharToShort(ucRxBuffer,stcGyro.w,9);
- CharToShort(ucRxBuffer,stcMag.h,15);
- CharToShort(ucRxBuffer,stcAngle.Angle,21);
- }
- }
- void CopeSerial1Data(unsigned char ucData)
- {
- UART2_Put_Char(ucData);//轉發串口1收到的數據給串口2(JY模塊)
- }
- int main(void)
- {
- char str[100];
-
- SysTick_init(72,10);//設置時鐘頻率
- Initial_UART1(9600);//接PC的串口
- Initial_UART2(9600);//接WT901C485模塊的串口
-
- LED_ON();
- delay_ms(1000);//等等WT901C485模初始化完成
- while(1)
- {
- UART2_Put_String(cmd,8);//發送讀取0X34之后的12個寄存器,也就是加速度 角速度 角度和磁場
- delay_ms(500);
- //輸出加速度
- printf("Acc:%.3f %.3f %.3f\r\n",(float)stcAcc.a[0]/32768*16,(float)stcAcc.a[1]/32768*16,(float)stcAcc.a[2]/32768*16);
- delay_ms(10);
- //輸出角速度
- printf("Gyro:%.3f %.3f %.3f\r\n",(float)stcGyro.w[0]/32768*2000,(float)stcGyro.w[1]/32768*2000,(float)stcGyro.w[2]/32768*2000);
- delay_ms(10);
- //輸出角度
- printf("Angle:%.3f %.3f %.3f\r\n",(float)stcAngle.Angle[0]/32768*180,(float)stcAngle.Angle[1]/32768*180,(float)stcAngle.Angle[2]/32768*180);
- delay_ms(10);
- //輸出磁場
- printf("Mag:%d %d %d\r\n\r\n",stcMag.h[0],stcMag.h[1],stcMag.h[2]);
- delay_ms(10);//等待傳輸完成
- }//主循環
- }
復制代碼
代碼下載,初學,僅供參考,如有錯誤請指正:
STM32Core串口JY901Modbus接串口助手.7z
(460.02 KB, 下載次數: 16)
2021-8-3 15:00 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|