STM32F411 BlackpillV2 ST core - problem with reading data from RS485 (HW serial 2)
-
Hi,
for years Im using MySensors 2.3.1 lib running on Bluepill (STM32F103C8T6 Roger`s STM32 core) with RS485 transport as a node without any problems. Now I need to add new node so I decided to use BlackPill 2 (STM32F411) with STM32 ST core and Whisky Delta fork . (https://github.com/WhiskyDelta/MySensors/tree/stm32_cores) I have no problem with code compilation of simple test node sketch but node is not receiving data from gateway through RS485.As you can see from debug log, node send a message and GW replied but node does not received anything. Strange thing is that some chars appeared in debug console "�vXvv���" before 2215 ?TSF:MSG:SEND,.....
For testing purpose Iv got on desk Ardu Nano as GW with MAX485 converters and as a node I tested with Whisky Delta lib one by one Arduino Mega2560 , Bluepill STM32F103c8t6 , Blackpill2 STM32F411 and F4VE (STM32F407VET). As a node is working only Mega2560. Bluepill were frozen after first attempt to pair with GW. Blackpill 2 and F4VE are repeating sending request for pair to GW with this strange chars in serial debug. ("�vXvv���")
Im sure that HW is ok. (wiring,DE+RE,termination resistors,5V supply of MAX485, etc)
Does anybody else has a problem like this ? Do you have any idea where should be a problem ?
Gateway received data from node and responded
0;255;3;0;9;8233171 TSF:MSG:READ,118-118-255,s=255,c=3,t=7,pt=0,l=0,sg=0: 0;255;3;0;9;8233177 TSF:MSG:BC 0;255;3;0;9;8233180 TSF:MSG:FPAR REQ,ID=118 0;255;3;0;9;8233184 TSF:PNG:SEND,TO=0 0;255;3;0;9;8233187 TSF:CKU:OK 0;255;3;0;9;8233190 TSF:MSG:GWL OK 0;255;3;0;9;8233447 TSF:MSG:SEND,0-0-118-118,s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=OK:0Node trying to pair but does not receive data from gateway. What are chars �vXvv��� ?
2050 MCO:BGN:INIT OK,TSP=0 2211 !TSM:FPAR:NO REPLY 2213 TSM:FPAR �vXvv���2215 ?TSF:MSG:SEND,118-118-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0Simple node sketch. Debug is using Serial1 and MAX485 is using Serial2
#define MY_DEBUG #define MY_TRANSPORT_WAIT_READY_MS 2000 //#define MY_TRANSPORT_SANITY_CHECK //#define MY_TRANSPORT_SANITY_CHECK_INTERVAL 2000 //#define MY_RS485_SOH_COUNT 2 #define MY_NODE_ID 118 #define MY_RS485 #define MY_RS485_DE_PIN PB3 #define MY_RS485_HWSERIAL Serial2 #define MY_RS485_BAUD_RATE 9600 #include <MySensors.h> #define CHILD_ID_SudyNode 0 MyMessage msgStatus(CHILD_ID_SudyNode, V_VAR1); //Status MyMessage msgErrorEvent(CHILD_ID_SudyNode, V_VAR2); //Err event MyMessage msgDebug(CHILD_ID_SudyNode, V_VAR3); //DEBUG void presentation() { sendSketchInfo("TestNODE", "Ver. 1");present(CHILD_ID_SudyNode, S_CUSTOM);} void setup() { Serial.setRx(PA10); Serial.setTx(PA9); Serial.begin(115200); } String SendBuffer = "TEST Message"; unsigned long CasovacMillis = millis(); void loop() { if ((millis() - CasovacMillis) >= 3000) { Serial.println("NODE ALIVE"); send(msgStatus.set(SendBuffer.c_str())); CasovacMillis = millis(); } } void receive(const MyMessage &message) { if (message.sensor == 123 ) { String BufferString = message.getString(); char CommandBuffer[BufferString.length()]; BufferString.toCharArray(CommandBuffer, BufferString.length()+1); Serial.print("RECEIVED DATA: "); Serial.println(CommandBuffer); } } -
OK problem found. Found out that when I selected "Blackpill F411CE" board before code compilation everything were ok.
Usually I am choosing generic types so I used "F411CEUx" in case of blackpill 2 and I found out that generic types has different default "Serial" pins in ST core. Now I can confirm that Bluepill , Blackpill and F4VE board are working with MAX485.ST core v 2.4.0.
../.arduino15/packages/STMicroelectronics/hardware/stm32/2.4.0/variants/STM32F4xx/F411C(C-E)(U-Y)/variant_generic.h
// UART Definitions #ifndef SERIAL_UART_INSTANCE #define SERIAL_UART_INSTANCE 2 #endif // Default pin used for generic 'Serial' instance // Mandatory for Firmata #ifndef PIN_SERIAL_RX #define PIN_SERIAL_RX PA3 #endif #ifndef PIN_SERIAL_TX #define PIN_SERIAL_TX PA2 #endif../.arduino15/packages/STMicroelectronics/hardware/stm32/2.4.0/variants/STM32F4xx/F411C(C-E)(U-Y)/variant_BLACKPILL_F411CE.h
// UART Definitions #ifndef SERIAL_UART_INSTANCE #define SERIAL_UART_INSTANCE 1 #endif // Default pin used for generic 'Serial' instance // Mandatory for Firmata #ifndef PIN_SERIAL_RX #define PIN_SERIAL_RX PA10 #endif #ifndef PIN_SERIAL_TX #define PIN_SERIAL_TX PA9 #endifSo be carefull while using ST core and generic type of STM32.
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