zhyinch
2022-08-03 9105bf90e4dca008221da442e8077bf4040292bb
Ô´Âë/ºËÐİå/Src/application/modbus.c
@@ -512,8 +512,14 @@
                RS485_TX_BUFF[2]=RegNum*2;
                for(i=0;i<RegNum;i++)
                {
                           if(startRegAddr<100)
                           {
                        RS485_TX_BUFF[3+i*2]=(Modbus_HoldReg[startRegAddr+i]>>8)&0xFF;//           /////////先发送高字节--在发送低字节
                        RS485_TX_BUFF[4+i*2]=(Modbus_HoldReg[startRegAddr+i])&0xFF; //
                           }else{
                                    RS485_TX_BUFF[3+i*2]=(g_com_map[startRegAddr+i-100]>>8)&0xFF;//           /////////先发送高字节--在发送低字节
                        RS485_TX_BUFF[4+i*2]=(g_com_map[startRegAddr+i-100])&0xFF; //
                           }
                }
                calCRC=CRC_Compute(RS485_TX_BUFF,RegNum*2+3);
                RS485_TX_BUFF[RegNum*2+3]=(calCRC>>8)&0xFF;         //CRC高地位不对吗?  // å…ˆé«˜åŽä½Ž
@@ -534,9 +540,19 @@
//写单个保持寄存器
void Modbus_06_Solve(void)
{
   if(startRegAddr>100)
   {
      if(startRegAddr<600)
      {
         g_com_map[startRegAddr-100]=RS485_RX_BUFF[4]<<8|RS485_RX_BUFF[5];
      }
                            save_com_map_to_flash();
                     delay_ms(500);
                     SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
   }else{
        Modbus_HoldReg[startRegAddr]=RS485_RX_BUFF[4]<<8;//高字节在前                    ////////修改为高字节在前,低字节在后
        Modbus_HoldReg[startRegAddr]|=((u16)RS485_RX_BUFF[5]);//低字节在后
    }
        RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
        RS485_TX_BUFF[1]=RS485_RX_BUFF[1];
        RS485_TX_BUFF[2]=RS485_RX_BUFF[2];