找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2826|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

stm32串口接JY901源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:882006 發(fā)表于 2021-8-3 12:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式


單片機(jī)源程序如下:
  1. /*
  2. 編寫者:Kevin
  3. 編譯環(huán)境:MDK-Lite  Version: 5.17
  4. 初版時間: 2016-1-31
  5. 功能:
  6. 用STM32Core平臺串口2讀取JY901的數(shù)據(jù),然后通過串口1打印到串口助手,串口助手波特率要選為9600。
  7. JY-901的波特率要修改為9600.
  8. 注意:示例程序輸出的是ASCLL碼,用16進(jìn)制(HEX)顯示是不能看到準(zhǔn)確數(shù)據(jù)的。
  9. 硬件接線:
  10. USB-TTL工具                 STM32Core                                                                                       JY901
  11. VCC          -----           VCC        --------------------------   VCC
  12. TX           -----           RX1(管腳10)                                                                            
  13. RX           -----           TX1(管腳9)                                                                       
  14. GND          -----           GND        --------------------------   GND
  15.               TX2(管腳2)RX2(管腳3)需要轉(zhuǎn)換成485總線電平
  16.                                                                                                                                                                                                                                                 A    ----  A
  17.                                                                                                                                                                                                                                                 B    ----  B
  18. ------------------------------------
  19. */
  20. #include <string.h>
  21. #include <stdio.h>
  22. #include "Main.h"
  23. #include "stm32f10x_rcc.h"
  24. #include "stm32f10x_gpio.h"
  25. #include "UART1.h"
  26. #include "UART2.h"
  27. #include "delay.h"
  28. #include "JY901.h"
  29. #include "DIO.h"

  30. struct STime                stcTime;
  31. struct SAcc                 stcAcc;
  32. struct SGyro                 stcGyro;
  33. struct SAngle         stcAngle;
  34. struct SMag                 stcMag;
  35. struct SDStatus stcDStatus;
  36. struct SPress         stcPress;
  37. struct SLonLat         stcLonLat;
  38. struct SGPSV                 stcGPSV;
  39. struct SQ       stcQ;

  40. unsigned char cmd[8] = {0X50,0X03,0X00,0X34,0X00,0X0C,0X09,0X80};//讀取0X34之后的12個寄存器

  41. void CharToShort(unsigned char cTemp[],short sTemp[],short sShortNum)
  42. {
  43.         int i;
  44.         for (i = 0;i<3;i++)
  45.                 sTemp[i] = (cTemp[2*i+sShortNum]<<8)|(cTemp[2*i+sShortNum+1]&0xff);
  46. }

  47. //CopeSerialData為串口2中斷調(diào)用函數(shù),串口每收到一個數(shù)據(jù),調(diào)用一次這個函數(shù)。
  48. void CopeSerial2Data(unsigned char ucData)
  49. {
  50.         static unsigned char ucRxBuffer[250];
  51.         static unsigned char ucRxCnt = 0;       
  52.        

  53.         ucRxBuffer[ucRxCnt++]=ucData;        //將收到的數(shù)據(jù)存入緩沖區(qū)中
  54.         if (ucRxBuffer[0]!=0x50) //數(shù)據(jù)頭不對,則重新開始尋找0x55數(shù)據(jù)頭
  55.         {
  56.                 ucRxCnt=0;
  57.                 return;
  58.         }
  59.         if (ucRxCnt<29) {return;}//數(shù)據(jù)不滿29個,則返回
  60.         else
  61.         {
  62.                 ucRxCnt=0;//清空緩存區(qū),將接收緩沖區(qū)的字符拷貝到數(shù)據(jù)結(jié)構(gòu)體里面,從而實現(xiàn)數(shù)據(jù)的解析。
  63.                 CharToShort(ucRxBuffer,stcAcc.a,3);
  64.                 CharToShort(ucRxBuffer,stcGyro.w,9);
  65.                 CharToShort(ucRxBuffer,stcMag.h,15);
  66.                 CharToShort(ucRxBuffer,stcAngle.Angle,21);               
  67.         }
  68. }

  69. void CopeSerial1Data(unsigned char ucData)
  70. {       
  71.         UART2_Put_Char(ucData);//轉(zhuǎn)發(fā)串口1收到的數(shù)據(jù)給串口2(JY模塊)
  72. }


  73. int main(void)
  74. {  
  75.         char str[100];
  76.                
  77.         SysTick_init(72,10);//設(shè)置時鐘頻率
  78.         Initial_UART1(9600);//接PC的串口
  79.         Initial_UART2(9600);//接WT901C485模塊的串口       
  80.        
  81.         LED_ON();
  82.         delay_ms(1000);//等等WT901C485模初始化完成
  83.         while(1)
  84.         {                       
  85.                 UART2_Put_String(cmd,8);//發(fā)送讀取0X34之后的12個寄存器,也就是加速度 角速度 角度和磁場
  86.                         delay_ms(500);
  87.                 //輸出加速度
  88.                 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);
  89.                         delay_ms(10);
  90.                 //輸出角速度
  91.                 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);
  92.                         delay_ms(10);
  93.                 //輸出角度
  94.                 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);
  95.                         delay_ms(10);
  96.                 //輸出磁場
  97.                 printf("Mag:%d %d %d\r\n\r\n",stcMag.h[0],stcMag.h[1],stcMag.h[2]);       
  98.                     delay_ms(10);//等待傳輸完成
  99.         }//主循環(huán)
  100. }
復(fù)制代碼

代碼下載,初學(xué),僅供參考,如有錯誤請指正:
STM32Core串口JY901Modbus接串口助手.7z (460.02 KB, 下載次數(shù): 16)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:1001637 發(fā)表于 2022-1-13 10:29 | 只看該作者
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;
這些是啥意思哇,定義的都是什么東西
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表