Softwareserial

Mrburnette
Пн 27 апреля 2015 г. 13:50
С 3 аппаратными последовательными портами на клене маловероятно, что Softwareserial понадобится, пока не поймут, что некоторые библиотеки Arduino (например, GPS Adafruit) наследуют от Softwareserial. Если вы только что играете в день, изменение библиотеки GPS может быть не тем, что вы действительно хотите сделать.

Teensy3.1 уже столкнулся с этой делимой здесь: https: // форум.PJRC.com/threads/17461-so ... 3-й седы

Я принял изменения Павла и адаптировал его к Maple STM32. Это был быстрый взлом, но я могу запустить код GPS Adafruit на Maple Mini без проблем Softwareserial. Я прикрепил .рука .Файлы CPP, которые компилируются; Для других сторонних библиотек могут потребоваться дополнительные модификации.

Финальный проект скамейки здесь: http: // www.хакерс.io/rayburne/color-b ... время


Луча

Мадиас
Пн 27 апреля 2015 г. 14:41
Отличная работа, Рэй! :)
В настоящее время я нашел беспорядок на (Arduino) эскизах или LIBS, включая этот «SW Serial», и было раздражающе устранять эти линии из каждого эскиза!
Спасибо!

Рик Кимбалл
Пт, 01 мая 2015 г. 1:35
Аккуратный материал ...

Один вопрос. Я заметил, что вы используете .\ вместо ./ для ваших #includes ..
... much deleted -I/mnt/vbox/shared/Arduino_STM32_Sketch/hardware/Arduino_STM32/STM32F1/libraries/SPI/src -I/mnt/vbox/shared/Arduino_STM32_Sketch/hardware/Arduino_STM32/STM32F1/libraries/Wire /tmp/build2989123648752632366.tmp/Adafruit_GPS.cpp -o /tmp/build2989123648752632366.tmp/Adafruit_GPS.cpp.o /tmp/build2989123648752632366.tmp/Adafruit_GPS.cpp:6:28: fatal error: .\Adafruit_GPS.h: No such file or directory #include ".\Adafruit_GPS.h" ^ compilation terminated. Error compiling.

Ахулл
Пт, 1 мая 2015 г., 9:32
Я заметил эту проблему несколько раз в прошлом, это обычно просто исправить. Было бы лучше, однако, если бы версия Arduino IDE обработала это для вас. Может быть, стоит упомянуть об этом на страницах Arduino IDE или на страницах ошибок.

Robtillaart
Солнце 10 мая 2015 г., 17:21
На форуме Arduino я провел несколько расследований, чтобы заменить таблицы жестко закодированных поисков на формулы.
Также может быть полезен для STM32, так как вы можете сделать любую скорость бода, тогда

См. Обсуждение - http: // форум.Ардуино.CC/INDEX.PHP?Тема = 138497.0 -

Rogerclark
Пн 11 мая 2015 г. 12:57 утра
Я не уверен, насколько это было бы возможно, но почему бы не создать программный класс, который просто называет внутренний аппаратный сериал

Я не вижу смысла в выполнении истинного программного сериала с количеством аппаратных портов на плате, кроме вы не можете указать булавки, которые вы хотите использовать.

По крайней мере, вещи скомпилируются.

Рэй, так что у вас есть пример класса, который наследует от Softwareserial, на который мы могли бы посмотреть ?

Mrburnette
Пн 11 мая 2015 г., 2:00 утра
Rogerclark написал:Я не уверен, насколько это было бы возможно, но почему бы не создать программный класс, который просто называет внутренний аппаратный сериал

Я не вижу смысла в выполнении истинного программного сериала с количеством аппаратных портов на плате, кроме вы не можете указать булавки, которые вы хотите использовать.

По крайней мере, вещи скомпилируются.

Рэй, так что у вас есть пример класса, который наследует от Softwareserial, на который мы могли бы посмотреть ?

Rogerclark
Пн 11 мая 2015 г., 9:25
Луча,

Похоже, вы просто передаете указатель на серийный класс (на самом деле указатель на экземпляр твердого класса), а не использование библиотеки, которая наследует от сериала программного обеспечения

То, что мы имеем в данный момент, отлично работает для этого, не так ли ?

Mrburnette
Пн 11 мая 2015 г. 14:48
Rogerclark написал:Луча,
Похоже, вы просто передаете указатель на серийный класс (на самом деле указатель на экземпляр твердого класса), а не использование библиотеки, которая наследует от сериала программного обеспечения

То, что мы имеем в данный момент, отлично работает для этого, не так ли ?

Rogerclark
Пн 11 мая 2015 г., 22:14
Луча

Это звучит как хорошее решение

Мне нравится, как он переключает порт на основе выбора PIN -кода.

Хотя вам нужно знать, что это делает, но, по крайней мере, он возвращает NULL, если вы указали PIN -код, который не может использовать

Ронк
Пн 21 сентября 2015 г., 22:48
Одной из причин, по которой я использую STM32, является более аппаратный сериал, но в настоящее время я работаю над проектом, который я первоначально написал для Atmega328, который использует 4 последовательных выхода, 2 входа, плюс аппаратный последовательный порт. Таким образом, Arduino Newsoftserial отлично работала, так как каждый вход и вывод использовался только по одному (кроме аппаратного порта).

Во всяком случае, до того, как я погрузился, у кого -нибудь еще кто -нибудь перенес программного обеспечения в STM32? Простая модификация, упомянутая в этой теме.

Спасибо!

Rogerclark
Ср 23 сентября 2015 г., 6:14
Я не помню, чтобы его портировали. Я думаю, что люди только что написали обертки и используют аппаратный сериал, а не действительно иметь программное сериал

Ронк
Ср 23 сентября 2015 г., 7:01
Rogerclark написал:Я не помню, чтобы его портировали. Я думаю, что люди только что написали обертки и используют аппаратный сериал, а не действительно иметь программное сериал

Rogerclark
Ср 23 сентября 2015 г. 8:04
Спасибо, Рон

Программный сериал может быть удобен, особенно если он будет работать на низких скоростях E.глин. 1200 бод, как я помню, у кого -то другого, у которого были проблемы с низкими скоростями, потому что было невозможно установить серийные перегородки часов на значение, которое дало бы действительно низкие показатели бода


Re: Организация папки

Он со временем раздувается.

Я думаю, что мог бы отказаться от F3, никто не использует его вообще.

Я действительно думал о том, чтобы все ядро ​​в качестве отдельного подмодуля на GitHub, но я понял, что GitHub не автоматически помещает подмодули в файл Zip

Поэтому я теперь думаю, что было бы лучше использовать систему GitHub "выпуски", чтобы скрепить индивидуальные загрузки, например. Для F1 и для GD32 и т. Д

Когда у меня есть время...

Mrburnette
Чт 24 сентября 2015 г. 14:51
Джи,

Я думал, что сделал... Для Adafruit GPS...
Мне нужно проверить.

Луча

Да,
Первоначально опубликовано здесь:
http: // www.STM32duino.com/viewtopic.PHP?t = 6

Урок, который нужно выучить здесь, заключается в том, что этот форум теперь достаточно велик, чтобы Поиск Google по сайту настоятельно рекомендуется, прежде чем задать вопрос... Даже те из нас здесь, так как темные века не могут вспомнить все. Если вы не знаете, как искать Google по сайту, просто спросите Google.

Отсюда можно загрузить: https: // www.хакерс.io/rayburne/color- ... время
the STM32 Maple Mini board and microcontroller. The current directory name is GPS_Time_Baro Untitled file /*Please review License.h tab for use/rights information regarding included libraries GPS_Time_Baro based on original sketch by M. Ray Burnette 3/02/2014 Arduino 1.6.1 - Maple Mini Port STM32F103 by Ray Burnette 3/09/2015 PUBLIC DOMAIN by Author Sketch uses 46,360 bytes (42%) of program storage space. Maximum is 108,000 bytes. Global variables use 5,752 bytes of dynamic memory. */ #include // \Documents\Arduino\hardware\STM32\STM32F1\libraries\SPI #include // I2C \Documents\Arduino\hardware\STM32\STM32F1\libraries\Wire (legacy) #include // \Documents\Arduino\libraries\Streaming (legacy) #include ".\BMP085.h" // #include "I2Cdev.h" is pulled in also #include ".\Adafruit_GPS.h" #include ".\Adafruit_GFX.h" #include ".\Adafruit_ILI9341.h" #include ".\SoftwareSerial.h" // faux version only for STM32 Maple #include ".\Utilities.h"

