Skocz do zawartości

klony od ST32 nie działają "od ręki"


Morfi

Pomocna odpowiedź

Mam sobie taki programik (załączony na dole wiadomości), który komunikuje się z anteną przez uart na dwóch arbitralnych, cyfrowych portach.

Testowałem go sobie na 5 urządzeniach: arduino uno, arduino nano, citron maker nano oraz dwóch różnych ST32 nucleo. Teraz z niewiadomego dla mnie powodu, wszystko działa prawidłowo na pierwszych trzech, ale na żadnym z ST32.

Na jednym z nich (G031K8) serial monitor po USB nie zwraca zupełnie nic, natomiast na drugim  (L031K6) serial monitor po USB print'uje tylko "Init" i wiesza się na `SensorSerial.begin(115200);`.

Nie bardzo rozumiem skąd takie zachowanie, a może mieć to coś wspólnego z tym, że ST32 ma aż 9 klonów nano, co by sugerowało, że są one mniej uniwersalne? (tj. bardziej specjalistyczne i przez to porty cyfrowe nie mogą być używane dowolnie)?

Tu mógłbym poszerzyć nieco swoje pytanie o pare punktów

  • czy jeżeli w pinout'ach różnych boardów mamy podany "purpose" danego pinu to jest to tylko sugerowane użycie czy też wymagane użycie i nie można traktować wtedy takiego portu jako użytecznego do dowolnej rzeczy?
  • czy mogę użyć "pierwszych" portów UART RX/TX (tych na ogól z numerami 0/1) do komunikacji z zewnętrznym urządzeniem a jednocześnie monitorować serial przez USB czy też jeżeli przez USB chce widzieć printy z "defaultowego" `Serial`'a to wówczas nie mogę używać portów D0/D1 bo są one już zajęte?

image.thumb.png.242abe6b92d4d05fd20179b18089c4f2.png

#include <SoftwareSerial.h>
#include "DFRobot_mmWave_Radar.h"

// STM32 NUCLEO L031K6 pinout
// <img>
// #define RX_PIN PA10
// #define TX_PIN PA9

// STM32 NUCLEO G031K8 pinout
// <img>
// #define RX_PIN PA10
// #define TX_PIN PA9

// Cytron Maker Nano (board: ATmega328P)
// <img>
#define RX_PIN 6
#define TX_PIN 5

// Arduino UNO pinout
// <img>
// #define RX_PIN 2
// #define TX_PIN 3

SoftwareSerial SensorSerial(RX_PIN, TX_PIN);
// HardwareSerial SensorSerial(RX_PIN, TX_PIN);

DFRobot_mmWave_Radar sensor(&SensorSerial);

void setup()
{
  Serial.begin(115200);

  while (!Serial) {
    ; // wait for serial port to connect
  }

  Serial.println("Init");

  SensorSerial.begin(115200);

  while (!SensorSerial) {
    ; // wait for serial port to connect
  }

  Serial.println("Reset...");
  sensor.factoryReset();
  Serial.println("Range...");
  sensor.DetRangeCfg(0, 0.6);
  Serial.println("Latency...");
  sensor.OutputLatency(0, 0);
  Serial.println("Ready!");
}

void loop()
{
  int val = sensor.readPresenceDetection();
  Serial.println(val);
}

 

Link do komentarza
Share on other sites

Nie występuję w roli eksperta, na logikę co widzę to działa po pierwszej inicjalizacji serial.begin, a po sensorserial.begin przestaje - jak by był konflikt, co by wskazywało że chodzi o podpunkt drugi pytania - że nie można, albo że można ale trzeba wiedzieć dokładnie co i jak zrobić.

Doradziłbym debug na st-linku, żeby pokazało gdzie i kiedy, oraz do czego go wyrzuca - czy default error handler, czy busfaulthandler...

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.