標(biāo)題: stm32串口接JY901源程序 [打印本頁]

作者: 愛慕春妮    時(shí)間: 2021-8-3 12:00
標(biāo)題: stm32串口接JY901源程序


單片機(jī)源程序如下:
  1. /*
  2. 編寫者:Kevin
  3. 編譯環(huán)境:MDK-Lite  Version: 5.17
  4. 初版時(shí)間: 2016-1-31
  5. 功能:
  6. 用STM32Core平臺(tái)串口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個(gè)寄存器

  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ù),串口每收到一個(gè)數(shù)據(jù),調(diào)用一次這個(gè)函數(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ù)頭不對(duì),則重新開始尋找0x55數(shù)據(jù)頭
  55.         {
  56.                 ucRxCnt=0;
  57.                 return;
  58.         }
  59.         if (ucRxCnt<29) {return;}//數(shù)據(jù)不滿29個(gè),則返回
  60.         else
  61.         {
  62.                 ucRxCnt=0;//清空緩存區(qū),將接收緩沖區(qū)的字符拷貝到數(shù)據(jù)結(jié)構(gòu)體里面,從而實(shí)現(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è)置時(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個(gè)寄存器,也就是加速度 角速度 角度和磁場
  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é),僅供參考,如有錯(cuò)誤請(qǐng)指正:
STM32Core串口JY901Modbus接串口助手.7z (460.02 KB, 下載次數(shù): 16)



作者: 收費(fèi)的規(guī)劃    時(shí)間: 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;
這些是啥意思哇,定義的都是什么東西




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1