Ронк
Ср. 07 октября 2015 г., 4:32
Mrburnette написал:Джи,

Я думал, что сделал... Для Adafruit GPS...
Мне нужно проверить.

Луча

Да,
Первоначально опубликовано здесь:
http: // www.STM32duino.com/viewtopic.PHP?t = 6

Урок, который нужно выучить здесь, заключается в том, что этот форум теперь достаточно велик, чтобы Поиск Google по сайту настоятельно рекомендуется, прежде чем задать вопрос... Даже те из нас здесь, так как темные века не могут вспомнить все. Если вы не знаете, как искать Google по сайту, просто спросите Google.

Концзакп
Пн, 07 ноября 2016 г., 8:16 вечера
Я хотел бы обновить эту тему. У кого -то есть полностью работающая/портовая мягкая библиотека? Я заметил это: https: // github.com/wingspinner/softserialintap но еще не пробовал это. У меня осталось всего несколько булавок на моем Maple Mini, и мне нужно получить серийный программный сериал.

Rogerclark
Пн, 07 ноября 2016 г., 21:13
Очень интересно.

Я никогда не видел этого раньше. Жаль, что люди пишут такие библиотеки и публикуют их, но никому не говорите.

Концзакп
Вторник 8 ноября 2016 г., 19:55
Rogerclark написал:Я никогда не видел этого раньше

Rogerclark
Вторник 8 ноября 2016 г., 8:52 вечера
хорошо.

Есть много побочных проектов, и я, кажется, не могу вспомнить их всех

Концзакп
Вторник 8 ноября 2016 г., 8:57 вечера
Я смог получить это с этим: https: // github.com/wingspinner/softwareserialstm32

Концзакп
Пт 02 декабря 2016 12:35
Другие проблемы:/

Есть какая -то проблема с этой библиотекой. Кажется, что он передается на цикле процессора или что -то еще. Иногда это работает, а иногда нет. Иногда этого достаточно, чтобы добавить 1 строку в код в основном цикле, а иногда необходимо добавить задержку. Например, этот код работает:
#include #include #include #define SIM800_TX_PIN PC14 #define SIM800_RX_PIN PC15 SoftSerialSTM32 mySerial(SIM800_RX_PIN, SIM800_TX_PIN); #define RFID_TX_PIN PA4 #define RFID_RX_PIN PA5 SoftSerialSTM32 mySerialRFID(RFID_RX_PIN, RFID_TX_PIN); int x = 100; void setup() { Serial.begin(115200); mySerial.begin(9600); //mySerialRFID.begin(9600); } void loop() { delay(x); String strsim = ""; if (mySerial.available () > 0) { strsim = mySerial.readStringUntil('\n'); Serial.print("SIM800L: "); for (int xi=0; xi 0) { strser += char(Serial.read ()); } if (strser != ""){ if (strser.startsWith("test")){ //check hw serial response Serial.println("serial ok"); // } else if (strser.startsWith("D")){ //change delay // strser.replace("\n",""); // strser.replace("\r",""); // strser.replace("D",""); // int outint = strser.toInt(); // x = outint; // Serial.println("New delay: "+String(outint)); // mySerial.print("AT"); //send command after delay change and wait for answer } else { mySerial.print(strser); //send command } } }

Концзакп
Пт 09 декабря 2016 г., 15:04
Любая идея ??

Ахулл
Сб 10 декабря 2016 г. 12:10
Полагается ли Softwareserial на таймеры и/или прерывания для точности его BP, если это так, то вы можете дважды использовать один и тот же таймер/прерывание. Просто мысль, и с девяти минут после полуночи здесь, вероятно, не одна из моих лучших мыслей... :?

Rogerclark
Сб 10 декабря 2016 г. 12:19
Как и интересный...

Зачем вам использовать программный сериал. Доступно много аппаратных последовательных портов.

Стивестронг
Сб 10 декабря 2016 г. 8:10 утра
Rogerclark написал:Зачем вам использовать программный сериал. Доступно много аппаратных последовательных портов.

