Skip to content

SanCruzo/STM32DualComm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

STM32DualComm

Dual communication helper for STM32 (Arduino core):

  • Serial1: generic TX/RX helpers
  • Serial2: Modbus RTU (MAX485) with DE/RE control pin

No sensor-specific logic. Drop-in utility you can reuse across projects.

Features

  • Build Modbus RTU frames (read holding registers, write single register)
  • Send/receive with automatic DE/RE toggling
  • CRC-16 (Modbus) calculation
  • Optional debug via Serial (hex dump TX/RX)

Wiring (MAX485)

  • Serial2 TX -> DI
  • Serial2 RX -> RO
  • DE and RE tied together -> configured pin (e.g., PA4)
  • GND common
  • Power your MAX485 module as supported by your board/module

Installation

Place the folder as an Arduino library or publish on GitHub and use as a library.

Usage

#include <STM32DualComm.h>

constexpr uint8_t DE_RE_PIN = PA4; // change to your pin
STM32DualComm comm(Serial1, Serial2, DE_RE_PIN);

void setup() {
  Serial.begin(115200);
  comm.setDebug(&Serial);   // optional
  comm.begin(115200, 4800); // Serial1, Serial2 baudrates
}

void loop() {
  uint8_t data[2];
  uint16_t bytes;
  if (comm.readHoldingRegisters(1, 0x0000, 1, data, sizeof data, 1000, &bytes)) {
    uint16_t value = (uint16_t)(data[0] << 8) | data[1];
    Serial.println(value);
  }
  delay(1000);
}

See examples/BasicModbus for a complete sketch.

API

  • STM32DualComm(HardwareSerial &serial1, HardwareSerial &serial2, uint8_t deRePin)
  • void begin(uint32_t serial1Baud, uint32_t modbusBaud)
  • void setDebug(Stream *debug)
  • bool readHoldingRegisters(uint8_t slave, uint16_t startReg, uint16_t quantity, uint8_t *dataOut, size_t dataOutLen, uint32_t timeoutMs, uint16_t *outBytesRead)
  • bool writeSingleRegister(uint8_t slave, uint16_t reg, uint16_t value, uint32_t timeoutMs)
  • size_t buildReadHoldingRegisters(...), size_t buildWriteSingleRegister(...)
  • bool sendRawModbus(const uint8_t *frame, size_t length)
  • int receiveModbus(uint8_t *buffer, size_t maxLength, uint16_t minLength, uint32_t timeoutMs)
  • static uint16_t calculateCRC(const uint8_t *data, size_t length)

License

MIT


Türkçe (TR)

STM32 (Arduino çekirdeği) için çift haberleşme yardımcısı:

  • Serial1: genel amaçlı TX/RX yardımcıları
  • Serial2: DE/RE kontrol pini ile Modbus RTU (MAX485)

Sensöre özgü hiçbir mantık içermez. Projelerinizde tekrar kullanılabilir yardımcı kütüphane.

Özellikler

  • Modbus RTU çerçeveleri oluşturma (holding register oku, tek register yaz)
  • DE/RE otomatik kontrol ile gönderme/alma
  • CRC-16 (Modbus) hesaplama
  • İsteğe bağlı Serial üzerinden debug (TX/RX hex dökümü)

Bağlantı (MAX485)

  • Serial2 TX -> DI
  • Serial2 RX -> RO
  • DE ve RE beraber -> seçilen pin (ör. PA4)
  • Ortak GND
  • MAX485 modülünü kartınızın/modülünüzün desteklediği şekilde besleyin

Kurulum

Klasörü bir Arduino kütüphanesi olarak ekleyin veya GitHub’a yayınlayıp Library Manager ile kurun.

Kullanım

#include <STM32DualComm.h>

constexpr uint8_t DE_RE_PIN = PA4; // kendi pininize göre değiştirin
STM32DualComm comm(Serial1, Serial2, DE_RE_PIN);

void setup() {
  Serial.begin(115200);
  comm.setDebug(&Serial);   // isteğe bağlı
  comm.begin(115200, 4800); // Serial1 ve Serial2 baud hızları
}

void loop() {
  uint8_t data[2];
  uint16_t bytes;
  if (comm.readHoldingRegisters(1, 0x0000, 1, data, sizeof data, 1000, &bytes)) {
    uint16_t value = (uint16_t)(data[0] << 8) | data[1];
    Serial.println(value);
  }
  delay(1000);
}

Tam örnek için examples/BasicModbus klasörüne bakın.

API

  • STM32DualComm(HardwareSerial &serial1, HardwareSerial &serial2, uint8_t deRePin)
  • void begin(uint32_t serial1Baud, uint32_t modbusBaud)
  • void setDebug(Stream *debug)
  • bool readHoldingRegisters(uint8_t slave, uint16_t startReg, uint16_t quantity, uint8_t *dataOut, size_t dataOutLen, uint32_t timeoutMs, uint16_t *outBytesRead)
  • bool writeSingleRegister(uint8_t slave, uint16_t reg, uint16_t value, uint32_t timeoutMs)
  • size_t buildReadHoldingRegisters(...), size_t buildWriteSingleRegister(...)
  • bool sendRawModbus(const uint8_t *frame, size_t length)
  • int receiveModbus(uint8_t *buffer, size_t maxLength, uint16_t minLength, uint32_t timeoutMs)
  • static uint16_t calculateCRC(const uint8_t *data, size_t length)

Lisans

MIT

About

STM32 dual-communication helper: Serial1 general I/O + Modbus RTU on Serial2 with DE/RE control. Lightweight helper to send/receive Modbus RTU frames over Serial2 using a MAX485-style transceiver with DE/RE control, plus simple Serial1 utilities. No sensor-specific logic.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages