LINUX.ORG.RU

stm32 мигаем светодиодом

 


0

1

здрасьте здрасьте люди добрые. пришел контроллер и программатор STM32F103C8T, ST-LINK/V2. операционная система Ubuntu. если может кто-то то напишите пожалуйста пример програмки на assembler чтобы мигнуть светодиодом.

ее я скомпилирую и зашью. компилировать думаю

arm-none-eabi-as -o myfile.o myfile.s 

arm-none-eabi-objcopy mf.elf mf.bin -O binary
st-flash write my.bin 0x8000000
чего не могу? мигнуть светодиодом. или программка корявая или котроллер не работает. если можете дайте пример 100% рабочей программки на ассемблер чтобы проверить.



Последнее исправление: Assembler (всего исправлений: 3)

Ответ на: комментарий от anonymous

Много писанины выйдет только первый раз.

Фиг с ним со стартапом, его действительно один раз написал и забыл. Речь даже не о точечных оптимизациях, специфических ядерных инструкциях или работе со стеком.

Целиком, от начала до конца, на ассемблере код даже под AVR пишут крайне редко. Под более мощные машины - тем более.

Хотя есть извращенцы вроде авторов Колибри

COKPOWEHEU
()
Ответ на: комментарий от Eddy_Em

Ну, утверждать, что под АРМы не пишут или неудобно писать на Си я точно не стану. Но килобайт для «блинки», пусть даже и с морзянкой — это слишком много, конечно.

А теперь покажи

Может и покажу, но не сегодня. Извинишься, если выйдет меньше килобайта?

объявлять каждый раз ручками все используемые регистры

На асме тоже можно хИдеры инклудить и макросы писать. А что касается «непонятности», так это определение субъективное, к тулчейну не относится, а зависит от качества кода. Вон, товарищ выше привёл пример на Сишке. Как по мне, так вариант на асме куда понятнее. И это он ещё исходники хедеров не прикрепил.

anonymous
()
Ответ на: комментарий от COKPOWEHEU

Эдик, поучись у товарища писать на Си :)

anonymous
()
Ответ на: комментарий от anonymous

Ты воткни нормальный стартап, где будет происходить сброс всей периферии, инициализация статических переменных нулями и т.п. Я посмотрю, как уместишься в сто байт!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

сброс всей периферии, инициализация статических переменных нулями

Открой хоть раз Reference Manual, там для каждого регистра указано Reset value.

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

anonymous
()
Ответ на: комментарий от COKPOWEHEU

48

@@ -11 +11 @@
-    stack_pointer_value:    .word   0x20005000
+    stack_pointer_value:    .word   PORT_C_PIN13_MODE0_BIT
@@ -19 +19 @@
-        ldr     r0, =PORT_C_PIN13_MODE0_BIT
+        ldr     r0, stack_pointer_value
@@ -22 +22 @@
-        ldr     r0, =PORT_C_PIN13_OUTPUT_BIT
+        adds    r0, #228
$ stat -c %s blinky.bin
40

:)

anonymous
()
Ответ на: комментарий от anonymous

Но килобайт для «блинки»

Вы учитывайте, что из них почти 300 байт таблица прерываний занимает, плюс настройка прерываний, плюс инициализация секций .data и .bss плюс можно добавить заглушки на различные исключения.

Добавляем логику мигания, как раз килобайт и набирается.

Но надо помнить, что этот килобайт - константа, он с ростом программы почти не растет. А вот объем хорошо структурированного и читаемого ассемблерного кода растет и еще как. Хотя бы потому что человеку тяжело держать в голове три десятка огромных чисел. Компилятору того же Си это гораздо проще, отсюда и оптимизации, которые иногда обгоняют написанный руками ассемблерный код.

Эдик, поучись у товарища писать на Си :)

А это не мой код :) Это вот отсюда: https://www.cyberforum.ru/microcontrollers/thread2667455-page2.html#post14654967

COKPOWEHEU
()
Ответ на: комментарий от t20

Он сильно разочаровался в smt32 программировании. Заявил Што тыкание курсором мышки по картинке в IDE не то что ему нужно.

anonymous
()
Ответ на: комментарий от anonymous

он так ждал тебя вчера с твоим примером. несвоевременность-вечная драмма.

anonymous
()
Ответ на: комментарий от anonymous

