Загрузка кода 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¤cy=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 и аппаратную библиотеку серийных номеров, но это не помогло.
Есть ли у вас какие-либо советы, как заставить работать последовательную связь?
@LucasN, 👍3
1 ответ
Извините, что так поздно отвечаю на эту проблему, но я наткнулся на ту же проблему. После многих часов отладки вот что я нашел:
- Серийный номер по умолчанию (например, серийный номер, который вы будете использовать с помощью объекта
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
.
- Не удалось преобразовать «digitalWrite(8u, 1u)» из «void» в «bool»
- Stm32 Blue Pill Внутренняя Конфигурация Опорного напряжения АЦП
- Stm32 Blue Pill Внутреннее опорное напряжение Arduino IDE
- Преобразование необработанных данных IIS2MDC в угол
- C++ против языка Arduino?
- avrdude ser_open() can't set com-state
- Как читать и записывать EEPROM в ESP8266
- Float печатается только 2 десятичных знака после запятой