Концзакп
Сб 10 декабря 2016 г., 9:25 утра
У меня есть много датчиков и устройств для общения с. Когда я использую TFT ILI9341 с сенсорным экраном и SD, NRF24L01+, SIM800L, ESP8266, BMP085, датчик влажности, энергетический монитор, 433 RF, RFID и т. Д ... тогда использовать только одного клена недостаточно. Во -вторых, я пытаюсь использовать аппаратные интерфейсы, чтобы получить самую высокую доступную скорость, потому что более длинный код эскизов означает, что более медленная скорость клена и клена не может получать все от устройств, таких как UART с высокой скоростью. Но иногда невозможно использовать только оборудование, как в моем случае. Вот почему я пытаюсь получить серийный программный сериал, а также i2c и другие вещи. Как в этой теме http: // www.STM32duino.com/viewtopic.PHP?f = 13&t = 864 Я использую первый сериал программного обеспечения, управляемый задержкой, потому что прерывание не только работало не только для меня.

Mrburnette
Сб 10 декабря 2016 г. 14:24
Концзакп написал:У меня есть много датчиков и устройств для общения с. Когда я использую TFT ILI9341 с сенсорным экраном и SD, NRF24L01+, SIM800L, ESP8266, BMP085, датчик влажности, энергетический монитор, 433 RF, RFID и т. Д ... тогда использовать только одного клена недостаточно.

Концзакп
Сб 10 декабря 2016 г., 19:04
Я использовал многопроцессорскую платформу с ATMEGA128P, и я не хочу этого делать снова. Я переношу весь свой код с этой многопроцессорной платформы на клен, потому что внесение изменений было для меня ужасом. Изменение одной вещи принесло другие изменения на другие процессоры и т. Д. Может быть, у меня была плохо разработанная платформа ... я не знаю. Может быть. Итак, теперь я должен придерживаться того, что выбрал. Итак, теперь у меня есть проблема с этим сериалом программного обеспечения, поэтому, если кто -то мог помочь, я буду признателен, что это :)

Кстати: теперь я также использую многопроцессоры с I2C Communication (пытаясь использовать, как это можно увидеть в другом потоке), но на этот раз по -разному :)

Рик Кимбалл
Сб 10 декабря 2016 г., 19:28
Если вы хотите использовать этот код, вы сможете заменить функцию TunedDelay () чем -то, что использует подход, который я разместил здесь:

http: // www.STM32duino.com/viewtopic.PHP ... ycle+задержка

Хотя я уверен, что использовать таймер был бы лучшим подходом, если вы действительно хотите более 3 UARTS. Сколько UARTS вам действительно нужно?

-рик

Рик Кимбалл
Сб 10 декабря 2016 г., 19:35
@konczakp, вы пробовали это?

https: // github.com/wingspinner/softserialintap
или
https: // github.com/wingspinner/softserialintcc/

Концзакп
Сб 10 декабря 2016 г., 21:30
Да, я сделал. И никто из них не работал на меня. И не только для меня в соответствии с этой темой: http: // www.STM32duino.com/viewtopic.PHP ... 4&начало = 10

Рик Кимбалл
Сб 10 декабря 2016 г., 21:32
Поэтому для усмешек я попытался изменить TunedDelay () с помощью одного, который использует DWT_TIMER: ... and someplace else I defined cycle_timer as dwt_timer and initialized it inline void SoftSerialSTM32::tunedDelay(uint32_t delay) { cycle_timer.delay_cycles(delay); }

Рик Кимбалл
Сб 10 декабря 2016 г. 22:11
Итак @konczakp, сколько UARTS вам действительно нужно?

Я мог бы представить собой решение выше, используя DWT_TIMER, может быть, работа. Вы можете использовать Software Serial для устройств, которые выводятся только. Устройства, которые используют протокол отклика команды, где вы отправляете данные, а затем ждите ответа, также может быть в порядке. Если вы ограничиваете аппаратные UARTs теми периферийными устройствами, которые отправляют вам незапрошенные данные, например, скажем, данные пользователя в терминале, все это может работать.

-рик