Хороший вопрос. Я подумал, что идет настройка тактирования, потом порта и дальше мигание. Но адрес 0x42420310 и 1-й бит в нем на первый взгляд ничему не соответствует: тактирование порта С настраивается 4-м битом по адресу 0x40021018.

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

не если матерые кодеры пишут код который не работает, то этому ассемблеру никогда не написать самому.

anonymous
()
Ответ на: комментарий от anonymous

Я не говорил что он не работает. Мало ли под какой МК его писали, распределение регистров у всех разное. Я могу только сказать, что под stm32f103 или stm32l151 этот код нормально не заработает.

А на счет ассемблера зря вы так. Не так давно я разбирался с ассемблером для RISC-V, ничего сверхъестественного: https://habr.com/ru/post/533272/

COKPOWEHEU
()

А нужно ли помогать всяким метапрогам, Лизам и ассемблерам?

anonymous
()
Ответ на: комментарий от anonymous

Эта программа мигает светодиодом, который запаян на ногу PC13 на так называемой плате Bluepill. МК — STM32F103.

Может быть не все знают, но у СТМок есть прикольный режим адресации отдельных битов большинства регистров — bit band. Каждый бит из некоего регистра замаплен на отдельное 32-битное слово. В RM написано как рассчитать адрес бита, там довольно простая формула.

Так вот, в той программе, как раз через bit band адресацию, меняются три бита: первый — включает порт C, второй — настраивает ногу PC13 как выход с открытым стоком (open drain output) и третий, соответствующий биту PC13 в выходном регистре порта C, — периодически переключается через «исключающее или» (инструкция eors) с эмпирически подобранной задержкой в 1<<18 (262144) циклов вычитания и условного перехода.

anonymous
()
Ответ на: комментарий от anonymous

Может быть не все знают, но у СТМок есть прикольный режим адресации отдельных битов большинства регистров — bit band.

В любой книжке это описано в самом начале. Но сейчас не принято читать.

anonymous
()
Ответ на: комментарий от anonymous

Госпидя, да напишите им второй вариант програмки пусть они моргают этим светодиодом, если уж сказали ’a’то и ‘b’ не помещает. хотя дело ваше. просто непонятно.

anonymous
()
Ответ на: комментарий от anonymous

Может быть не все знают, но у СТМок есть прикольный режим адресации отдельных битов большинства регистров — bit band

Если используются неочевидные особенности, хорошо бы их хотя бы прокомментировать. Потому что у меня пока не получился переход от нормальных адресов к указанным в коде.

COKPOWEHEU
()
Ответ на: комментарий от Assembler

за год моего пребывания на форуме уже можно было понять

Ты упорный, не сдавайся :)

ddidwyll ★★★★
()
Ответ на: комментарий от anonymous

Понятия не имею, у меня gcc есть, вроде работает, багов не заметно.

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

Но, думаю, далеко не так страшно, как в разных компиляторах для AVR.

COKPOWEHEU
()
Ответ на: комментарий от anonymous

Вот этому форумчанину Аnonymous надо повысить репутацию. Он огромный молодец. А всяких недоумков на вроде ТС забанить, потому что они видимо пытаются прошить stm на каком-нибудь linux Armbian. И у них ничего не получается и вылетает ошибка. И самое главное, уже выучите наизусть! это форум разработчиков! не смейте говорить что тут кто-то что-то не умеет! Здесь умеют все и могут все, но только в определенные дни.

anonymous
()
Ответ на: комментарий от anonymous

Ты прав, он не напишет! Достал он уже своим тупняком и я предлагаю его ЯЗАБАН.

anonymous
()
Ответ на: комментарий от COKPOWEHEU

Если используются неочевидные особенности, хорошо бы их хотя бы прокомментировать.

Пожалуйста :)

$ echo 0AAiQgkAAAgBMQBIEwNCQgBgAJCICzmQ9uc= | base64 -d > blinky.bin
$ stat -c %s blinky.bin
26

Бинарник запускайте из флеша. Исходник с пояснениями — по ссылке выше.

У Эдика, наверное, тоже стоит попросить прокомментировать его код. А то там далеко всё не так очевидно. Начиная с навелосипеженных хИдеров. И есть подозрение, что пациент сам узнал о поведении программы при обоих нажатых кнопках только после запуска, и объявил такое поведение фичей :)

