STM32

На этом форуме Вы можете задать вопросы знатокам программы и автору.
ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

STM32

#21

Сообщение ecoins » 18.07.2019{, 10:41}

Nikan писал(а):
18.07.2019{, 10:26}
как будет работать библа( и будет ли) без жестких рамок диспетчера задач? при наличии аппаратных прерываний (например прием данных с Uart-ов, энкодера на пинах с прерываниями) ?
и с каких пор точность таймера контроллера стала чем-то ограничена, если стала - проясните плиз.
вот пример точности 0 таймер счетчика для AVR (там где считаются mikros() и millis() ) частота 16мг.ц
Не считаю верным обсуждение в данной ветке специфики аппаратных возможностей контроллеров - тем более только для одного типа на 16мГц.
Задаваемые вопросы - это предмет аппаратного исследования. Некоторые результаты измерений - и не только наши - приведены в теме "Разработки ecoins".

aidar_i
Полковник
Сообщения: 3125
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

STM32

#22

Сообщение aidar_i » 20.07.2019{, 01:01}

Попробовал запустить часы встроенные в STM32.
Установил библиотеки
RTClock.rar
(23.59 КБ) 65 скачиваний
Добавил в пример дисплей 1602.
BluePill-RTClock-LCD.ino
(7.42 КБ) 60 скачиваний
СпойлерПоказать
WhatsApp Image 2019-07-20 at 02.35.28.jpeg
Сделал ПБ , но программа ругается и падает.
Решение здесь

Поэтому соединил пример с дисплеем в скетче и выложил скетч тоже.
Время устанавливается сама.
Если подключить к разъему часов питание 3 вольта батарейкой, время не собьется при отключении питания платы. В схеме VBAT
СпойлерПоказать
Bluepillpinout.gif
Последний раз редактировалось aidar_i 22.07.2019{, 07:32}, всего редактировалось 2 раза.

Аватара пользователя
Rovki
Полковник
Сообщения: 4875
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

STM32

#23

Сообщение Rovki » 20.07.2019{, 12:57}

Вот мои стм ки скоро начнем загружать :smile37:
stm32.jpg
Электронщик до мозга костей и не только

Anydy

STM32

#24

Сообщение Anydy » 20.07.2019{, 14:20}

Вот интересно .... кто проверял --- я вот проверил на чипе за 100р. получилось как и на ардуино UNO по обьему памяти.....но у STM есть много других чипов...где памяти намного поболее!!!! Вопрос кто проверял более навороченные микрухи?

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

STM32

#25

Сообщение ecoins » 20.07.2019{, 14:35}

Anydy писал(а):
20.07.2019{, 14:20}
Вопрос кто проверял более навороченные микрухи?
Непосредственно в Arduino IDE не проверяли - а так много работали с STM32F103V в системе Fractal
Параметры STM32F103VПоказать
Ниже приведен перечень основных ресурсов STM32F103RET6 / GET6:
■ Core: ARM 32-bit Cortex™-M3 CPU
– 72 MHz maximum frequency, 1.25 DMIPS/MHz (Dhrystone 2.1) performance at 0 wait state memory access
– Single-cycle multiplication and hardware division
■ Memories
– 512 Kbytes of Flash memory /1024
– 64 Kbytes of SRAM /96
■ Clock, reset and supply management
– 2.0 to 3.6 V application supply and I/Os
– POR, PDR, and programmable voltage detector (PVD)
– Internal 8 MHz factory-trimmed RC
■ Low power
– Sleep, Stop and Standby modes
– VBAT supply for RTC and backup registers
■ 3 × 12-bit, 1 μs A/D converters (16 channels)
– Conversion range: 0 to 3.6 V
– Triple-sample and hold capability
– Temperature sensor
■ 2 × 12-bit D/A converters
■ DMA: 12-channel DMA controller
– Supported peripherals: timers, ADCs, DAC, SDIO, I2Ss, SPIs, I2Cs and USARTs
■ Debug mode
– Serial wire debug (SWD)
– Cortex-M3 Embedded Trace Macrocell™
■ 51 fast I/O ports, all mappable on 16 external interrupt vectors and almost all 5 V-tolerant
■ 11 timers
– Up to four 16-bit timers, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input
– 2 × 16-bit motor control PWM timers with dead-time generation and emergency stop
– 2 × watchdog timers (Independent and Window)
– SysTick timer: a 24-bit downcounter
– 2 × 16-bit basic timers to drive the DAC
■ Up to 13 communication interfaces
– Up to 2 × I2C interfaces (SMBus/PMBus)

