Загрузка кода Arduino в контроллер полета гоночного дрона

Я работаю над самолетами вертикального взлета и посадки и в настоящее время ищу хорошую плату в качестве полетного контроллера (FC). Я мог бы сделать это сам, но это требует много времени. Я думал об одном из FPV дронов (у меня есть такой:

https://www.banggood.com/cs/Original-Airbot-Omnibus-F4-Pro-V3-Flight-controller-SD-5V-3A-BEC-OSD -Current-Sensor-LC-Filter-p-1319177.html?gmcCountry=CZ&currency=CZK&createTmp=1&utm_source=googleshopping&utm_medium=cpc_bgs&utm_content=lijing&utm_campaign=ssc-cz-cs-all-newcustom -ncv80-1118&gclid=CjwKCAjwqJ_1BRBZEiwAv73uwEgBJQ1B3dcKvZJZy2lR5-wN-XC150Ybn0kZObpUQbgkbvKiN_fY5BoCCVEQAvD_BwE&cur_warehouse=CN

У этой платы очень маленькие размеры, и в ней уже есть все, что мне нужно. Проблема в том, что он сделан для таких программ, как betaflight и т. д. Он использует STM32 F405, поэтому я попытался добавить поддержку STM 32 для arduino (https:// github.com/stm32duino/Arduino_Core_STM32) и загрузите в него код arduino.

Мне пришлось установить программатор кубов stm32, и, поскольку эта плата не является одной из плат arduino, я должен собрать код для другой платы с тем же процессором (FEATHER_F405). Из-за этого мне приходится менять распиновку платы в этом файле (C:\Users\\AppData\Local\Arduino15\packages\STM32\hardware\stm32\1.8.0\variants\FEATHER_F405). Я проверил правильность этих контактов (в коде я приказываю этим контактам быть высоким, а затем низким, пока я измерял их мультиметром). Так что все пины правильные. Мне удалось зажечь встроенный светодиод и подать звуковой сигнал. Единственная проблема, с которой я столкнулся, это последовательная связь. Я попытался отправить несколько строк на компьютер через последовательный порт, но не получил никаких данных. Вот пример кода, который я использовал:

#include <SoftwareSerial.h>

#define LED 4 //PB_5 //Инверсия (высокий уровень => LED ON)
#define BUZZ 3 //PB_4

#define _RX1 D0 //PA_10
#define _TX1 D1 //PA_9

//#определить D_P 35 //PA_11
//#определить D_M 36 //PA_12

//SoftwareSerial mySerial(_RX1, _TX1); // прием, передача
HardwareSerial  hwSerial_1(_RX1, _TX1);   // прием, передача

void setup() {

  hwSerial_1.begin(9600);   
 //mySerial.begin(9600);


  pinMode(LED,OUTPUT);
  pinMode(BUZZ,OUTPUT);

  //pinMode(_RX1,OUTPUT);
  //pinMode(_TX1,OUTPUT);

  //pinMode(D_P,OUTPUT);
  //pinMode(D_M,OUTPUT);
}


void loop() {

  digitalWrite(LED, HIGH);
  /*
  digitalWrite(_RX1, HIGH);
  digitalWrite(_TX1, HIGH);
  digitalWrite(D_P, HIGH);
  digitalWrite(D_M, HIGH);*/

  delay(1000);

  digitalWrite(LED, LOW);
  /*
  digitalWrite(_RX1, LOW);
  digitalWrite(_TX1, LOW);
  digitalWrite(D_P, LOW);
  digitalWrite(D_M, LOW);*/

  delay(1000);

  digitalWrite(BUZZ, HIGH);
  delay(100);
  digitalWrite(BUZZ, LOW);
  delay(1000);

  hwSerial_1.println("HelloWorld");
  //mySerial.println("HelloWorld");

}

Я пытался запустить последовательную связь через USB и через UART1 (использовал преобразователь USB/TTL -> FT232), но ничего из этого не работает. Я также пытался использовать Software Serial и аппаратную библиотеку серийных номеров, но это не помогло.

Есть ли у вас какие-либо советы, как заставить работать последовательную связь?

, 👍3


1 ответ


3

Извините, что так поздно отвечаю на эту проблему, но я наткнулся на ту же проблему. После многих часов отладки вот что я нашел:

  • Серийный номер по умолчанию (например, серийный номер, который вы будете использовать с помощью объекта Serial) — это то, что обозначено на плате RX3 и TX3 и отображается следующим образом:
    • RX3 –> PB_11
    • TX3 –> PB_10
  • Serial6 подключается через инвертор (5 В становится 0 В и наоборот) и может использоваться как линия SBUS. Серийный номер 6 отображается следующим образом:
    • RX6 –> ПК_7
    • TX6 –> ПК_6
  • Serial1 отображается следующим образом:
    • RX1 –> PA_10
    • TX1 –> PA_9
    • однако PA_10 и PA_11 не используются в качестве UART на плате FEATHER. Чтобы включить их, вы можете отредактировать файл hardware/stm32/2.3.0/variants/STM32F4xx/F405RGT_F415RGT/PeripheralPins_FEATHER_F405.c.
      • В массиве PinMap_UART_TX (строка 178) раскомментируйте строку, относящуюся к выводу PA_9, и закомментируйте строку, относящуюся к выводу PB_6.
      • В массиве PinMap_UART_RX (строка 193) раскомментируйте строку, относящуюся к выводу PA_10, и закомментируйте строку, относящуюся к выводу PB_7.
  • Однако, если вы попытаетесь прочитать с этого UART, вы, вероятно, получите ненужные данные, потому что плата Feather F405 использует внешний генератор с частотой 12 МГц, тогда как omnibus F4 использует тактовую частоту 8 МГц. Чтобы исправить это, вы можете перейти к файлам, которые определяют Feather F405: hardware/stm32/2.3.0/variants/STM32F4xx/F405RGT_F415RGT/variant_FEATHER_F405.h, строка 178, которую вы прочтете: # определить HSE_VALUE 12000000U. Его нужно изменить на: #define HSE_VALUE 8000000U.
,