Mrburnette
Сб 10 декабря 2016 11:16
Концзакп написал:Я использовал многопроцессорскую платформу с ATMEGA128P, и я не хочу этого делать снова. Я переношу весь свой код с этой многопроцессорной платформы на клен, потому что внесение изменений было для меня ужасом. Изменение одной вещи принесло другие изменения на другие процессоры и т. Д. Может быть, у меня была плохо разработанная платформа ... я не знаю. Может быть. Итак, теперь я должен придерживаться того, что выбрал. Итак, теперь у меня есть проблема с этим сериалом программного обеспечения, поэтому, если кто -то мог помочь, я буду признателен, что это :)

Кстати: теперь я также использую многопроцессоры с I2C Communication (пытаясь использовать, как это можно увидеть в другом потоке), но на этот раз по -разному :)

Рик Кимбалл
Солнце 11 декабря 2016 г. 18:00
Концзакп написал:Да, я сделал. И никто из них не работал на меня. И не только для меня в соответствии с этой темой: http: // www.STM32duino.com/viewtopic.PHP ... 4&начало = 10

Концзакп
Пн 12 декабря 2016 г., 13:44
Я не знаю, как ты это делаешь :( Я не могу получить эту работу. Вот мой тестовый код:
#include //#include #define TX_PIN PC14 #define RX_PIN PC15 SoftSerialInt mySerial(RX_PIN, TX_PIN, 4); //SoftSerialSTM32 mySerial(RX_PIN, TX_PIN); unsigned long previousMillis = 0; const long interval = 2000; void setup() { Serial.begin(115200); mySerial.begin(9600); } void loop() { unsigned long currentMillis = millis(); if (mySerial.available() > 0){ Serial.println(mySerial.readStringUntil('\n')); } if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; mySerial.println("AT"); Serial.println("Sent"); } }

Mrburnette
Пн 12 декабря 2016 г. 14:01
Концзакп написал:<...>
Если я использую SofterialStm, он работает, а если я перехожу на softerialcc, это не. Я пробовал все 4 таймера. Где проблема? Означает ли это, что я могу использовать только те булавки, которые прикреплены к ним таймер, и вариант ШИМ? Тогда это должно работать с UART 1, который я пробовал, и я также не могу получить эту работу.
<...>?

Концзакп
Пн 12 декабря 2016 г. 15:17
@mrburnette, так как несколько постов вы говорите, насколько я неправ и насколько сильно мой проект, разработанный саркастичным способом, который невероятный IMO. Пока вам нечего сказать в теме этой темы! Как вы писали, на этом форуме много блестящих людей, с очень хорошими навыками программирования, желающими помочь. Я также помогаю, если у меня есть знания по этой конкретной проблеме. Как я писал ранее, проблема не в том, что у меня есть один рабочий код, и мне нужно другое решение, но проблема в том, что он не работает хорошо, и я сделал несколько тестов, просящих помощь. Вы бы знали, что если бы вы прочитали всю тему. И да, может быть, кто -то укажет мне что -то очевидное, но я стараюсь с этим с нескольких дней и я застрял. Может быть, когда -нибудь кто -нибудь покажет вам что -то очевидное для всех, но не для вас! Это изменит что угодно? Но форум IMO - это место, где можно помочь друг другу, не будучи невежливым. Более того, здесь также люди с базовыми навыками, готовыми построить что -то и задавая, как вы сказали «очевидные» вопросы. С вашим отношением я бы предпочел сказать, что вы думаете, что этот форум только для квалифицированных программистов Hi. Я не хочу тратить ваше время, так что просто отписаться от этой темы, если у вас есть что сказать в теме Softwareserial.

Рик Кимбалл
Пн 12 декабря 2016 г. 15:22
Концзакп написал:Я не знаю, как вы это делаете, я не могу работать. Вот мой тестовый код:

Mrburnette
Пн 12 декабря 2016 г., 16:45
Концзакп написал:@mrburnette, так как несколько постов вы говорите, насколько я неправ и насколько сильно мой проект, разработанный саркастичным способом, который невероятный IMO. Пока вам нечего сказать в теме этой темы!
<...>

Рик Кимбалл
Пн 12 декабря 2016 г., 16:50
FWIW: Использование платы Bluepill STM32 в качестве Arduino не для новичков.

Ваш лучший путь к успеху - начать с Maple Mini Poard. Оригинальный Maple Arduino Core был написан для Maple Mini и его старшего брата. Конфигурация и большинство проблем были решены людьми задолго до того, как мы приехали сюда. Когда возникают проблемы с Maple Mini, это, скорее всего, ваш код. Core STM32Duino началось с кода Maple Core и был перенесен в Arduino 1.5.х. По пути мы могли бы создать новые проблемы.

Если это ваш первый родео с STM32, ваш первый шаг должен быть для получения клона Maple Mini. Как только вы перейдете на следующий уровень использования общего STM32 (Bluepill/Redpill любую другую доску), вы будете гораздо больше. Как сообщество, мы надеемся, что люди станут экспертами по предмету о том, что близко и дорогие их сердцам и придут сюда больше, чтобы поделиться тем, как вы что -то исправили, чем задавать вопросы.

Я нахожу сериал программного обеспечения несколько интересной проблемой, и поэтому я удосужился углубиться в проблемы.

-рик

Mrburnette
Пн 12 декабря 2016 г., 17:12
@rick: Я нахожу сериал программного обеспечения несколько интересной проблемой, и поэтому я удосужился углубиться в проблемы. С 3 физическими USART в прошлом мало нужды. Текущая проблема, по-видимому, заключается в том, что одна из версий Рона не поддерживает многочисленное место-или у OP возникли проблемы с настройкой мульти-инстанции, оставляя один серийный порт коротким для порта.

Мне трудно с портом, потому что каждый шаг, по -видимому, связан с некоторой критической проблемой, которая должна быть решена, и OP должен полагаться исключительно на форум, поскольку это их первый опыт работы с STM32. Из постов появляется, что у OP есть Maple Mini от Baite, но также использует синюю таблетку, которая, кажется, является конечной целью. Но в общем процессе порта предусмотрена драгоценное мало.

Я хочу, чтобы каждый проект STM32 был успешным; Распространение этого даже на AVR и ESP8266.

Луча

Рик Кимбалл
Пн 12 декабря 2016 г., 17:53
Mrburnette написал:@rick:
С 3 физическими USART в прошлом мало нужды. Текущая проблема, по-видимому, заключается в том, что одна из версий Рона не поддерживает многочисленное место-или у OP возникли проблемы с настройкой мульти-инстанции, оставляя один серийный порт коротким для порта.

Mrburnette
Пн 12 декабря 2016 г., 18:41
Рик Кимбалл написал:Mrburnette написал: <...> Примеры, предоставленные @ronc, работают только для какой -то неизвестной доски. Чтобы этот материал работал с чертежом или любой другой доской, вы должны выбрать определенные булавки, как я наметил в этом длинном посте о таблице PIN_MAP. Похоже, в нескольких случаях нет ничего плохого, если вы выбираете правильные булавки и таймеры.

Этот пример мульти -экземпляра работает нормально:
<...>
Приведенный выше код работает и показывает, что вы можете использовать разные экземпляры и даже разные скорости, не пройдя неудачу.

Этот код на основе таймера SoftserialIntCC на самом деле работает довольно хорошо. Я посмотрел на импульсы на прицеле, и немного раз на день. Однако этот код жевать кучу таймеров и каналов таймера (1,2 и 3). Заставлять его работать должным образом, требуется понимание таблицы карт штифтов для вашей платы и то, как захват / сравнение таймера работает на STM32. Знание того, где посмотреть в таблице данных STM32F103, также важно, чтобы таблица карты вашей штифт использует правильный таймер и канал для каждого вывода.

-рик

Концзакп
Пн 12 декабря 2016 г., 8:30 вечера
Спасибо, Mych Rick ! Теперь все ясно. Я думал, что вы говорите о SofterialStm, а не Softserialcc, потому что я спросил о обоих. Теперь я знаю, как выбрать номер PIN -кода, чтобы он работал. Я очень ценю это! Большое спасибо за помощь.

Рик Кимбалл
Вт 13 декабря 2016 г., 5:06 утра
Вот обертка, чтобы облегчить использование Softerialintcc: /* TimerSerial.h - simple wrapper for SoftSerialIntCC.h As SoftSerialIntCC only works on specific pins and timer combinations this header declares the valid TimerxSerial pins that work on both the bluepill and the maple_mini The 'x' indicates which timer is being used. SoftSerialIntCC uses 3 of the timer channels (1,2, and 3) Channel 1 must be the tx pin Channel 2 must be the rx pin, Channel 3 is used for a timeout Seeo: https://github.com/wingspinner/SoftSerialIntCC/ */ #ifndef _TIMERSERIAL_H_ #define _TIMERSERIAL_H_ #include SoftSerialInt Timer1Serial(PA9, PA8, 1); // 26, 27 on maple mini SoftSerialInt Timer2Serial(PA1, PA0, 2); // 10, 11 on maple mini SoftSerialInt Timer3Serial(PA7, PA6, 3); // 4, 5 on maple mini SoftSerialInt Timer4Serial(PB7, PB6, 4); // 15, 16 on maple mini #endif

Концзакп
Вт 13 декабря 2016 г., 11:41
Это работает как очарование! Спасибо еще раз. Ты мне очень помог, и я думаю, что не только я :) Эта тема является первой в Google, когда кто -то введет STM32 Serial Serial.

