STM32 F103C8T6

Юрий48
Offline
Зарегистрирован: 19.06.2018

Общаюсь с Blue Pill через ST-Link. USB свободен. Захотелось кой какие данные выводить на ПК. Подскажите, пожалуйста, как для этой платы организовать виртуальный Com порт на ПК? 1. какие драйвера поставить на компьютер и 2. что залить в платку?

b707
Offline
Зарегистрирован: 26.05.2017

Драйвера ставятся, когда добавляете поддержку СТМ32 в Ардуино ИДЕ. Их можно взять в этой статье

Вывод в Serial на СТМ32 точно такой же, как и в любой ардуине - Serial.print("Hello world!");

Юрий48
Offline
Зарегистрирован: 19.06.2018

b707 пишет:

Драйвера ставятся, когда добавляете поддержку СТМ32 в Ардуино ИДЕ. Их можно взять в этой статье

Вывод в Serial на СТМ32 точно такой же, как и в любой ардуине - Serial.print("Hello world!");

Спасибо. Неожиданная заморочка. При запуске install_drivers.bat выдаётся сообщение ".....wdi-simple.exe не является приложением Win32. ОС Windows XP.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Юрий48 пишет:

b707 пишет:

Драйвера ставятся, когда добавляете поддержку СТМ32 в Ардуино ИДЕ. Их можно взять в этой статье

Вывод в Serial на СТМ32 точно такой же, как и в любой ардуине - Serial.print("Hello world!");

Спасибо. Неожиданная заморочка. При запуске install_drivers.bat выдаётся сообщение ".....wdi-simple.exe не является приложением Win32. ОС Windows XP.

а у вас точно - ST-LINK_USB_V2_1_Driver

b707
Offline
Зарегистрирован: 26.05.2017

Юрий48 пишет:

 При запуске install_drivers.bat выдаётся сообщение ".....wdi-simple.exe не является приложением Win32. ОС Windows XP.

тут ничего сказать не могу - в Win7 x64 драйвера ставятся сами, как только первый раз втыкаешь плату в порт

Юрий48
Offline
Зарегистрирован: 19.06.2018

ua6em пишет:

а у вас точно - ST-LINK_USB_V2_1_Driver

Не очень понимаю при чём в данном случае ST-LINK. С ним у меня проблем нет. Через него спокойно программирую платку. Сей час речь идёт об организации вывода данных через USB. И ошибка выдаётся при запуске инстолятора драйверов, взятого от сюда. Просьба откликнуться тех, кто работает в XP - драйверы устанавливаются правильно? Решил потанцевать с бубном. В папке драйверов отыскал все файлы с расширением inf, их оказалось три. Запустился только один, относящийся к  maple-dfu. В диспетчере устройств появилась "чистое", без жёлтых вопросов устройство, соответствующее maple-dfu. Правда проверить не смог по причине поздного времени. Сегодня вечером попробую. Но меня это всё равно не спасает поскольку не знаю, как организовать подключение программ, работающих с виртуальным COM портом, то есть надо в диспетчере увидеть номер COM порта.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Юрий48 пишет:

ua6em пишет:

а у вас точно - ST-LINK_USB_V2_1_Driver

 Но меня это всё равно не спасает поскольку не знаю, как организовать подключение программ, работающих с виртуальным COM портом, то есть надо в диспетчере увидеть номер COM порта.

Не надо ничего организовывать, надо чтобы после того как найдется DFU установился виртуальный сом порт, у меня он установился, но не сразу ))) пару десятков раз пришлось платку подёргать, XP SP3, загрузчик IDE в плату естественно прошит!?
Ставил mapple-serial x86 (installer_x86.exe)

Юрий48
Offline
Зарегистрирован: 19.06.2018

ua6em пишет:
Не надо ничего организовывать, надо чтобы после того как найдется DFU установился виртуальный сом порт, у меня он установился, но не сразу ))) пару десятков раз пришлось платку подёргать,

Такая мысль была, но сил уже не было попробовать

ua6em пишет:
XP SP3, загрузчик IDE в плату естественно прошит!?

Не могу догадаться о чём идёт речь. По инструкции в плату загружал generic_boot20_pc13.bin. Это оно?

b707
Offline
Зарегистрирован: 26.05.2017

Юрий48 пишет:

ua6em пишет:
XP SP3, загрузчик IDE в плату естественно прошит!?

Не могу догадаться о чём идёт речь. По инструкции в плату загружал generic_boot20_pc13.bin. Это оно?

ОНО

Юрий48
Offline
Зарегистрирован: 19.06.2018

Виртуальный COM порт установить удалось. С помощью STM32 ST-LINK Utility загрузил в плату, как вы говорите, загрузчик IDE (generic_boot20_pc13.bin) предварительно поставив Boot 0 в 1. Вернул Boot 0 в 0 и подключил к ПК по USB кабелю. В диспетчере устройств появился maple-dfu. Это не удивило, поскольку рнее драйвер для него мне удалось установить (см. пост 606). Запустил Ардуино, в Uploader metod установил STM32duino bootloader и попробовал залить рабочий скетчь. На этапе загрузки IDE сказала что то про сериал порт и предложила установить драйвер. Средствами Windows в ручную указал папку maple-serial, инсталлер подхватил и произвёл установку и дозалил скетч. Программа заработала адекватно. В диспетчере устройств появился виртуальный COM порт maple-serial. Ранее, без запуска ардуино, на все установочные файлы Windows ругался. Я так понимаю, что что то им без ардуино не хватало. В общем я рад за себя и спасибо всем кто направлял.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Юрий48 пишет:

 На этапе загрузки IDE сказала что то про сериал порт и предложила установить драйвер. Средствами Windows в ручную указал папку maple-serial, инсталлер подхватил и произвёл установку и дозалил скетч. Программа заработала адекватно. В диспетчере устройств появился виртуальный COM порт maple-serial. Ранее, без запуска ардуино, на все установочные файлы Windows ругался. Я так понимаю, что что то им без ардуино не хватало. В общем я рад за себя и спасибо всем кто направлял.

Вот, Вы реализовали еще один способ установки драйвера, а кто говорил, что существует 99 способов )))

Юрий48
Offline
Зарегистрирован: 19.06.2018

Пока не разобрался, что то с синтаксисом, помогите, пожалуйста. При компиляции говорит, что функция HX711 не декларированна.

#define Sck_hx711 PA0         // Синхроимпульс для HX711
#define Dout_V_hx711 PA1      // Выход данных с HX711 верхнего плеча
#define Dout_N_hx711 PA2      // Выход данных с HX711 нижнего плеча

unsigned long Taimaut = 1000; // Таймаут готовности данных АЦП HX711, мксек

void setup() {
  pinMode(Sck_hx711, OUTPUT);            // Инициализация выхода синхроимпульса для HX711 
  pinMode(Dout_V_hx711, INPUT);          // Инициализация входа данных от HX711 верхнего плеча
  pinMode(Dout_N_hx711, INPUT);          // Инициализация входа данных от HX711 нижнего плеча
}

void loop() {
  hx711 (Sck_hx711, Dout_V_hx711, Dout_N_hx711, Taimaut)
}

   /*Функция опроса АЦП HX711*/
  void hx711 (uint8 Sck_hx711, uint8 Dout_V_hx711, uint8 Dout_N_hx711, unsigned long Taimaut)
      {

      }

 

b707
Offline
Зарегистрирован: 26.05.2017

поставьте описание функции выше loop()

Юрий48
Offline
Зарегистрирован: 19.06.2018

Спасибо, помогло. Но я в недоумении. В одном случае нормально компилируется с функцией размещённой после loop(), а в этом - только перед loop(). В чём прикол? Может, все функции надо размещать перед loop()?

Datak
Offline
Зарегистрирован: 09.10.2014

Юрий48 пишет:

В чём прикол? Может, все функции надо размещать перед loop()?

А вот же оно, только что было: http://arduino.ru/forum/programmirovanie/razbienie-koda-na-chasti#comment-381010

Как файл называется, в котором выдаёт ошибку?

Юрий48
Offline
Зарегистрирован: 19.06.2018

Я, до разбиения на файлы, вообще, наверняка не дойду. В общем подразобрался. Ардуино дописывает сам не хватающие обьявление, но не всегда.

MacSim
Offline
Зарегистрирован: 28.11.2012

Юрий48 пишет:

Спасибо, помогло. Но я в недоумении. В одном случае нормально компилируется с функцией размещённой после loop(), а в этом - только перед loop(). В чём прикол? Может, все функции надо размещать перед loop()?

функции требуют объявления, видимо :-)

можно размещать и после, но объявить надо до...

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Юрий48 пишет:

В общем подразобрался. Ардуино дописывает сам не хватающие обьявление, но не всегда.

Ардуино не дописывет объявления, а переносит их наверх (там, где они и должны быть). Но не надо полагаться на Arduino IDE, самостоятельно ВСЕГДА объявляйте функции вверху (выше первого использования).

Юрий48
Offline
Зарегистрирован: 19.06.2018

Jeka_M пишет:

Юрий48 пишет:

В общем подразобрался. Ардуино дописывает сам не хватающие обьявление, но не всегда.

Ардуино не дописывет объявления, а переносит их наверх (там, где они и должны быть). Но не надо полагаться на Arduino IDE, самостоятельно ВСЕГДА объявляйте функции вверху (выше первого использования).

Понятно. Просто поскольку нигде не видел обьявление функции не мог с ходу сообразить как правильно это делать.

misha99
Offline
Зарегистрирован: 02.08.2018

kisoft пишет:
Кстати, 103 камни уже староваты (есть глюки), лучше юзать что-то поновей.
  А новые это какие ? Имеется введу STM32F4xx ?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

misha99 пишет:

kisoft пишет:
Кстати, 103 камни уже староваты (есть глюки), лучше юзать что-то поновей.
  А новые это какие ? Имеется введу STM32F4xx ?

Платку прикупил STM32F407 и вопрос, как её прикрутить к IDE?

b707
Offline
Зарегистрирован: 26.05.2017

misha99 пишет:

kisoft пишет:
Кстати, 103 камни уже староваты (есть глюки), лучше юзать что-то поновей.
  А новые это какие ? Имеется введу STM32F4xx ?

прежде чем спрашивать, вы бы на дату смотрели.... Кстати, в том старом сообщении, откуда вы выдернули фразу - и ответ есть.

Платы на STM32F103 в основном используют не потому. что они очень крутые - а потому что супердешевые, Такая платка дешевле стандартной Нано. а по возможностям кроет ее и в хвост и в гриву. Платы на STM32F4xx в 4 -10 раз дороже и начинать с них нет смысла. Использовать их стоит только тем, кто освоил дешевые варианты и понял. что ему не хватает функционала.

 

misha99
Offline
Зарегистрирован: 02.08.2018

ua6em пишет:

misha99 пишет:

kisoft пишет:
Кстати, 103 камни уже староваты (есть глюки), лучше юзать что-то поновей.
  А новые это какие ? Имеется введу STM32F4xx ?

Платку прикупил STM32F407 и вопрос, как её прикрутить к IDE?

Не понял, это ко мне вопрос ? Без понятия (Если речь идет о Arduino IDE). Я использую Keil.

misha99
Offline
Зарегистрирован: 02.08.2018

b707 пишет:
Платы на STM32F103 в основном используют не потому. что они очень крутые - а потому что супердешевые, Такая платка дешевле стандартной Нано. а по возможностям кроет ее и в хвост и в гриву. Платы на STM32F4xx в 4 -10 раз дороже и начинать с них нет смысла. Использовать их стоит только тем, кто освоил дешевые варианты и понял. что ему не хватает функционала.
В серии STM32F4xx глюки с I2C остались, как были в 103 ?

ssss
Offline
Зарегистрирован: 01.07.2016

misha99 пишет:

kisoft пишет:
Кстати, 103 камни уже староваты (есть глюки), лучше юзать что-то поновей.
  А новые это какие ? Имеется введу STM32F4xx ?

Да их много и разных. Смотря для чего, какие задачи. Из копеечных - F030-е, F070-е (недотестированные F042-е), F072-е. И вплоть до Н7хх.

b707
Offline
Зарегистрирован: 26.05.2017

misha99 пишет:

В серии STM32F4xx глюки с I2C остались, как были в 103 ?

не в курсе. что за глюки. Делал один проект на F103 с использованием i2c - все работало без проблем.

ssss
Offline
Зарегистрирован: 01.07.2016

misha99 пишет:

 В серии STM32F4xx глюки с I2C остались, как были в 103 ?

