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

標(biāo)題: stm32+rs485-modbus通訊實(shí)驗(yàn)源程序 [打印本頁(yè)]

作者: 陶oooo    時(shí)間: 2019-5-21 16:44
標(biāo)題: stm32+rs485-modbus通訊實(shí)驗(yàn)源程序
本實(shí)驗(yàn)完成了stm32對(duì)uart4串口配置,使用rs485通訊,完成和上位機(jī)數(shù)據(jù)交換,使用modbus協(xié)議

單片機(jī)源程序如下:
  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寄存器和單片機(jī)寄存器的映射關(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校驗(yàn) 自己后面添加的

  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校驗(yàn)碼
  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);                            //開機(jī)功能
  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)機(jī)
  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);                            //激勵(lì)封鎖
  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í)函數(shù)初始化          
  184.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級(jí)分組為組2:2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)
  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個(gè)數(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);//計(jì)算所接收到數(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://寫單個(gè)輸出開關(guān)量
  218.                                                         {
  219.                                                                 Modbus_05_Solve();
  220.                                                                 break;
  221.                                                         }

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

  227.                                                    

  228.                                                 }
  229.                                                 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  230.                                         }
  231.                                         else//CRC錯(cuò)誤
  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//功能碼錯(cuò)誤
  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通訊實(shí)驗(yàn).7z

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


作者: 18133392576    時(shí)間: 2019-7-9 15:11
我想用單片機(jī)和觸摸屏用modbus通訊,能實(shí)現(xiàn)嗎
作者: Nymo    時(shí)間: 2020-3-24 14:11
學(xué)習(xí)一下,謝謝
作者: 18758774924    時(shí)間: 2023-12-6 17:00
  recCRC=RS485_RX_BUFF[9]|(((u16)RS485_RX_BUFF[8])<<8);
這里是不是錯(cuò)了,校驗(yàn)碼是低位在前,高位在后,

作者: 18758774924    時(shí)間: 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);//計(jì)算所接收到數(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://寫單個(gè)輸出開關(guān)量
                                                        {
                                                                Modbus_05_Solve();
                                                                break;
                                                        }

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

                                                   

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


//Modbus功能碼15處理函數(shù)
void Modbus_15_Solve(void)//這里是發(fā)送8個(gè)字節(jié),沒有明白可以解釋一下嗎
作者: 18758774924    時(shí)間: 2023-12-6 17:03
//Modbus功能碼15處理函數(shù)
void Modbus_15_Solve(void)這里發(fā)送8個(gè)字節(jié)。主函數(shù)里面發(fā)送10個(gè)字節(jié),沒有理解,可以解釋一下嗎,謝謝
作者: lsylsyyyy    時(shí)間: 2024-1-2 16:02
if(key>10)key=10;//最大是10個(gè)數(shù)據(jù).后面的校驗(yàn)都是按照10校驗(yàn)的,如果接收到的字節(jié)小于10個(gè),校驗(yàn)位也應(yīng)該相應(yīng)地調(diào)整吧
作者: lsylsyyyy    時(shí)間: 2024-1-9 16:48
18758774924 發(fā)表于 2023-12-6 17:00
recCRC=RS485_RX_BUFF[9]|(((u16)RS485_RX_BUFF[8])

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




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美福利一区二区 | 国产小精品 | 亚洲精品a| 小镇姑娘国语版在线观看免费 | 日韩视频在线观看免费 | 日产毛片 | 一级黄色大片 | 国产免费一级片 | 亚洲区视频 | 国产a区| 久久久久久久91 | 成年人黄色片 | av观看网站| 欧美性猛交xxxx黑人交 | 久久国产一区二区 | 亚洲精品久久久久久久久久久 | 日韩在线免费 | 久久久夜夜夜 | 久久精品久久精品 | 欧美顶级黄色大片免费 | 黄色成人小视频 | 亚洲福利一区 | 日韩二区三区 | 国产精品欧美精品 | 福利看片| 亚欧在线观看 | 成人激情在线 | 国产美女一区二区 | 成人欧美视频 | 久久久久久久免费视频 | 视频一区二区在线播放 | 亚洲一级特黄 | 国产一级一片免费播放放a 国产黄色大片 | 日韩精品综合 | 一区二区三区日韩 | 一级片日韩 | 久久中文字幕视频 | 黄色a网站 | 日韩毛片免费看 | 国语对白做受欧美 | 狠狠躁夜夜躁人爽 |