Аватара пользователя
Rovki
Полковник
Сообщения: 4875
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

STM32

#26

Сообщение Rovki » 20.07.2019{, 15:04}

Anydy писал(а):
20.07.2019{, 14:20}
Вот интересно .... кто проверял --- я вот проверил на чипе за 100р. получилось как и на ардуино UNO по обьему памяти.....но у STM есть много других чипов...где памяти намного поболее!!!! Вопрос кто проверял более навороченные микрухи?
На всех моих стоит stm32f103vet6

Отправлено спустя 7 минут 48 секунд:
Вот эту плату по ближе сфотал ,чего там только нет ,даже джойстик, куча интефесов, разьем для дисплея :shok:
stm.jpg
Электронщик до мозга костей и не только

Аватара пользователя
jonik22sm
Капитан
Сообщения: 703
Зарегистрирован: 20.11.2015{, 11:28}
Репутация: 6
Откуда: Краснодар
Имя: Евгений
Контактная информация:

STM32

#27

Сообщение jonik22sm » 21.07.2019{, 23:20}

Так как программировать STM32 в flprog?
Можно сделать ВСЁ. Было бы желание.

aidar_i
Полковник
Сообщения: 3125
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

STM32

#28

Сообщение aidar_i » 22.07.2019{, 07:04}

jonik22sm писал(а):
21.07.2019{, 23:20}
Так как программировать STM32 в flprog?
Ставите МЕГУ2560 и программируете.

Отправлено спустя 5 минут 58 секунд:
Здесь я пробовал сделать ПБ для встроенных часов, но программа падала, определил из за чего. Во секции фунции эта функция void SecondCount () заставляла программу сбиться. Пришлось ее перенести в секцию setup.Чтобы она правильно скомпилировалась, убрал скобку закрытия функции и добавил перед void еще одну скобку.Программа при компиляции сама добавляет еще одну скобку в конце