Загляните в референсы и сравните регистры сами. В более новых Ф0хх и Ф3хх I2C сделали просто другой, типа совсем. Да и в 103-ем, если разобраться, то с I2C не всё ещё так плохо. Если же это всё напрягает в режиме мастера, напишите свой I2C на таймере или через SPI.

misha99
Offline
Зарегистрирован: 02.08.2018

ssss пишет:

misha99 пишет:

kisoft пишет:
Кстати, 103 камни уже староваты (есть глюки), лучше юзать что-то поновей.
  А новые это какие ? Имеется введу STM32F4xx ?

Да их много и разных. Смотря для чего, какие задачи. Из копеечных - F030-е, F070-е (недотестированные F042-е), F072-е. И вплоть до Н7хх.

я думал серия F0xx еще старее F1xx. А оказывается иначе, почему так ?

misha99
Offline
Зарегистрирован: 02.08.2018

ssss пишет:

misha99 пишет:

 В серии STM32F4xx глюки с I2C остались, как были в 103 ?

Загляните в референсы и сравните регистры сами. В более новых Ф0хх и Ф3хх I2C сделали просто другой, типа совсем. Да и в 103-ем, если разобраться, то с I2C не всё ещё так плохо. Если же это всё напрягает в режиме мастера, напишите свой I2C на таймере или через SPI.

Без DMA ? Ну так и пришлось обходить. А почему F0xx новее F1xx ?

ssss
Offline
Зарегистрирован: 01.07.2016

misha99 пишет:

А почему F0xx новее F1xx ?

Потому что сначала были 10х, потом 20х, потом 40х, потом 05х и 30х. СТМ долго тянула с М0 из-за СТМ8, но НХП и другие своими М0+ всё таки подстегнули СТМ с выпуском Ф0хх. А Ф30х-ми просто заполнили нишу между Ф20х и Ф40х, где скорость не так важна, но нужен был ФПУ. Поэтому 0хх и 3хх более новые и периферия у них поновее и получше.

Юрий48
Offline
Зарегистрирован: 19.06.2018

Я не внимателен или для этой платы функции EEPROM.get() и EEPROM.put() не поддерживаются?  Компилятор на них ругается. Библиотека EEPROM.h подключена.  Если не поддерживаются, то как записывать и читать данные, типа float?

b707
Offline
Зарегистрирован: 26.05.2017

Юрий48 пишет:

Я не внимателен или для этой платы функции EEPROM.get() и EEPROM.put() не поддерживаются?  Компилятор на них ругается. Библиотека EEPROM.h подключена.  Если не поддерживаются, то как записывать и читать данные, типа float?

не поддерживаются. Там ведь, говоря по-честному, и ЕЕПРОМ-а нет :)

Писать флоаты - "вручную" побайтно, примеров в архивах ардуино-форумов полно.

Юрий48
Offline
Зарегистрирован: 19.06.2018

Захотел передать в порт float "как есть", написал такую подпрограмму.

// запись float в COM порт
  void COM_float_write(float num) {
    byte raw[4];
    (float&)raw = num;
    Serial.println(raw);
  }

Компилятор ругнулся сообщением: "call of overloaded 'println(byte [4])' is ambiguous". Что не так? Как правильно?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

При попытке установки поддержки STM32 в Arduino IDE возникли проблемы.

Сначала пытался установить на IDE версии 1.6.5 в Windows XP/32 - не удалось: не запускаестя файл установки драйверов.

Повторил попытку с той же версией IDE в Windows 7/64, проблемы не исчезли.

Тогда попытался установить по новой в новую версию IDE (гарантированно поддерживается, начиная с 1.6.10), следуя иструкциям: http://wiki.stm32duino.com/index.php?title=Installation

Установлена новая версия Ардуино 1.8.5: http://arduino.cc/en/Main/Software

Версия сделана portable, для чего созданы папки portable, sketchbook, sketchbook\libraries, staging, перенесен файл preferenses.txt
Из менеждера плат установлена Arduino Due 1.6.11
Разархивировано: C:\Arduino\arduino-1.8.5\portable\sketchbook\hardware\Arduino_STM32\
От имени администратора запущен файл:
C:\Arduino\arduino-1.8.5\portable\sketchbook\hardware\Arduino_STM32\drivers\win\install_drivers.bat
 - установка прошла успешно (судя по диагностике на экране)
