Использование Adafruit SSD1306 тормоза DFU

Shodan8192
Пн, сентябрь 03, 2018 12:31
У меня есть черные таблетки Robotdyn с SSD1306 OLED, прикрепленным к I2C1 с правильными подтягиваниями.
Я использую последние версии загрузчика, файлов arduino_stm32 и немодифицированных Adafruit GFX и SSD1306.

Следующий код, снятый до минимума: // RTC and NVRam initialisation #include RTClock rt (RTCSEL_LSI); // initialise RTC #define TZ "UTC+1" time_t tt; //time_t tt1; char weekday1[][7] = {"Nie", "Pon", "Wto", "Sro", "Czw", "Pia", "Sob"}; // 0,1,2,3,4,5,6 //char weekday1[][7] = {"Niedzi", "Ponied", "Wtorek", "Sroda", "Czwart", "Piatek", "Sobota"}; // 0,1,2,3,4,5,6 #include OLED myOLED(6, 7, 8); //SDA = 6, SCL = 7, RESET = 8 Niepodłaczone extern uint8_t SmallFont[]; //extern uint8_t MediumNumbers[]; extern uint8_t BigNumbers[]; //extern uint8_t Standard5x7[]; #define LED_PIN LED_BUILTIN // This function is called in the attachSecondsInterrpt void blink () { digitalWrite(LED_PIN,!digitalRead(LED_PIN)); } void setup() { myOLED.begin(); myOLED.setFont(SmallFont); //myOLED.setFont(Standard5x7); pinMode(LED_PIN, OUTPUT); rt.attachSecondsInterrupt(blink);// Call blink } void loop() { if (rt.getTime()!=tt) { tt = rt.getTime(); Serial.print("Time is: "); Serial.println(tt); serialCurrentTime(); SetTime(); oledCurrentTime(); } } void serialCurrentTime() { //rtclock.breakTime(tt, mtt); char Buf[24]; snprintf(Buf, sizeof(Buf),"%s %04d/%02d/%02d %02d:%02d:%02d", weekday1[rt.weekday()],(rt.year()+1970),rt.month(),rt.day(), rt.hour(),rt.minute(),rt.second()); Serial.println(Buf); } void SetTime() { Serial.println("Podaj datę i czas w formacie yyyy-mm-dd hh:mm dzien(1..7)"); while (Serial.available() > 0) { int Year = Serial.parseInt(); int Month = Serial.parseInt(); int Day = Serial.parseInt(); int Hour = Serial.parseInt(); int Minute = Serial.parseInt(); int Wkday = Serial.parseInt(); if (Serial.read() == '\n') { int Sec = 0; int Yr = Year - 1970; tm_t mtt = { Yr, Month, Day, Wkday, 11, Hour, Minute, Sec }; tt = rt.makeTime(mtt); rt.setTime(tt); } } } void oledCurrentTime() { char Buf[22]; //Wyświetl datę myOLED.clrScr(); snprintf(Buf, sizeof(Buf),"%s %04d/%02d/%02d", weekday1[rt.weekday()],(rt.year()+1970),rt.month(),rt.day()); myOLED.setFont(SmallFont); // myOLED.setFont(Standard5x7); myOLED.print(Buf,CENTER,0); //Wyświetl czas snprintf(Buf, sizeof(Buf),"%02d-%02d-%02d", rt.hour(),rt.minute(),rt.second()); // myOLED.print(Buf,CENTER,9); // myOLED.setFont(MediumNumbers); myOLED.setFont(BigNumbers); myOLED.print(Buf,CENTER,18); myOLED.update(); }

Mrburnette
Пн, сентябрь 03, 2018 13:20
Просто чтобы прояснить:

Эта доска (или такая же распина http: // wiki.STM32duino.com/index.PHP?title = black_pill

Этот загрузчик: http: // wiki.STM32duino.com/index.PHP?тип ... ws_machine

Какое ядро: "файлы arduino_stm32" ? Возможно "ядро Роджера" https: // github.com/rogerclarkmelbourne/arduino_stm32
Если это так, вы выбрали, как указано в #3 и #4
Начиная
1. Купить черную таблетку
2. Сжечь загрузчик
3. В разделе «Инструменты → плата» выберите «Generic STM32F103 Series»
4. В разделе «Инструменты → Метод загрузки» выберите «STM32Duino Bootloader»
5. Выберите правильный COM -порт
6. Откройте эскиз Blink, измените номер PIN -кода на PB12
7. Нажмите на загрузку

Shodan8192
Пн, сентябрь 03, 2018, 20:21
Моя доска именно такая: http: // wiki.STM32duino.com/index.PHP?тип ... Black_pill

Я использую "ядро Роджера" https: // github.com/rogerclarkmelbourne/arduino_stm32
и его загрузчик: https: // github.com/rogerclarkmelbourne/ ... не?RAW = TRUE
Моя доска настроена правильно.

Я работал над своей программой в течение некоторого времени, и все было правильно с DFU, пока я не представил SSD1306 OLED и код для нее. Дисплей работает с начала, но в то же время DFU перестал работать. Если я прокомментирую код, обрабатывающий OLED, то DFU снова работает.

Я использую Platformio в коде Visual Studio, и есть GCC 7.2.1 в нем. Теперь я вспомнил, что когда я собрал прошивку Espruino для STM32F4 с GCC 7.x это частично или вообще не работало. Может быть, вот причина (слишком агрессивная оптимизация) ?

Мадиас
Пн, сентябрь 03, 2018, 21:26
[Shodan8192 - Пн, сентябрь 03, 2018 8:21 вечера] - Я использую Platformio в коде Visual Studio, и есть GCC 7.2.1 в нем. Теперь я вспомнил, что когда я собрал прошивку Espruino для STM32F4 с GCC 7.x это частично или вообще не работало. Может быть, вот причина (слишком агрессивная оптимизация) ?
Если вам это нравится или нет, это хорошая идея, чтобы запустить стандартную Arduino IDE, как рекомендовано, прежде чем попробовать такие вещи, как Slaeber, Platformio и другие вещи.
Сначала: у вас будет настройка программного обеспечения WICH для работы с STM32DUINO, во втором вы сможете сбросить неисправность (или нет, тогда мы собираемся помочь вам дальше!)
Так же, как код (библиотека) работает со стандартной IDE?

Shodan8192
Вторник 04 сентября 2018 г. 7:50 утра
Так же, как код (библиотека) работает со стандартной IDE? После копирования инструментов инструментов Arm-None-Eabi (который 4.8.3-2014Q1) от Arduino IDE до Platformio и программы перекомпилирования, OLED и DFU теперь работают вместе.

И там мои вопросы: можно получить полную рабочую программу, используя новейший набор инструментов ARM ? Что именно вызывает проблемы ? Может быть, есть некоторые флаги, чтобы усилить совместимость со старинными инструментами ?

Стивестронг
Вторник 04 сентября 2018 г. 9:04
У меня также есть некоторые проблемы с релизом GCC 7 Q1.
Очень громоздко идентифицировать ошибки компилятора, поэтому вам лучше обслуживаться с тестируемой рабочей версией, чем поиск иглы в стоге сена.

Shodan8192
Вторник 04 сентября 2018 г. 10:05 утра
Итак, хорошо, я должен придерживаться инструментов из Arduino Ide.

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

Хейсан
Вторник 04 сентября 2018 г. 13:16
4.X GCC на самом деле довольно багги. Ряд ошибок был исправлен в более новых версиях, которые могут изменить способ составления кода. Компилятор почти всегда выпускает предупреждение, когда он собирает код, который по -разному составлял бы в более ранних версиях.

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

Shodan8192
Вторник 04 сентября 2018 г. 20:15
Компиляция с GCC 7.2.1 дает дополнительные предупреждения в сравнении с 4.8.3 о вводящих в заблуждение намерения в библиотеке SPI, которую я не использую (включен в Adafruit Oled Lib). Ни одно из предупреждений не выглядит актуальным в проблеме DFU.

Исправление для более новых GCC было объединено в STM32Duino-Bootloader, так что завтра я постараюсь скомпилировать его с GCC 7 и посмотрю, хорошо ли он играет с кодом пользователя, созданным с той же версией.

Mrburnette
Ср. 05 сентября 2018 г. 1:25 утра
[Shodan8192 - Вторник 04 сентября 2018 г. 10:05 утра] - Итак, хорошо, я должен придерживаться инструментов из Arduino Ide.

Для меня трудно признать, что я не могу использовать более новый инструмент (Я также проверил на GCC 6.3.1 без повезло)
Я слышу это отношение слишком часто. Вы не можете делать то, что хотите, и вдруг это проблема форума /не.

Этот форум назван «Arduino для STM32», и это означает использование Arduino IDE и столько же поведения и синтаксиса Arduino, которые можно разумно раскатывать в ядре. Где синтаксис отличается, почти всегда поддерживает улучшения в UC STM32.

Ядра, оба STM32 от Roger (от Leaflab), так и официальное ядро ​​STM32 от STM и общего ядра предназначены для использования с Arduino IDE. Выход за пределы этого ограниченного, «Протестированная» среда - это ваша ответственность. Ряд участников используют Slober, и есть нить, в которой рассказывается о уроках; Но это не обычный бизнес на форуме. Вы можете опубликовать публикацию в разделе IDE, но это неуместно публиковать в разделе «Общие».

Луча

Shodan8192
Ср. 05 сентября 2018 г., 9:54
[Shodan8192 - Вторник 04 сентября 2018 г. 20:15] - Я постараюсь скомпилировать его с GCC 7 и посмотрю, хорошо ли он играет с кодом пользователя, созданным с той же версией.
Я собрал STM32Duino-Bootloader с GCC 7.2.0 и это работает, но ничего не изменилось.

[Mrburnette - Ср 05 сентября 2018 г. 1:25 утра] - Вы можете опубликовать публикацию в разделе IDE, но это неуместно публиковать в разделе «Общие».
Когда я начал эту ветку, я понятия не имел, в чем проблема, поэтому я разместил здесь. Теперь раздел не только неуместен, но и тема. Это должно быть похоже на «в некоторых случаях DFU перестать работать, когда программа была построена на Platformio с GCC 7.x "

Нельзя исключить, что в будущем инструментах Arm будет обновлена ​​в Arduino IDE, и тогда у большего количества пользователей будут проблемы, как у меня. Я продолжу расследование, и если найду решение, я опубликую его в разделе «IDE».

Shodan8192
Пт 14 сентября 2018 г. 22:26
Как выясняется, проблема также может применяться к любой версии IDE и компилятора, которую я опубликовал описание и решение здесь: ViewTopic.PHP?F = 53&T = 4125

F4 DFU Bootloader