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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.