2025-08-18
6:14 PM
- last edited on
2025-09-03
1:10 AM
by
Maxime_MARCHETT
I am working on establishing HART communication using an STM32H723ZG Nucleo board, a Maxim DS8500 HART modem, and a 2088 Pressure Transmitter (4–20 mA + HART).
STM32H723ZG
USART3 → Debug to PC (115200, 8N1, no parity)
USART6 → Connected to DS8500 D_IN/D_OUT (1200 baud, 8 data bits, odd parity, 1 stop bit)
GPIOs:
PE0 → DS8500 RST (Active Low)
PA0 → DS8500 RTS (Low=TX, High=RX)
PB0 → DS8500 OCD (Input, carrier detect)
DS8500 Connections (per Maxim datasheet and app note):
MODE = High (for HART mode)
3.6864 MHz crystal connected between XTAL1/XTAL2
REF decoupled with 0.1 µF
FSK_IN/OUT connected to the HART loop via the recommended RC filters
Loop: 2088 transmitter powered (24 V, 4–20 mA loop).
USART6 configured at 1200 bps, 8E1 (actually 8 data bits + odd parity + 1 stop).
GPIO configured:
PE0 default high (releases reset)
PA0 high (sets DS8500 in RX/demodulator mode)
PB0 input (read OCD)
Debug prints OCD state every second on USART3.
OCD pin always reads LOW → No carrier detected, even though the transmitter should respond.
I confirmed that RTS=High (RX mode) and RST=High (not in reset).
MODE pin is tied High.
REF pin shows ~1.23 V (so demod section seems active).
The loop is wired correctly and the transmitter works in analog (4–20 mA changes with pressure).
Toggling RTS between TX and RX modes. OCD still remains low.
Sending a HART preamble (0xFF * 20) via USART6 → FSK_OUT shows modulation, but still no demodulated data.
Checked wiring against Maxim’s reference design (filters on FSK_IN/FSK_OUT).
Verified 3.6864 MHz crystal oscillation with oscilloscope.
Is my USART6 configuration correct for DS8500 (1200 bps, 8 data bits, ODD parity, 1 stop)?
Does OCD only go high when a valid UART start bit + carrier amplitude >120 mVp-p is present, or should it indicate raw carrier energy on the loop?
Could there be an issue with the filter/bias network on FSK_IN preventing detection?
Has anyone successfully interfaced STM32H7 with DS8500 + Rosemount/2088 transmitter, and can share working settings/schematics?
Any insights from ST engineers or community members experienced with DS8500 + STM32 would be very helpful.
Thanks!
2025-08-18 10:54 PM
If You don't get the Carrier detect it's probably a problem with Your Sensor or the DS8500, so you should ask Analog Device.
Did You check that the input signal from the Sensor is OK (with an oscilloscope)?
2025-08-19 7:48 AM
-> "1200 bps, 8 data bits, ODD parity, 1 stop" this is correct for HART.
However, ST includes the parity bit as part of the data frame, make sure the USART word length is 9:
The 2088 transmitter is not going to respond unless you send a properly constructed HART message (Start byte after preambles, ending with checksum, etc.:
2025-08-19 8:29 AM
Also, your 4–20 mA current loop should have a resistor in it, typically 250 Ω.
2025-08-19 3:19 PM
Hey,
mentioned below is my Usart6 used to communicate with DS8500.
Now, i will show you the command i am sending.
now let me show you my code
and this is what i am receiving on my serial monitor
Now what could possibly be the issue?
2025-08-19 3:21 PM
Yes, everything is there. Check the above chat
2025-08-19 5:50 PM
Not sure it's functionality should be STM32 specific, perhaps look more broadly at other working MCU examples.
Is the HAL layer returning any errors?
If you scope the modem,or use a logic analyzer, can you inspect the modem's OCD and data output to the STM32's UART RX pin?