Я сначала подумывал транслировать его прогу на асм. Но чувство прекрасного не даёт мне скопировать логику 1 в 1. А если писать так, как хочется мне, то Эдик опять скажет, что мой код делает не то же самое, что его. Однако очевидно, что даже если транслировать будет сам Эдуард, то размер бинарника выйдет всяко меньше килобайта.

anonymous
()
Ответ на: комментарий от anonymous

тоже стоит попросить прокомментировать его код

У меня все неочевидное прокомментировано.

навелосипеженных хИдеров.

Нет там никаких велосипедов, только более удобное объявление некоторых флагов для режимов GPIO.

очевидно

Очевидно. Вот только цель — не написать бесполезный "самый короткий блинк", а проверить работу базовой сборки. Где уже есть объявление всех векторов прерываний (с дефолтными WEAK обработчиками), инициализация нулями статических объектов, настройка тактирования и прочее необходимое.

В итоге байт с 900 запросто наберется. И выкинуть это нельзя, т.к. без него только бесполезный "блинк" и будет работать.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

О да, твоя морзянка, передающая SOS — прям верх полезности. От кого ты там спасаешься?

А если хочешь действительно потестить МК, то используй для этого специальную программу, а не наколенную поделку.

Тебе, между прочим, было бы очень полезно изучить работу моего нано-блинки. Советую.

У меня все неочевидное прокомментировано.

Мне вот неочевидно, что будет, если нажать обе кнопки сразу. Комментарий не наблюдаю.

anonymous
()
Ответ на: комментарий от anonymous

Пожалуйста :)

Не увидел там комментариев откуда взят именно этот адрес, какому регистру в даташите он соответствует.

У Эдика, наверное, тоже стоит попросить прокомментировать его код.

У него код как раз довольно хорошо прокомментирован. Я только благодаря ему разобрался как с USB работать. Хотя работу с наркоманскими регистрами USB_EPxR можно было сделать более прозрачной или хотя бы добавить комментарии.

Однако очевидно, что даже если транслировать будет сам Эдуард, то размер бинарника выйдет всяко меньше килобайта.

Дался вам этот килобайт! Это же стартап код, выполнение он не замедляет, памяти особо не отъедает. Хуже когда основной код занимает 10 кБ и занимается пересылкой одних и тех же данных между слоями без какого-либо смысла (очередной камень в сторону USB от Куба).

COKPOWEHEU
()
Ответ на: комментарий от anonymous

Тебе, между прочим, было бы очень полезно изучить работу моего нано-блинки. Советую.

Немного посмотрел. Для попонтоваться использованием нестандартных хаков хорошо. Для практического использования - однозначно нет. Пусть этим компиляторы занимаются, а человек им читаемый код скармливает. Тем более в теме «для начинающих».

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

откуда взят именно этот адрес

А, может это и действительно не всем очевидно. Но можете поверить, имена символов соответствуют их назначению.

Проверить можете по формуле из документации.

anonymous
()
Ответ на: комментарий от COKPOWEHEU

использованием нестандартных хаков

Ну кроме одного. Всё остальное соответствует документации. Ничего сложного в этих «хаках» нет.

Тем более в теме «для начинающих».

Так как раз наоборот. Начинающим, которые хотят изучить программирование контроллеров, это должно быть очень интересно. По крайней мере интереснее, чем какой-то тупорылый килобайтовый SOS. Если бы в нём логика была и хоть какая-то техническая красота. Ну мигает и мигает. Гордиться нечем.

anonymous
()
Ответ на: комментарий от anonymous

что будет, если нажать обе кнопки сразу

Нефиг их сразу нажимать. В Readme написаны допустимые варианты!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

А, может это и действительно не всем очевидно. Но можете поверить, имена символов соответствуют их назначению.

Проверить можете по формуле из документации.

У вас же гнутый ассемблер, ничего не мешает написать макрофункцию по установке нужного бита.

Или хотя бы продублировать функцию из документации. Это не та фича контроллера, которой пользуются постоянно и не та, которую рассказывают на курсах «ARM за 21 день».

Ну кроме одного. Всё остальное соответствует документации. Ничего сложного в этих «хаках» нет.

