[SOLVED] RS485 node with STM32

  • I try to get a node based on STM32 to work with RS485. No success. Mysensors does send on RS485, but does not receive anything. I checked the signals with scope. Physically TX signals go out and reply from gateway goes into RX pin, but is not read by mysensors lib. I tried all UARTs. Apart from mysensors lib, I'm able to do serial communication with other UARTs than the one used for RS485.
    I used F103 and F401/411 with both STM libs (maple, ST) when possible.

    If I just change the ST chip to AVR it works instantly. So network and GW are not the issue.

    Any suggestions what to measure/change?


    898097 TSM:FAIL:RE-INIT
    898097 TSM:INIT
    900098 THA:INIT
    900098 TSM:INIT:TSP OK
    900098 TSM:INIT:STATID=100
    900100 THA:SAD:ADDR=100
    900101 TSF:SID:OK,ID=100
    900102 TSM:FPAR
    900102 THA:SND:MSG=6464FF020307FF
    900133 THA:SND:MSG LEN=7,RES=1
    900133 ?TSF:MSG:SEND,100-100-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    904134 !TSM:FPAR:NO REPLY
    904134 TSM:FPAR
    904134 THA:SND:MSG=6464FF020307FF
    904153 THA:SND:MSG LEN=7,RES=1
    904153 ?TSF:MSG:SEND,100-100-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    908153 !TSM:FPAR:NO REPLY
    908153 TSM:FPAR
    908153 THA:SND:MSG=6464FF020307FF
    908172 THA:SND:MSG LEN=7,RES=1
    908172 ?TSF:MSG:SEND,100-100-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    912173 !TSM:FPAR:NO REPLY
    912173 TSM:FPAR
    912173 THA:SND:MSG=6464FF020307FF
    912191 THA:SND:MSG LEN=7,RES=1
    912192 ?TSF:MSG:SEND,100-100-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK:
    916192 !TSM:FPAR:FAIL
    916192 TSM:FAIL:CNT=7
    916192 TSM:FAIL:DIS
    916193 TSF:TDI:TSL


    0;255;3;0;9;26409142 TSF:MSG:READ,100-100-255,s=255,c=3,t=7,pt=0,l=0,sg=0:
    0;255;3;0;9;26409149 TSF:MSG:BC
    0;255;3;0;9;26409152 TSF:MSG:FPAR REQ,ID=100
    0;255;3;0;9;26409155 TSF:PNG:SEND,TO=0
    0;255;3;0;9;26409159 TSF:CKU:OK
    0;255;3;0;9;26409162 TSF:MSG:GWL OK
    0;255;3;0;9;26409388 TSF:MSG:SEND,0-0-100-100,s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=OK:0
    0;255;3;0;9;26413162 TSF:MSG:READ,100-100-255,s=255,c=3,t=7,pt=0,l=0,sg=0:
    0;255;3;0;9;26413168 TSF:MSG:BC
    0;255;3;0;9;26413171 TSF:MSG:FPAR REQ,ID=100
    0;255;3;0;9;26413175 TSF:CKU:OK,FCTRL
    0;255;3;0;9;26413178 TSF:MSG:GWL OK
    0;255;3;0;9;26413325 TSF:MSG:SEND,0-0-100-100,s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=OK:0
    0;255;3;0;9;26417182 TSF:MSG:READ,100-100-255,s=255,c=3,t=7,pt=0,l=0,sg=0:
    0;255;3;0;9;26417188 TSF:MSG:BC
    0;255;3;0;9;26417191 TSF:MSG:FPAR REQ,ID=100
    0;255;3;0;9;26417196 TSF:CKU:OK,FCTRL
    0;255;3;0;9;26417199 TSF:MSG:GWL OK
    0;255;3;0;9;26417269 TSF:MSG:SEND,0-0-100-100,s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=OK:0
    0;255;3;0;9;26421201 TSF:MSG:READ,100-100-255,s=255,c=3,t=7,pt=0,l=0,sg=0:
    0;255;3;0;9;26421209 TSF:MSG:BC
    0;255;3;0;9;26421211 TSF:MSG:FPAR REQ,ID=100
    0;255;3;0;9;26421215 TSF:CKU:OK,FCTRL
    0;255;3;0;9;26421219 TSF:MSG:GWL OK
    0;255;3;0;9;26422238 TSF:MSG:SEND,0-0-100-100,s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=OK:0

  • @karlheinz2000 Unfortunately there are no debug messages in the RS485 driver code available. I mean something similar to MY_DEBUG_VERBOSE_RF24 for the RF24 transport.

    When you don't get any input at the STM32 side I would start by adding some "Serial.println(x)" into the function _serialProcess() in ~\MySensors\hal\transport\RS485\MyTransportRS485.cpp
    to check if there is something coming in at least.


  • @virtualmkr thanks for pointing to _serialProcess(). This help to understand a little more how it works.
    I finally found the issue: bias resistors (10k) at A and B lost connection, so during bus idle RX was low and not high. For AVR this was not a problem, but STM32 did not synchronize right to the frame.

  • @karlheinz2000 sounds great that you found the bug. It's always difficult to tell if it is a HW or SW bug on MCUs. From your first description it seems like a SW one to me.

Log in to reply

Suggested Topics

  • 15
  • 10
  • 1
  • 3
  • 7
  • 54
  • 108
  • 4