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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32+rs485-modbus通訊實驗源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:515526 發(fā)表于 2019-5-21 16:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本實驗完成了stm32對uart4串口配置,使用rs485通訊,完成和上位機數(shù)據(jù)交換,使用modbus協(xié)議

單片機源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "lcd.h"
  6. #include "usart.h"         
  7. #include "rs485.h"

  8. //Modbus寄存器和單片機寄存器的映射關(guān)系
  9. vu32 *Modbus_InputIO[100];//輸入開關(guān)量寄存器指針(這里使用的是位操作)
  10. vu32 *Modbus_OutputIO[100];//輸出開關(guān)量寄存器指針(這里使用的是位操作)
  11. /***********************************************
  12. 函數(shù)功能:配置io輸出口
  13. *************************************************/
  14. void  DO_Init(void)
  15. {        
  16.         GPIO_InitTypeDef GPIO_InitStructure;

  17.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOC, ENABLE );          //使能GPIOE
  18.                      
  19.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;  //PE8-PE15 作為推挽輸出引腳  
  20.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                            //推挽輸出
  21.          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  22.         GPIO_Init(GPIOE, &GPIO_InitStructure);                      //初始化GPIOE
  23.   GPIO_ResetBits(GPIOE,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
  24.        
  25.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_13;                                 //
  26.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  27. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  28. GPIO_Init(GPIOC, &GPIO_InitStructure);                                         //根據(jù)設(shè)定參數(shù)初始化GPIOD.5
  29. GPIO_ResetBits(GPIOC,GPIO_Pin_8|GPIO_Pin_13);                                                 //PC.10 輸出高
  30. }

  31. //CRC校驗 自己后面添加的

  32. const u8 auchCRCHi[] = {
  33. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
  34. 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
  35. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
  36. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
  37. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
  38. 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
  39. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
  40. 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
  41. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
  42. 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
  43. 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
  44. 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
  45. 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40} ;


  46. const u8 auchCRCLo[] = {
  47. 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
  48. 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
  49. 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
  50. 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
  51. 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
  52. 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
  53. 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
  54. 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
  55. 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
  56. 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
  57. 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
  58. 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
  59. 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,0x43, 0x83, 0x41, 0x81, 0x80, 0x40} ;


  60. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  61. /**************************************************************
  62. 函數(shù)功能:生成CRC校驗碼
  63. **************************************************************/
  64. u16 CRC_Compute(u8 *puchMsg, u16 usDataLen)
  65. {
  66.         u8 uchCRCHi = 0xFF ;
  67.         u8 uchCRCLo = 0xFF ;
  68.         u32 uIndex ;
  69.         while (usDataLen--)
  70.         {
  71.                 uIndex = uchCRCHi ^ *puchMsg++ ;
  72.                 uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ;
  73.                 uchCRCLo = auchCRCLo[uIndex] ;
  74.         }
  75.         return ((uchCRCHi<< 8)  | (uchCRCLo)) ;
  76. }


  77. u16 RegNum;
  78. u8 RS485_TX_BUFF[10];//發(fā)送緩沖區(qū)
  79. u8 RS485_RX_BUFF[10];//接收緩沖區(qū)
  80. u16 calCRC;         
  81. u16 startRegAddr;    //寄存器起始地址
  82. u16 recCRC;
  83.         void Modbus_05_Solve(void)
  84. {
  85.         if(startRegAddr<100)
  86.         {
  87.                 if((RS485_RX_BUFF[4]==0xFF)||(RS485_RX_BUFF[5]==0xFF)) *Modbus_OutputIO[startRegAddr]=0x01;
  88.                 else *Modbus_OutputIO[startRegAddr]=0x00;

  89.                 RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
  90.                 RS485_TX_BUFF[1]=RS485_RX_BUFF[1];
  91.                 RS485_TX_BUFF[2]=RS485_RX_BUFF[2];
  92.                 RS485_TX_BUFF[3]=RS485_RX_BUFF[3];
  93.                 RS485_TX_BUFF[4]=RS485_RX_BUFF[4];
  94.                 RS485_TX_BUFF[5]=RS485_RX_BUFF[5];

  95.                 calCRC=CRC_Compute(RS485_TX_BUFF,6);
  96.                 RS485_TX_BUFF[6]=calCRC&0xFF;
  97.                 RS485_TX_BUFF[7]=(calCRC>>8)&0xFF;
  98.                 RS485_Send_Data(RS485_TX_BUFF,8);
  99.         }
  100.         else
  101.         {
  102.                 RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
  103.                 RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80;
  104.                 RS485_TX_BUFF[2]=0x02;
  105.                 RS485_Send_Data(RS485_TX_BUFF,3);
  106.         }
  107. }

  108. //Modbus功能碼15處理函數(shù)
  109. void Modbus_15_Solve(void)
  110. {
  111.          DO_Init();
  112.         RegNum=(((u16)RS485_RX_BUFF[4])<<8)|RS485_RX_BUFF[5];//獲取寄存器數(shù)量
  113.         if((startRegAddr+RegNum)<100)//寄存器地址+數(shù)量在范圍內(nèi)
  114.         {        
  115.             if(RS485_RX_BUFF[6]==0x01)
  116.                                                          {
  117.                                                           switch(RS485_RX_BUFF[7])
  118.                                                                 {
  119.                                                                
  120.                                                                         case                0x01:
  121.                     {                                                                       
  122.                                                                  GPIO_ResetBits(GPIOE,GPIO_Pin_8);
  123.                              delay_ms(100);                            //開機功能
  124.                        GPIO_SetBits(GPIOE,GPIO_Pin_8);
  125.                                                                          break;
  126.                                                              }
  127.                                                                         case  0x02:
  128.                                                                          {
  129.                                                                         GPIO_ResetBits(GPIOE,GPIO_Pin_10);
  130.                               delay_ms(100);                     //關(guān)機
  131.                         GPIO_SetBits(GPIOE,GPIO_Pin_10);
  132.                                                                          break;
  133.                                                                          }
  134.                                                                         case  0x04:
  135.                                                                          {
  136.                                                                          GPIO_ResetBits(GPIOE,GPIO_Pin_9);
  137.                                delay_ms(100);                            //激勵封鎖
  138.                          GPIO_SetBits(GPIOE,GPIO_Pin_9);
  139.                                                                                   break;
  140.                                                                          }
  141.                                                                         case 0x08:
  142.                                                                          {
  143.                                                                         GPIO_ResetBits(GPIOE,GPIO_Pin_11);
  144.                               delay_ms(500);                      //復(fù)位
  145.                         GPIO_SetBits(GPIOE,GPIO_Pin_11);
  146.                                                                                  break;
  147.                                                                          }
  148.                                                                  }
  149.                                                                  }
  150.                                                         else
  151.                                                         {
  152.                                                         RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
  153.                 RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80;
  154.                 RS485_TX_BUFF[2]=0x02; //異常碼
  155.                RS485_Send_Data(RS485_TX_BUFF,3);
  156.                                                        
  157.                                                         }

  158.                 RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
  159.                 RS485_TX_BUFF[1]=RS485_RX_BUFF[1];
  160.                 RS485_TX_BUFF[2]=RS485_RX_BUFF[2];
  161.                 RS485_TX_BUFF[3]=RS485_RX_BUFF[3];
  162.                 RS485_TX_BUFF[4]=RS485_RX_BUFF[4];
  163.                 RS485_TX_BUFF[5]=RS485_RX_BUFF[5];
  164.                 calCRC=CRC_Compute(RS485_TX_BUFF,6);
  165.                 RS485_TX_BUFF[6]=calCRC&0xFF;
  166.                 RS485_TX_BUFF[7]=(calCRC>>8)&0xFF;
  167.                RS485_Send_Data(RS485_TX_BUFF,8);
  168.         }
  169.         else//寄存器地址+數(shù)量不在范圍內(nèi)
  170.         {
  171.                 RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
  172.                 RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80;
  173.                 RS485_TX_BUFF[2]=0x02; //異常碼
  174.                RS485_Send_Data(RS485_TX_BUFF,3);
  175.         }
  176. }

  177. int main(void)
  178. {         
  179.         u8 key;
  180.         u8 i=0;
  181.         u8 rs485buf[10];
  182.        
  183.         delay_init();                     //延時函數(shù)初始化          
  184.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
  185.         uart_init(115200);                 //串口初始化為115200
  186.         LED_Init();                                  //初始化與LED連接的硬件接口
  187.         LCD_Init();                                   //初始化LCD        
  188.         KEY_Init();                                //按鍵初始化                          
  189.         RS485_Init(9600);        //初始化RS485串口波特率9600
  190.         while(1)
  191.         {
  192.   RS485_Receive_Data(rs485buf,&key);
  193.                 if(key)//接收到有數(shù)據(jù)
  194.                 {
  195.                         if(key>10)key=10;//最大是10個數(shù)據(jù).
  196.                         for(i=0;i<key;i++)
  197.                         {
  198.                         RS485_RX_BUFF[i]=rs485buf[i];
  199.                         }
  200.        
  201.                 if(RS485_RX_BUFF[0]==0x01)//地址正確
  202.                 {
  203.                         if((RS485_RX_BUFF[1]==00)||(RS485_RX_BUFF[1]==02)||(RS485_RX_BUFF[1]==0x03)||(RS485_RX_BUFF[1]==0x05)||(RS485_RX_BUFF[1]==0x06)||(RS485_RX_BUFF[1]==0x15)||(RS485_RX_BUFF[1]==0x16))
  204.                   {
  205.                                 startRegAddr=(((u16)RS485_RX_BUFF[2])<<8)|RS485_RX_BUFF[3];//獲取寄存器地址
  206.                                 if(startRegAddr<1000)//寄存器地址在范圍內(nèi)
  207.                                 {
  208.                                                                                                        
  209.                                         calCRC=CRC_Compute(RS485_RX_BUFF,8);//計算所接收到數(shù)據(jù)的CRC
  210.                                         recCRC=RS485_RX_BUFF[9]|(((u16)RS485_RX_BUFF[8])<<8);//????CRC(?????,?????)
  211.                                         if(calCRC==recCRC)//CRC正確
  212.                                         {
  213.                                                 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  214.                                                 switch(RS485_RX_BUFF[1])//判斷功能碼
  215.                                                 {
  216.                                                    

  217.                                                         case 0x05://寫單個輸出開關(guān)量
  218.                                                         {
  219.                                                                 Modbus_05_Solve();
  220.                                                                 break;
  221.                                                         }

  222.                                                         case 0x15://寫多個輸出開關(guān)量
  223.                                                         {
  224.                                                                 Modbus_15_Solve();
  225.                                                                 break;
  226.                                                         }

  227.                                                    

  228.                                                 }
  229.                                                 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  230.                                         }
  231.                                         else//CRC錯誤
  232.                                         {
  233.                                                 RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
  234.                                                 RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80;
  235.                                                 RS485_TX_BUFF[2]=0x04; //異常碼
  236.                                                 RS485_Send_Data(RS485_TX_BUFF,3);
  237.                                         }        
  238.                                 }
  239.                                 else//寄存器地址超出范圍
  240.                                 {
  241.                                         RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
  242.                                         RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80;
  243.                                         RS485_TX_BUFF[2]=0x02; //異常碼
  244.                                        RS485_Send_Data(RS485_TX_BUFF,3);
  245.                                 }                                                
  246.                         }
  247.                         else//功能碼錯誤
  248.                         {
  249.                                 RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
  250.                                 RS485_TX_BUFF[1]=RS485_RX_BUFF[1]|0x80;
  251.                                 RS485_TX_BUFF[2]=0x01; //異常碼
  252.                                 RS485_Send_Data(RS485_TX_BUFF,3);
  253.                         }
  254.           }

  255.         
  256.                 RS485_RX_CNT=0;//清零
  257.                 RS485_TX_EN=0;//開始接收               
  258.         }               
  259.                
  260.                
  261.                
  262.         }
  263. }