При подключении платы система выдает сообщение Unknown Device, попытка переустановить драйвер для этого устройства не приводит к успеху
Попытка прошить через ST-Link в плату бутлоадер : http://wiki.stm32duino.com/index.php?title=Burning_the_bootloader
ничего не меняет
Попытка прошить скетч blink через ST-Link не приводит к успеху - светодиод не горит.
Считывание родной прошивки из другой платы и прошивка ее в эту восстанавливает мигание светодиода, но частота мигания вдвое ниже.
 
Т.о. выявлено 2 проблемы:
- плата при подключении не опознается (Unknown device),
- при прошивке через ST-Link не работает blink.
 
Примечание: если бы плата была неисправна, вряд ли бы мигал светодиод при восстановлении старой прошивки, но вот почему он теперь мигает вдвое реже?
 
Собственно, вопрос: что еще можно предпринять?
b707
Offline
Зарегистрирован: 26.05.2017

по описанию с хабра (ссылка в сообщении #602) прошивать пробовали? Я загрузчик шил обычным переходником USB-USART. СТ-линк там не нужен, я его себе сделал, только когда СТМ8 занялся :)

И, кстати. в этой статье и драйвера есть.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Статью, естественно, читал.

Сам автор пишет о неустойчивости работы: "Не совсем понятно почему после первого подключения плата определяется по-разному", "прошивка то загрузилась успешно, хотя не всегда так", "А теперь про «ложку дёгтя»" и т.д.

Драйвера там по ссылке те же, что и в других ссылках - у меня уже, кажется, в папке Downloads скопилось штук 6-8 экземпляров этого архива, скачанных по ссылкам из разных мест.

Но, в принципе, хорошо, что напомнили, я сейчас это и попробую.

b707
Offline
Зарегистрирован: 26.05.2017

andriano пишет:

Статью, естественно, читал.

Сам автор пишет о неустойчивости работы: "Не совсем понятно почему после первого подключения плата определяется по-разному", "прошивка то загрузилась успешно, хотя не всегда так", "А теперь про «ложку дёгтя»" и т.д.

о, кстати, тоже напомнили. Практически во всех "голубых платах" на USB не тот резистор напаян - 10к вместо 1к. Поэтому платы определяются компом неустойчиво - какие-то легко, какие-то через раз, а некоторые вообще нет. Решение простое - от пина РА12 надо кинуть на +3.3в резюк 1.8К. как на картинке

Или так :)

Подробнее тут

b707
Offline
Зарегистрирован: 26.05.2017

Кстати, еще проверьте простую вещь - на каком пине у вас светодиод. В разных платах они на разных пинах, а тогда, как понимаете, блинк не заработает. Адрес светодиода обычно написан прямо рядом с ним на плате.

Люди в этой ветке уже накалывались - см #561

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. Резистор 1к8 я впаял ранее (хотя забыл написать об этом).

2. Светодиод: на плате рядом со светодиодом написано "PC13", но, в отличие от того, что указано по Вашей ссылке, он красного (а не зеленого) цвета. И еще: Я проверил blink на всех имеющихся ногах - ни на одной не работает.

3. Прошил через USB-UART. Кстати, в архиве "Дешевая..." имеется другой закгрузчик, с тем же именем - generic_boot20_pc13.bin, но 7 кБайт, а не 21. Прошивал именно его. Ничего не изменилось. Считал прошитое при помощи ST-Link'а, сравнил побайтно - все сходится. Но результата нет :(.

4. По Вашей ссылке снова обнаружил указание на дополнительный менеджер плат (ранее уже встречал упоминание, но не устанавливал). Теперь - подключил дополнительный и установил STM32: в меню выбора плат появилась вторая копия всех STM-плат. Выбрал Generic STM32F103C series. Откомпилил и залил blink с установкой платы из второй копии. Ничего не изменилось.

b707
Offline
Зарегистрирован: 26.05.2017

В итоге плата начала определяться? Загрузчик и скетч - прошиваются без ошибок? - тогда скорее всего все должно работать... ищите что-то простое, типа какой-нить описки в коде блинк...

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Плата продолжает определяться как неизвестное устройство, из диспетчера устройств драйвера (3 штуки в пакете Arduino STM32) не устанавливаются: говорит, не требуются. И USB-UART и ST-Link рапортуют о нормальной прошивке, более того, как уже писал, то, что записано USB-UART'ом, было считано ST-Link'ом и результат совпал байт в байт.