Сложное в том, чтобы держать в голове их ограничения. Насколько я понял, вы активно пользуетесь тем, что РОН при инициализации сброшены в 0. Но в середине сложной программы или после некоторых видов ресета это уже не гарантируется.

Да и, еще раз говорю, не там вы экономите. В инициализации писать неэффективный код можно, она выполняется единственный раз и потеря даже 10 мс никого не огорчит. Оптимизировать надо повторяющиеся операции.

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

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

А то, что вы описали это уже для середнячков, которые базовые возможности знают и камня не пугаются.

Если бы в нём логика была и хоть какая-то техническая красота. Ну мигает и мигает. Гордиться нечем.

Оно не чтобы «гордиться», а чтобы проверить работает ли камень вообще и как отправная точка для собственного говнокода. Согласитесь, новичок, вчера скачавший Куб и не понимающий как он работает, не сможет допилить ваш код. Мой или Эдди - сможет.

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

Его вообще за битбандинг можно смело посылать на три буквы, т.к. код вообще не переносимым получается. Скажем, у STM32F0 этой фичи нет.

Для тестирования чипов в LQFP48 я себе вундервафлю сделал (и код с минимумом тестов под STM32F0x2 и под STM32F103). Как покупаю новую партию МК, половину случайно отбираю и тестирую на этой штуке, прежде, чем пять звездочек продавцу поставить.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

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

С практической точки зрения скорее да. Но для общего развития полезно. Хотя с трудом представляю для каких задач это можно использовать.

Для тестирования чипов в LQFP48 я себе вундервафлю сделал

Описание косяков порадовало. Напомнило мои развлечения: https://habr.com/ru/post/456280/

В качестве USB лично мне больше нравится mini-usb, они бывают для монтажа в отверстия, чутка надежнее выглядит, чем надежда на клей между текстолитом и фольгой.

Не увидел у вас разъема программирования. Через UART шьете? У F1 (и L1 тоже) насколько я помню с DFU проблемы.

Для чего нужны две огромные дырки рядом со светодиодами? Я было предположил, что это коаксиальный разъем, но фольга вокруг дырок удалена, да и три контакта…

Панелька, конечно, интересная, но разве что для вашей задачи - тестирования большого количества камней одной формы.

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

У тех серий, где есть BSRR, битбандинг не нужен. А вот другим — вполне возможно (для выполнения атомарных операций c GPIO).

mini-USB — жутко ненадежная дрянь, я привык к большим разъемам. Классно и надежно.

Шью по-разному: в Makefile у меня есть цели как для прошивки через ST-link, так и для бутлоадера через USART1 и DFU. STM32F0x2 прошиваю исключительно через DFU (меньше телодвижений: вообще не нужно ничего левого подключать, кроме USB). Через st-link шью только STM32F103 во время разработки прошивок (чтобы не жамкать по 100500 раз кнопки BOOT0/RESET).

Отверстия рядом со светодиодами под переменный резистор, просто его у меня тогда еще не было (получил парой недель позже).

Я думаю другую «материнку» под эту «кроватку» разработать, чтобы можно было использовать ее в качестве девборды. А то девборды летят достаточно быстро (обычно их хватает от силы на десяток тысяч раз перепрошивки МК — то статикой убью, то прокосячу и спалю неправильной коммутацией; а т.к. на средний проект выходит не меньше 4000 раз перепрошить МК, то получается, что одной девборды от силы на 2.5 проекта хватает), есть смысл в такой железяке, где просто нужно будет МК менять. Благо, их есть у меня еще несколько десятков (последний десяток STM32F072CBT6 брал по 85 рублей, а сейчас китайцы вообще охамели, так что жду, пока надуманный кризис кончится).

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 2)
Ответ на: комментарий от Eddy_Em

У тех серий, где есть BSRR, битбандинг не нужен.

BSRR же только для портов, а отображение битов на память работает вообще для всей периферии (интересно, для наркоманских USB_EPxR сработает?!) и даже памяти.

mini-USB — жутко ненадежная дрянь

Я сравниваю с micro-USB скорее. Плюс соответствующих проводов у меня куча, а вот квадратных typeA разве что один, и тот на особо ответственную платку повешен.

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

Ну так разрабатывать можно прямо сейчас! Наверняка же у вас хоть пара камней в запасе осталась.

