For such accuracy you should combine CallSubPlus with DelayMicroseconds. Start with CallSubPlus with 2ms and then measure the actual time and use DelayMicroseconds. It will block other execution but hopefully the CallSubPlus will leave enough cycles for the other tasks.
Thanks Erel for the advice, in this application I have a lot of communications (4 RS-485, 12 SPI, 6 I2C and 1 TFT over SPI) and I'm pushing the ESP32 to the limit so I can't waste time with DELAYs.
My real problem is the repeatability of the CallSubPlus instruction, I don't care if assigning 3ms is 2.5ms or 3.5ms. The important thing is that they are always the same times. The RS-485 EN_TX signal makes the change between reception and transmission, so that if it is transmitting for a short time, some bits stop being sent and if it is active for a long time, the fastest slaves begin to respond without the RS-485 being present. in reception mode.
It would be very interesting to have a CallSubPlus instruction in us instead of ms, so I understand that the precision would be higher even within the same error.
At the moment, adjusting very carefully, I have the 4 RS-485 communications in the serial ports of the ESP32, it is maintaining very high transfer rates with minimum error levels of less than 1% and the error is always due to the control of the transmission line. both ports that value changes.
Aprovecho para deciros que el trabajo realizado en B4R es impresionante y os animo a seguir avanzando, si es posible a un nivel inferior para que podamos tener un control más directo sobre el ESP32.
Thank you so much