blink я загружал многократно в различных вариантах (с миганием на 1, 2, 5 или 6 ножках), кроме того, подключал внешние светодиоды к ножкам. Переделки blink не сохранял - все новые начинал с чистого листа, так что, если и были ошибки, они не попали в следующие версии blink'а.

И, возвращаясь: почему после восстановления родной прошивки частота мигания упала вдвое? От чего это вообще могло произойти?

b707
Offline
Зарегистрирован: 26.05.2017

ну тогда уж и не знаю... прошивка грузится, но не работает? - странно.

Вы джампер BOOT0 на место не забыли вернуть?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

andriano, раз блинк не мигает, и как USB девайс плата не определяется то похоже,  что МК либо не стартует вообще, либо стартует, но не на той частоте. Соответсно первое,что приходит в голову -проверить есть ли подтяжка на ресете, и проверить что на ногах кварца есть 8МГц. У меня с этой платкой вообще никаких проблем небыло..

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Да, исследуемая плата ведет себя не так, как другая, с которой я ничего не делал (кроме того, что скопировал с нее оригинальную прошивку):

На "другой": на ноге кварца со стороны PB6 - примерно 2В, со стороны PA2 - переменное напряжение менее вольта с постоянной составляющей около 2 В. На исследуемой: со стороны PB6 - 0В, со стороны PA2 - примерно 2В (переменную составляющую не видно).

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

В общем, непонятно: если генератор не работает (обрыв около PB6?), то почему с платы можно прочитать прошивку, можно записать и мигает светодиод (хоть и не с той частотой)?

 

Подтяжка ресета есть - напряжение 3.3В.

nik182
Offline
Зарегистрирован: 04.05.2015

Мне пришло 5 плат и на всех не стартовали часовые кварцы. На блинк это не влияет, но как симптом впаянных компонентов. А как среду -  attollic true studio стала бесплатной для STM. 

b707
Offline
Зарегистрирован: 26.05.2017

nik182 пишет:

Мне пришло 5 плат и на всех не стартовали часовые кварцы. На блинк это не влияет, но как симптом впаянных компонентов.

не, у них проблемы именно с часовыми кварцами - у меня тоже примерно на половине плат не стартуют. Но все остальное нормально, только на одной плате кнопка РЕСЕТ отвалилась. пришлось подпаивать.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Спасибо, dimax, пошарудил паяльником около вывода кварца (на котором 0В), после подключения - светодиод замигал с нужной частотой.

Зашил снова бутлоадер, драйвера, вроде, инициализировались, в диспетчере устройств появился Maple DFU, но пока Arduino IDE не видит COM-порт. В общем, буду разбираться дальше...

 

Никогда не думал, что придется шарудить паяльником по внутренностям отладочной платы (кроме внешней гребенки).

Юрий48
Offline
Зарегистрирован: 19.06.2018

Надо передавать из платы в свою программу на ПК переменные типа float так, как они записаны, то есть 4 байта. Создал свою программу

float Iss = 1.2; 
unsigned char raw[4];
      (float&)raw = Iss;
      for (int i = 0; i < 4; i++)
        Serial.print(raw [i], HEX);
       Serial.println("");

Чего то передаётся, но вводит в полное недоумение то, что для разных чисел количество принимаемых байт разное от 3 до 4. Получается, что количество байт, отводимое для этого формата в ардуино, меняется в зависимости от количества значащих цифр. Как тогда понимать структуру этого формата?

nik182
Offline
Зарегистрирован: 04.05.2015

Вау. Размножение в темах. Используй union для одновременно расположения в памяти двух разных типов и посмотри что получится.

Юрий48
Offline
Зарегистрирован: 19.06.2018

Разобрался. В отличие от IEEE 754 в ардуино float одинарной точности хранится хотя и в 4 байтах, но в обратном байтовом порядке.

 // запись float в COM порт
  void COM_float_write(float num) {
    char raw[4];
    (float&)raw = num;
    for(int8 i = 3; i >= 0; i--) 
    Serial.write(raw[i]);
    Serial.println("");
  }