復(fù)制代碼

所有資料51hei提供下載:



485-modbus通訊實驗.7z

236.41 KB, 下載次數(shù): 274, 下載積分: 黑幣 -5

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:405302 發(fā)表于 2019-7-9 15:11 | 只看該作者
我想用單片機和觸摸屏用modbus通訊,能實現(xiàn)嗎
回復(fù)

使用道具 舉報

板凳
ID:714728 發(fā)表于 2020-3-24 14:11 | 只看該作者
學(xué)習(xí)一下,謝謝
回復(fù)

使用道具 舉報

地板
ID:379340 發(fā)表于 2023-12-6 17:00 | 只看該作者
  recCRC=RS485_RX_BUFF[9]|(((u16)RS485_RX_BUFF[8])<<8);
這里是不是錯了,校驗碼是低位在前,高位在后,
回復(fù)

使用道具 舉報

5#
ID:379340 發(fā)表于 2023-12-6 17:02 | 只看該作者
if(RS485_RX_BUFF[0]==0x01)//地址正確
                {
                        if((RS485_RX_BUFF[1]==00)||(RS485_RX_BUFF[1]==02)||(RS485_RX_BUFF[1]==0x03)||(RS485_RX_BUFF[1]==0x05)||(RS485_RX_BUFF[1]==0x06)||(RS485_RX_BUFF[1]==0x15)||(RS485_RX_BUFF[1]==0x16))
                  {
                                startRegAddr=(((u16)RS485_RX_BUFF[2])<<8)|RS485_RX_BUFF[3];//獲取寄存器地址
                                if(startRegAddr<1000)//寄存器地址在范圍內(nèi)
                                {
                                                                                                       
                                        calCRC=CRC_Compute(RS485_RX_BUFF,8);//計算所接收到數(shù)據(jù)的CRC
                                        recCRC=RS485_RX_BUFF[9]|(((u16)RS485_RX_BUFF[8])<<8);//????CRC(?????,?????)
                                        if(calCRC==recCRC)//CRC正確
                                        {
                                                /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                                                switch(RS485_RX_BUFF[1])//判斷功能碼
                                                {
                                                   

                                                        case 0x05://寫單個輸出開關(guān)量
                                                        {
                                                                Modbus_05_Solve();
                                                                break;
                                                        }

                                                        case 0x15://寫多個輸出開關(guān)量
                                                        {
                                                                Modbus_15_Solve();
                                                                break;
                                                        }

                                                   

                                                }
                                                //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                                        }這里是發(fā)送10個字節(jié),


//Modbus功能碼15處理函數(shù)
void Modbus_15_Solve(void)//這里是發(fā)送8個字節(jié),沒有明白可以解釋一下嗎
回復(fù)

使用道具 舉報

6#
ID:379340 發(fā)表于 2023-12-6 17:03 | 只看該作者
//Modbus功能碼15處理函數(shù)
void Modbus_15_Solve(void)這里發(fā)送8個字節(jié)。主函數(shù)里面發(fā)送10個字節(jié),沒有理解,可以解釋一下嗎,謝謝
回復(fù)

使用道具 舉報

7#
ID:874002 發(fā)表于 2024-1-2 16:02 | 只看該作者
if(key>10)key=10;//最大是10個數(shù)據(jù).后面的校驗都是按照10校驗的,如果接收到的字節(jié)小于10個,校驗位也應(yīng)該相應(yīng)地調(diào)整吧
回復(fù)

使用道具 舉報

8#
ID:874002 發(fā)表于 2024-1-9 16:48 | 只看該作者
18758774924 發(fā)表于 2023-12-6 17:00
recCRC=RS485_RX_BUFF[9]|(((u16)RS485_RX_BUFF[8])

是低位在前高位在后,低位在前先發(fā),先收到低位,那發(fā)的時候當(dāng)然計算calCRC的校驗碼其實是低位在前面高位在后面正好相反的,也就是說你要理解了calCRC其實不是真正的crc1234,而是3412,所以這里沒有反,反而是前面 void Modbus_05_Solve(void)函數(shù)里的6和7反了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: a在线观看| 男人天堂久久 | 久久久久久久久久久久一区二区 | 久久精品99久久 | 亚洲精品视频一区 | 欧美一级二级三级 | 免费在线看黄 | 久久人爽| 午夜视频在线视频 | 国产激情偷乱视频一区二区三区 | 久久久精品在线 | 欧美精品一区二区三区在线播放 | 中文字幕在线观看www | 亚洲男人天堂 | 久久天堂 | 91网视频| 国产精品日女人 | 欧美成人免费电影 | 九九热精品免费 | 99免费| 国产精品毛片一区二区在线看 | 99精品一区二区三区 | 国产精品国产精品国产专区不片 | 国产中文在线观看 | 久久久久国产 | 中文字幕国产一区 | 国产熟熟| 亚洲精美视频 | 黄色片免费在线观看 | 天天玩天天干天天操 | 三级国产三级在线 | 91亚洲精品在线观看 | 男女视频在线免费观看 | 国产精品亚洲第一区在线暖暖韩国 | 日日骑 | 日韩伦理电影免费在线观看 | 久久久久久久久久久久久91 | 欧美一极视频 | 色综合久久天天综合网 | 国产一区| 天天操 夜夜操 |