Код: Выделить всё

 lastGlobAlmCount = ~globAlmCount;
  lastSPECAlmCount = ~SPECAlmCount;
  //Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
  delay(1000);
  ParseBuildTimestamp(mtt);  // get the Unix epoch Time counted from 00:00:00 1 Jan 1970
  tt = rtclock.makeTime(mtt) + 25; // additional seconds to compensate build and upload delay
  rtclock.setTime(tt);
  tt1 = tt;
  rtclock.attachAlarmInterrupt(blink);// Call blink
  rtclock.attachSecondsInterrupt(SecondCount);// Call SecondCount
}
void SecondCount ()
{
  tt++;
Я этим приемом пользуюсь давно, тк были аналогичные проблемы.
Часы_1.flp
(137.18 КБ) 77 скачиваний
Последний раз редактировалось aidar_i 23.07.2019{, 05:20}, всего редактировалось 1 раз.

Аватара пользователя
Rovki
Полковник
Сообщения: 4875
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

STM32

#29

Сообщение Rovki » 22.07.2019{, 08:07}

про stm
чем то похоже на то что делает ecoins :smile37:
Электронщик до мозга костей и не только

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

STM32

#30

Сообщение ecoins » 22.07.2019{, 09:43}

Rovki писал(а):
22.07.2019{, 08:07}
чем то похоже на то что делает ecoins
Да, это так, примерно этим мы и занимаемся.
Что мы пока не делаем для FLProg - не используем огромные возможности прерываний, прежде всего по таймеру исключительно для того, чтобы сохранить совместимость с другими контроллерами. Так у Arduino Nano 3 таймера - два 8-битных и один 16-битный, и все заняты разными задачами.
Таймеры на AVR328 и MEGA2560Показать
Timer1:
Timer1 это 16 битный таймер с максимальным значением счета 65535 (целое без знака). Этот таймер использует библиотека Arduino Servo, учитывайте это если применяете его в своих проектах.

Timer2:
Timer2 — 8 битный и очень похож на Timer0. Он используется в Arduino функции tone().

Timer3, Timer4, Timer5:
Чипы ATmega1280 и ATmega2560 (установлены в вариантах Arduino Mega) имеют три добавочных таймера. Все они 16 битные и работают аналогично Timer1.
Планируем разрабатывать специализированные пользовательские блоки для STM32 разных серий, по возможности универсальными для других контроллеров. Это зависит не только от времени, но и от автора FLProg, который в новых версиях FLProg как то обозначит:
1. Включение STM32 в проект FLProg.
2. Выскажет/не выскажет своё положительное/отрицательное отношение к не универсальным пользовательским блокам (работающих на выборочных платформах).
-----------------------
С использованием STM32 разработанный ecoins Диспетчер задач мог бы выглядеть иначе.
Большие возможности открылись бы, если автор заложит возможность обращения к отдельным платам иным способом (по прерываниям, вызову из других плат и т.п.) - сейчас это только последовательное (в цикле loop()) выполнение плат по условиям или без них.

fsergei70
Капитан
Сообщения: 786
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 54
Имя: Сергей

STM32

#31

Сообщение fsergei70 » 22.07.2019{, 11:06}

aidar_i писал(а):
22.07.2019{, 07:10}
Я этим приемом пользуюсь давно, тк были аналогичные проблемы.
Часы_1.flp
Как установить время и дату в этих часах

aidar_i
Полковник
Сообщения: 3125
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

STM32

#32

Сообщение aidar_i » 22.07.2019{, 11:45}

Устанавливается автоматически после загрузки.

Mining
Сержант
Сообщения: 148
Зарегистрирован: 31.10.2016{, 15:01}
Репутация: 4
Имя: Алексей

STM32

#33

Сообщение Mining » 22.07.2019{, 11:48}

aidar_i писал(а):
22.07.2019{, 11:45}
Устанавливается автоматически после загрузки.
Откуда берут стартовое время? С PC?

aidar_i
Полковник
Сообщения: 3125
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

STM32

#34

Сообщение aidar_i » 22.07.2019{, 12:03}

С компа

Отправлено спустя 6 минут 40 секунд:
Библиотеки лучше поставить отсюда https://github.com/rogerclarkmelbourne/Arduino_STM32.
Там в папке много библиотек для Ардуино Иде. Поставьте саму папку Arduino_STM32, не надо библиотеки вытаскивать и отдельно ставить.

aidar_i
Полковник
Сообщения: 3125
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

STM32

#35

Сообщение aidar_i » 24.07.2019{, 21:20}

fsergei70 писал(а):
22.07.2019{, 11:06}
Как установить время и дату в этих часах
Немного поразбирался, время можно и самому установить, в описании ПБ написал как. Его можно установить через UART введя значение Unix-время (англ. Unix time). Конвертер здесь, там и есть о Unix-время. Копируете текущее Unix epoch время и через монитор компорта отправляете в STM32. Можно и через ESP8266 получать.
Подправил ПБ, убрал лишнее и настройку зоны времени вывел в параметры, добавил выход даты и времени одной строкой.
Часы_3.flp
(196.62 КБ) 70 скачиваний
Последний раз редактировалось aidar_i 25.07.2019{, 10:34}, всего редактировалось 1 раз.

Аватара пользователя
Nikan
Майор
Сообщения: 1194
Зарегистрирован: 29.12.2016{, 00:49}
Репутация: 100
Откуда: москва

STM32

#36

Сообщение Nikan » 24.07.2019{, 22:25}

.
Последний раз редактировалось Nikan 23.03.2023{, 23:36}, всего редактировалось 1 раз.

aidar_i
Полковник
Сообщения: 3125
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

STM32

#37

Сообщение aidar_i » 25.07.2019{, 06:27}

Где-то встречал, наберите Unix время в Гугле.
Вот здесь можно посмотреть https://ru.m.wikipedia.org/wiki/Unix-%D ... 0%BC%D1%8F

Gordon0007
Сержант
Сообщения: 138
Зарегистрирован: 19.04.2018{, 13:37}
Репутация: 13
Имя: Павел

STM32

#38

Сообщение Gordon0007 » 25.07.2019{, 08:23}

aidar_i, А можно ли такой блок для других контроллеров? И отправить автору для интеграции в основную программу. Так сказать расширить возможности существующего блока часов, допустим чтобы появилась галочка установить время в часы STM32, DS1302, DS1307, DS3231 и др при загрузке. Считаю хорошей функцией. У меня есть один проект на УНО и DS3231, где реализована такая функция, но прошивку мне писал знакомый.

Отправлено спустя 36 минут 4 секунды:
Статья про STM32, может кому будет полезно. Довольна подробно и просто объясняется информация

STM32: управление питанием
https://blog.myelectronics.com.ua/stm32 ... %B5%D0%BC/

STM32: система прерываний
https://blog.myelectronics.com.ua/stm32 ... %b8%d0%b9/

STM32: сторожевые таймеры (WDT)
https://blog.myelectronics.com.ua/stm32 ... d1%8b-wdt/

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

STM32

#39

Сообщение Sancho » 25.07.2019{, 09:47}

То-же, только высоко-уровневое использование прерываний и таймеров тут
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

aidar_i
Полковник
Сообщения: 3125
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 676
Откуда: Уфа
Имя: Айдар
Контактная информация:

STM32

#40

Сообщение aidar_i » 25.07.2019{, 12:33}

Gordon0007 писал(а):
25.07.2019{, 08:59}
А можно ли такой блок для других контроллеров? И отправить автору для интеграции в основную программу. Так сказать расширить возможности существующего блока часов, допустим чтобы появилась галочка установить время в часы STM32, DS1302, DS1307, DS3231 и др при загрузке. Считаю хорошей функцией. У меня есть один проект на УНО и DS3231, где реализована такая функция, но прошивку мне писал знакомый.
Вот эта функция читает время и раскладывает , жирным выделил строку, которые непосредственно читает дату и время
СпойлерПоказать
void ParseBuildTimestamp(tm_t & mt)
{
// Timestamp format: "Dec 8 2017, 22:57:54"
sprintf(s, "Timestamp: %s, %s\n", __DATE__, __TIME__);
//Serial.print(s);
char * token = strtok(s, delim); // get first token
// walk through tokens
while( token != NULL ) {
uint8_t m = str2month((const char*)token);
if ( m>0 ) {
mt.month = m;
//Serial.print(" month: "); Serial.println(mt.month);
token = strtok(NULL, delim); // get next token
mt.day = atoi(token);
//Serial.print(" day: "); Serial.println(mt.day);
token = strtok(NULL, delim); // get next token
mt.year = atoi(token) - 1970;
//Serial.print(" year: "); Serial.println(mt.year);
token = strtok(NULL, delim); // get next token
mt.hour = atoi(token);
//Serial.print(" hour: "); Serial.println(mt.hour);
token = strtok(NULL, delim); // get next token
mt.minute = atoi(token);
//Serial.print(" minute: "); Serial.println(mt.minute);
token = strtok(NULL, delim); // get next token
mt.second = atoi(token);
//Serial.print(" second: "); Serial.println(mt.second);
}
token = strtok(NULL, delim);
}
}
Можно вывести на компорт ещё так: Serial.println(F("\n " __DATE__ " " __TIME__));
Выложте свою прошивку тоже.

Ответить

Вернуться в «Спросить у знатоков»