F767阿波罗移植freemodbus返回数据第一位地址不对,跪求大神解决

2019-07-20 05:56发布

按照八度大神的移植教程移植了freemodbus到F767上,因为采用HAL库以及寄存器上的一些变更花了不少时间去分析,采用的是第一种移植方法,没有使用RTOR,待会使用RTOR省一个寄存器的方法来做下
移植调试出数据之后发现一个很奇怪但是怎么都解决不了的问题,返回的从机地址老是不对,其余没问题,查看发送缓存中的数据也是正确的。
回过头来使用RS485例程收发数据,也没有问题。
如下是调试数据在MBRtu.c xMBRTUTransmitFSM函数中ucRTUBuf中数据是正确的,在中断发送函数xMBPortSerialPutByte()中读出的第一第二位也是正确的
ucRTUBuf[0] re is 1
ucRTUBuf[1] re is 4
ucRTUBuf[2] re is 2
ucRTUBuf[3] re is 0
ucRTUBuf[4] re is f
ucRTUBuf[5] re is f9
ucRTUBuf[6] re is 34
ucRTUBuf[7] re is ca
USART2_RS485Handler.Instance->TDR is 1
USART2_RS485Handler.Instance->TDR is 4
但是modbus poll实际接收salve address一直不变是C0,显示CRC校验失败
000387-Tx:01 04 00 00 00 01 31 CA
000388-Rx:C0 04 02 00 0F F9 34
000389-Tx:01 04 00 00 00 01 31 CA
000390-Rx:C0 04 02 00 0F F9 34
000391-Tx:01 04 00 00 00 01 31 CA
000392-Rx:C0 04 02 00 0F F9 34
000393-Tx:01 04 00 00 00 01 31 CA
000394-Rx:C0 04 02 00 0F F9 34
000395-Tx:01 04 00 00 00 01 31 CA
000396-Rx:C0 04 02 00 0F F9 34
000397-Tx:01 04 00 00 00 01 31 CA
000398-Rx:C0 04 02 00 0F F9 34

使用了很多方法包括
1将xMBRTUTransmitFSM中发送部分使用例程中的RS485_Send_Data替代,这个替代之后没有输出,因为使用的函数调用东西太多timeout吧,个人认为。

       if( usSndBufferCount != 0 )
        {
            xMBPortSerialPutByte( ( CHAR )*pucSndBufferCur );
            pucSndBufferCur++;  // next byte in sendbuffer.
            usSndBufferCount--;
                       
        }

        //RS485_Send_Data(ucRTUBuf,usSndBufferCount);
                //delay_ms(10);

2、将mbrtu.c中eMBRTUSend函数中pucSndBufferCur = ( UCHAR * ) pucFrame - 1; 的地址多减 pucSndBufferCur = ( UCHAR * ) pucFrame - 2,然后再多减一结果发现从第二位的slaveadd
往后的数据对了,但是起始固定的C0不变,CRC结果少发了一位,肯定也是CRC校验失败。
000397-Tx:01 04 00 00 00 01 31 CA
000398-Rx:C0 01 04 02 00 0F F9

3、直接将slaveadd第一字节强制发送,使用变量CNT反转来控制只发一次。结果一样。起始从一开始读取的值就知道,在TDR中都没问题
4、查看之前的都是1FF,但是发现在767配套的HAL_UART_Transmit和HAL_UART_Receive中对于USART2_RS485Handler.Init.WordLength=UART_WORDLENGTH_8B;使用的mask是FF,改过来之后没啥变化,一样的。
//USART2_RS485Handler.Instance->TDR = (ucByte& (uint16_t)0x01FFU);
  USART2_RS485Handler.Instance->TDR = (ucByte& (uint8_t)0xFFU);

目标是用F767 阿波罗做主机,就怕这个问题在做主机时还会发生,跪求大神协助。万分感谢


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。