[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?
Node:
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:TSLgateway
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 -
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?
Node:
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:TSLgateway
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.HTH
-
@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. -
@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.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login