Стивестронг
Вт 13 декабря 2016 г. 12:24
Поскольку для серийного программного обеспечения используются много GPIOS, следующим шагом будет реализация программного обеспечения SPI, USB, CAN и I2C, потому что контакты HW-SPI, -USB, -CAN и I2C используются для последовательного программного обеспечения... ;)

Ореховый
Ср. 01 марта 2017 г. 15:54
Привет, ребята, новая маленькая проблема для меня... Я получаю ошибку, не найденную...
Его там и место, которое говорит, что не обнаружилось, что в библиотеке есть библиотека... Я немного озадачен.
Любые идеи?

ZMEMW16
Ср. 01, 2017, 15:56
Проверьте файл свойств ? Ограниченная платформа ?
Стивен

Стивестронг
Ср. 01, 2017, 16:24
У меня также есть проблема, не получая подписей из космоса... : mrgreen:

Ореховый
Ср. 01, 2017, 16:45
где файл свойств? не могу найти это для библиотеки

ZMEMW16
Ср. 01, 2017, 17:00
библиотека.Свойства - в папке библиотек; В моем случае/home/stephen/sketchbook/библиотеки/adafruit_gfx/библиотека.характеристики
содержимое есть name=Adafruit GFX Library version=1.1.5 author=Adafruit maintainer=Adafruit sentence=Adafruit GFX graphics core library, this is the 'core' class that all our other graphics libraries derive from. paragraph=Install this library in addition to the display library for your hardware. category=Display url=https://github.com/adafruit/Adafruit-GFX-Library architectures=*