Хм, любопытно, а всякие Миландры от китайской шизы пострадали или выиграли?

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

У меня штук по 30 STM32F103C8T6 и штук 40 STM32F072CBT6. Еще есть два десятка 48-ногих F030 и десятка три их же в TSSOP20. В общем, пока что на всякие поделки хватит. А для работы уж придется из российского бюджета по ~2000р за микроконтроллер выкусывать.

Миландрам от псевдокризиса ни горячо, ни холодно: их покупают исключительно вояки, поэтому стоимость чипов изначально была раз в 30 (как минимум) выше рыночной. А еще они пассивку делают, как вспомню кондеры/резисторы 0603 по 20р за штучку, аж трясет!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Нефиг их сразу нажимать. В Readme написаны допустимые варианты!

У меня все неочевидное прокомментировано.

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

Мне вот ещё неочевидно зачем тебе sysreset() в программе из одной функции? Тем более, что ты потом вызываешь StartHSE(). (На асме, кстати, функции бы выглядели гораздо красивее.) Зачем кодируешь сообщение на азбуке морзе временными интервалами типа uint16_t? Ещё и интервалы неправильные. Частоту таймера задрал, что теперь сам нормальное тире закодировать не можешь.

uint16_t L[] = {125,100,125,100,125,200, 60,100,60,100,60,200, 125,100,125,100,125, 230};`

Если что, SOS — это ... --- .... Длительность тире равна трём точкам.

Ясно. Не осилил нормально написать программу из трёх строчек. А ещё новичкам советует.

anonymous
()
Ответ на: комментарий от COKPOWEHEU

У вас же гнутый ассемблер, ничего не мешает написать макрофункцию по установке нужного бита.

А у меня написана. Хотите покажу?

Насколько я понял, вы активно пользуетесь тем, что РОН при инициализации сброшены в 0.

Нет, начальные значения регистров не имеют значения.

Согласитесь, новичок, вчера скачавший Куб и не понимающий как он работает, не сможет допилить ваш код. Мой или Эдди - сможет.

Не соглашусь. Если новичок не понимает как что-то работает, то с большой долей вероятности он это допилить не сможет. Теперь, если взять, к примеру, Эдичкин код и его либу, то там скупая «документация» размазана по всем исходникам и надо попотеть, чтобы понять как работает та или иная функция. Дополнительно к документации к либе всё равно надо будет ещё и в даташиты смотреть. На асме же всё прозрачно. Есть референс и программинг мануалс, там всё чётко структурировано, все регистры и их функции детально расписаны, дефолтные значения указаны — изи кодинг.

Советую, кстати, всем новичкам начинать прогать контроллеры именно с асма. И начало простое и в последствии будете понимать всё намного глубже принципиальных сишников :)

anonymous
()
Ответ на: комментарий от anonymous

А у меня написана. Хотите покажу?

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

Нет, начальные значения регистров не имеют значения.

Но первая же операция adds r1, #1

Есть референс и программинг мануалс, там всё чётко структурировано, все регистры и их функции детально расписаны, дефолтные значения указаны — изи кодинг.

Ага, щас! Для настройки какой-нибудь периферии предназначен десяток регистров, из которых для простой мигалки достаточно трех, и то поменять два бита. Но поди угадай какие! Оно, конечно, написано, но длинно и малопонятно.

Советую, кстати, всем новичкам начинать прогать контроллеры именно с асма. И начало простое и в последствии будете понимать всё намного глубже принципиальных сишников :)

Вот тут полностью согласен! Только не факт что с stm32. Ассемблер в каком-нибудь AVR куда проще, а ощущение понимания железа дает такое же.

В дополнение можно отказаться от IDE - вызывать компилятор сначала ручками, потом через makefile.

Ну а потом вернуться в IDE/C и страдать что такие простые вещи делаются сложным способом.

понимать всё намного глубже принципиальных сишников :)

А уж питонщики или джаваскриптеры просто насквозь будут прожигаться красным сиянием глаз.

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

Напомнило мои развлечения: https://habr.com/ru/post/456280/

Интересная статья.

покупаю ДМСО

Орнул.

Если сравнивать с AVR, то у СТМ «экосистема» действительно гораздо слабее. Документация разбросана по нескольким PDF-ам и порой сложно понять в каком разделе какого файла написано то, что ты ищешь. А про некоторые вещи и правда приходится догадываться.

У AVR же, я считаю, лучшая документация из всех существовавших когда либо контроллеров. В одном документе тебе и электрические характеристики и описание протокола программирования и примеры кода как на Си так и на асме. Написано простым и предельно понятным техническим языком. Нюансы объясняют как для школьников. Мне кажется, что по большей части они стали популярны благодаря именно своей документации.

Однако, если разобраться, то начать программировать STM, на самом деле, не сложнее, чем AVR, а скорее даже проще. Если разобраться :)

Оказалось, что резистор, идущий от вывода контроллера к разъему, сломался.

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

anonymous
()
Ответ на: комментарий от COKPOWEHEU

Но первая же операция adds r1, #1

Исходное значение в регистре может влиять только на то, какое состояние вывода будет в момент загрузки. Из этого регистра мы в каждом цикле выводим только пятнадцатый бит. r1, получается, просто счётчик и не важно что в нём, переполнился ли он или нет. Каждый более старший бит в нём меняется с уменьшенной вдвое частотой. Если самый младший переключается с частотой основного цикла, то пятнадцатый — с частотой основного цикла, делённой на 2^14.

anonymous
()
Ответ на: комментарий от anonymous

Однако, если разобраться, то начать программировать STM, на самом деле, не сложнее, чем AVR, а скорее даже проще. Если разобраться :)

Все же сложнее. И сам контроллер более навороченный, и регистров под каждую периферию больше выделено, и даташит толще. Я, когда первый раз его смотрел, чуть не в ступор впадал «мне надо всего лишь таймер настроить, куда все эти двадцать регистров, что в них писать?!»

Хотя собственно программирование, конечно, проще: нет фьюзов, да и прошивать можно по UART. Но это наименьшая проблема.

Ну и плюс у stm нет такого классного перевода как от Евстифеева, а в английский не все умеют.

COKPOWEHEU
()
Ответ на: комментарий от COKPOWEHEU

У некоторых древних STM'ок вроде STM32F103 надо еще и про errata не забывать, уж очень там многое накосячили. Вообще, я когда после длительной разработки под F0x2 возвращаюсь к F103, меня не покидает ощущение, что лучше бы этот камень вообще не выпускали. Единственное, чем оправдано использование F103 — крайне низкая стоимость (но это было давно). Даже официально они стоили дешевле F0x2 (да и на али я покупал F103CBT6 по 60р за штучку в то время, как F072CBT6 были по 70р).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

STM-совместимых китайцев не пробовали? Gigadevice GD32F103, CKS CS32F103. Говорят, там добрая часть errata за французами исправлено. =)

anonymous
()
Ответ на: комментарий от anonymous

У меня были два левых bluepill'а, в одном вместо STM32 впаяли CS32, в другом — GD32 (но тут уже я ССЗБ: не прочитал мелкий шрифт, что там реально был не STM32). Помучился я с ними немного — они не прошивались ни st-link'ом, ни через UART1. Т.е., видимо, все же они достаточно отличаются от STM32.

В общем, выпаял их и выкинул в мусорку, а вместо них впаял STM32.

А еще особого смысла пытаться перейти на клоны нет, т.к. по цене никакого выигрыша не получается. Если бы в GD32F103 или CS32F103 был DFU, а регистры имели полную совместимость с STM32, можно было бы еще подумать, а так — толку нет.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

В общем, выпаял их и выкинул в мусорку

Жаль. Хочется попробовать, было интересно ваше мнение.

Привлекает в основном не столько ценник, сколько большая частота ядра и огромный объём SRAM и флеша у GD32 при pin-to-pin совместимости.

Насчёт прошивки клонов — там CPUTAPID другой, необходимо править конфиг OpenOCD.

https://www.eevblog.com/forum/beginners/unexpected-idcode-flashing-bluepill-clone/

anonymous
()
Ответ на: комментарий от anonymous

Я не пользуюсь openocd (принципиально!), прошиваю st-flash'ем. Подозревал, что можно добавить идентификатор в утилиту. Но вот насчет полной совместимости регистров — это надо сравнивать даташиты.

Eddy_Em ☆☆☆☆☆
()

Спасибо автору за повод к интересной дискуссии!

vM ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.