Ореховый
Чт, 02 марта 2017 г., 11:32
Я не подаю в суд на библиотеку GFX... Просто пытаюсь стать мягким... это действительно странно

ZMEMW16
Чт, 02, 2017, 16:43
Я не говорил этого, я просто вставил это, чтобы показать линию архитектуры в библиотеке.Файл свойств
SRP

Асмаллри
Чт 21 декабря 2017 г., 4:50 утра
Этот пример мульти -экземпляра работает нормально:... Это не работает правильно. Пример показал угловой случай, где он работал. Однако, если вы попытаетесь проверить его наоборот, где другой порт пытается получить данные, он не работает.

Рик Кимбалл
Чт 21 декабря 2017 г., 5:04
Не могли бы вы опубликовать код, который не работает, пожалуйста?

Асмаллри
Чт 21 декабря 2017 г., 21:31
Я попробовал драйверы AT и CC, у всех есть проблемы. Некоторые программные UART могут получать, но не передавать, другие могут передавать, но не получать.Вот один простой пример, который демонстрирует проблему. Одна реализация, которую я протестировал, работала на 19 символов, а затем перестала работать. Код, который я опубликовал ниже код, может работать в течение короткого периода времени (несколько минут), но обычно просто не работает.

Платформа, которую я использую, представляет собой BluePill STM32F103, работающий на 72 МГц.

В этом примере я использовал один аппаратный UART (Serial 1) и одно программное обеспечение UART. Я добавил операторы LED в и выключение и задержку на 100 мс, чтобы вы могли видеть, когда персонаж был получен соответствующим UART.

Симптомы этого примера - когда процессор сброшен, начальные сообщения запуска правильно отправляются из обоих последовательных портов. Когда символы вводятся на терминале, подключенном к входу приема HW UART, символ повторяется как к терминалу, прикрепленному к HW UART, так и программному обеспечению UART и светодиодам соответствующим образом указывают, что символ был получен HWART.

Когда символы вводятся на терминале, подключенном к входу приема SWAART, символ не повторяется ни в один из терминалов, однако светодиоды соответствующим образом указывают, что символ был получен SWAART. Мой вывод для этого конкретного примера - время для чтения SW сломано.
#include "TimerSerial.h" #define ConsoleSerial Serial1 #define StatusLed PC13 #define StatusLedOn digitalWrite(StatusLed, LOW) #define StatusLedOff digitalWrite(StatusLed, HIGH) void setup() { pinMode(StatusLed, OUTPUT); ConsoleSerial.begin(57600); // set the data rate for the SoftwareSerial port Timer2Serial.begin(9600); // (PA1,PA0) } void loop() // run over and over { ConsoleSerial.println(""); ConsoleSerial.println("ConsoleSerial is active"); Timer2Serial.println("Timer2Serial is active"); while (1) { if (ConsoleSerial.available()) { digitalWrite(StatusLed, LOW); int c = ConsoleSerial.read(); ConsoleSerial.write(c); Timer2Serial.write(c); delay(100); digitalWrite(StatusLed, HIGH); } if (Timer2Serial.available()){ digitalWrite(StatusLed, LOW); int c = Timer2Serial.read(); Timer2Serial.write(c); ConsoleSerial.write(c); delay(100); digitalWrite(StatusLed, HIGH); } } }

Рик Кимбалл
Вт 06 февраля 2018 г. 5:22 утра
Я внес небольшие изменения в ваш код. Я не повторяю Timer4Serial . Чтобы проверить, я использовал опцию локального Echo на терминале Pulty для Timer4Serial. Это позволяет вам отправлять много данных без переполнения.

Я также забрал, пока не исчерпал доступный ввод вместо того, чтобы захватывать по одному персонажу за раз из каждого. Я предполагаю, что ваше использование в реальном мире будет отправлена ​​командой, а затем тип ответа ситуации. Настройте для вашего случая, если это не так #include "TimerSerial.h" #define ConsoleSerial Serial #define SlaveSerial Timer4Serial #define StatusLed PC13 #define StatusLedOn digitalWrite(StatusLed, LOW) #define StatusLedOff digitalWrite(StatusLed, HIGH) void setup() { pinMode(StatusLed, OUTPUT); ConsoleSerial.begin(115200); // set the data rate for the SoftwareSerial port SlaveSerial.begin(115200); // (PB7,PB6) while(!ConsoleSerial.isConnected()); } void loop() // run over and over { ConsoleSerial.println(""); ConsoleSerial.println("ConsoleSerial is active"); SlaveSerial.println("SlaveSerial is active"); while (1) { if (ConsoleSerial.available()) { //digitalWrite(StatusLed, LOW); int c; while((c = ConsoleSerial.read()) != -1 ) { SlaveSerial.write(c&0xff); ConsoleSerial.write(c&0xff); } //digitalWrite(StatusLed, HIGH); } if (SlaveSerial.available()){ digitalWrite(StatusLed, LOW); int c; while( (c=SlaveSerial.read()) != -1 ) { //SlaveSerial.write(c); ConsoleSerial.write(c); } digitalWrite(StatusLed, HIGH); } } }

Асмаллри
Пт. 09 февраля 2018 г., 2:17
Спасибо, Рик, однако это был не мой производственный код, это был мой код, чтобы продемонстрировать проблему.

Тестирование было проведено путем вручную, замедляя печатные символы на клавиатуре. Не было шансов переполнить буфер. Светодиодный код и задержка были добавлены, чтобы Flash светодиод при обработке персонажа. Это показало мне, что персонаж был получен из логики приема. Причина, по которой я повторил персонаж, заключалась в том, чтобы специфически посмотреть, был ли символ эхо таким же, как и переданный символ - он не был.

Я обнаружил, что код очень безумным, иногда он работал в течение нескольких минут, иногда он потерпел неудачу быстро.