Как отличить stm32f102 и stm32f103
Перейти к содержимому

Как отличить stm32f102 и stm32f103

  • автор:

ARM, RISC-V контроллеры

Расскажу по-порядку. Опыт применения STM32 у меня невелик — пока только 2 проекта. Первый был на STM32F407. Этот при подключении к USB-порту компьютера (при высоком уровне на пине BOOT0) распознавался, как устройство «STM32 Bootloader» (см. картинку), а дальше было дело техники — лично я запускала программу «STM32CubeProgrammer.exe», которая шила через этот драйвер.

Второй мой проект был на STM32F103. У этого на плате USB-разъема не было, зато был полноразмерный разъем для JTAG. Его, очевидно, мне через JTAG и пришлось программировать (на этот счет мне здесь советы разные давали).

Но вот вчера получила на почте две платы из Китая — вот такие:

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

JTAG-разъема на них нет, но есть USB-разъем. Ну и я с разбегу решила, что можно программировать через него, как я в прошлом STM32F407 программировала. Да не тут-то было! Компьютер девайса не признал, причем даже PID/VID прочесть не смог, хотя ругнулся и желтый треугольник показал. Причем, симптом одинаковый на обеих платах. Отсюда и опасение у меня зародилось, что 103-ый, в отличие от 407-го, вообще не умеет по USB прошиваться.

Отсюда и мой вопрос: так оно или нет? Возможно ли прошить STM32F103 через USB, предварительно не трогая его родной загрузчик?

    • Ну так как, выбрали что-нибудь? — LightElf (21.04.2020 16:02 )
      • Припаяла разъем под JTAG (на висячих проводках) — не захотелось рисковать: раз уж 48-ногий STM32F103C8T6 через JTAG у меня нормально шился, то и 64-ногий его аналог STM32F103RBT6 тоже обязан так поступать. — Kceния (21.04.2020 18:08 )
        • а что, на плате не было выведенных контактов от SWD? — lloyd (21.04.2020 18:22 )
          • Если через SWD прошивать, то нужно ли подпор линиям SWDIO и SWCLK делать, как на картинке? Или SEGGER-образный программатор сам это делает?Kceния (1 знак., 25.04.2020 13:37 , картинка)
            • Этот подпор просто на всякий случай для режима работы — дабы касание пальцами проц не принял за команду по SWD. — Andreas (25.04.2020 16:01 )
              • Вы меня обрадовали 🙂 — Kceния (25.04.2020 16:23 )
                • Просто добавьте команду на релизную версию выключать SWD/JTAG — Aleksey_75 (25.04.2020 16:53 )
                  • Ага, чтобы коллега-химик не украл открытие, достойное нобелевки 🙂 — SciFi (25.04.2020 17:33 )
                  • Только нужно понимать, что после этого, если захочется перешить, можно будет подключиться только в ресете. Не трагедия, но обычно на гребёнку для подключения SWD ресет не выведен, да и неудобно это топологически. — йцyкeн (25.04.2020 17:31 )
                    • У мну пятак ресета выведен на всех устройствах — Aleksey_75 (25.04.2020 17:36 )
                      • У меня Reset не выведен, т.к. его узурпировала кнопка. Однако странно, что даже там, где он есть, его не подключают (см. картинку)Kceния (1 знак., 25.04.2020 17:58 , картинка)
                        • УЖАС. Я стараюсь выводить все на пятаки, а вот такой переходник решает изврат как на фотоAleksey_75 (1 знак., 25.04.2020 18:08 , картинка)
                          • Я про Reset на плате говорила. А на J-Link он, конечно же, есть, но его не всегда подключают к плате. Это и вызывает моё удивление. Т.е. картинка не моя, а это рекомендация прошивки «blue pill» из интернета. — Kceния (25.04.2020 18:19 )
                            • Если не загонять в спячку и не переназначать ноги SWD можно и без ресета. Даже если что-то взглючит(что бывает крайне редко) можно кнопкой или пинцетом зажать ресет и приконнектиться. — Andreas (25.04.2020 18:25 )
                              • Ещё BOOT0 может выручить. Это из личного опыта. — SciFi (25.04.2020 18:28 )
                              • А вы не интересовались для чего распаяны 4 загнутые штырька PLS? Гляньте — там даже подписано снизу 🙂 — Гyдвин (21.04.2020 21:41 )
                                • ну да, SWD распаян — m16 (21.04.2020 21:45 )
                                  • А ведь верно! А я-то считала, что это UART. — Kceния (21.04.2020 21:54 — 22:01 )
                                    • 🙂Гyдвин (1 знак., 21.04.2020 21:55 , картинка)
                                      • Ага. Но вообще-то на нее нет схемы. Пины 24C08N пришлось тестером прозванивать:Kceния (87 знак., 21.04.2020 22:00 )
                                        • вы не те пины прозванивали , нужно прозвонить А0,А1,А2 чтобы знать адрес 24C08N — m16 (21.04.2020 22:08 )
                                          • Прозвонила — все 4 ноги с этой стороны под один земляной полигон залили:Kceния (157 знак., 21.04.2020 22:28 )
                                            • поздравляю, вместо 1кб EEPROM вам будет доступно только 256 байт — m16 (21.04.2020 22:45 )
                                            • Шайтан!SciFi (3 знак., 21.04.2020 22:30 )
                                            • Как в воду глядели 🙂 — Kceния (21.04.2020 22:29 )
                                            • Клеевой пистолет. Хотя в нем, вероятно, не клей, а быстро затвердевающая масса, похожая на расплавленный полиэтилен. Таким раньше пломбировали внутренности компьютеров, чтобы HDD нельзя было снять, видеокарту или процессор заменить. Однако я могу и проводком прикрутить :), т.к USB-разъем не живьём вывожу наружу, в через этот кабелёк:Kceния (1 знак., 21.04.2020 21:50 — 21:56 , картинка)
                                              • Наверняка должны быть и другие решения. Нашел вот-такое (->). Везут-с. Может кто еще какие варианты находил? Смущает отсутствие 100500 разных китайских поставщиков на Али.Cкpипaч (56 знак., 21.04.2020 21:56 , ссылка)
                                                • Во-первых, дорого. А во-вторых она у меня в корпусе в лёжку лежит, т.к. тот по высоте невелик — не поместилась бы в нем эта плата вертикально. — Kceния (21.04.2020 22:04 )
                                                  • Подумывал заказать аналогичное, но горизонтальное. Тут, не в Китае. Из оргстекла сейчас дешево режут.Cкpипaч (67 знак., 21.04.2020 22:17 )
                                                  • Она у меня тоже с пустыми дырочками пришла, а гребенки рядом лежали. — Kceния (21.04.2020 21:51 )
                                                  • Спасибо, вижу — только через USART1. Ну и как вы с этим живете? 🙂 — Kceния (10.04.2020 19:03 )
                                                    • Чтобы жить и радоваться, нужно всего две вещи: 1) жить, 2) радоваться. Или хотя бы иметь ST-Link. Если у вас есть плата discovery или nucleo, ST-Link у вас уже есть. Ну, или нужно было у тех же китайцев заказать за копейки. — йцyкeн (10.04.2020 19:26 )
                                                      • Неделей раньше получила вот такой, но из пластика его еще не вырезала. Вы это имели в виду?Kceния (1 знак., 10.04.2020 19:57 , картинка)
                                                        • У меня такой сегодня помер. Перестал виндой определяться. Говёное изделие конечно — Звepoящep (16.04.2020 17:54 )
                                                          • А вы его не открывали? Что у него внутри? Было бы интересно посмотреть. Рабочий экземпляр вскрывать жалко, а вы своему можете своему некропсию сделать. — Kceния (16.04.2020 17:59 — 18:37 )
                                                            • Открывали конечно. Там та «BluеPill» без всяческих буферов. Покупал парочку. Правда в пластиковом корпусе (они чут дороже — их меньше барыжат). Одному даже разъем приделал для отладки — пользовал в качестве отладочной платы. Прошивки на этих китайцев в сети есть. Если что-то и слетит, можно легко восстановить. Картинки: (на плате приклеен кусочек разъема 4×1.27 — для подключения к пинам отладки).Гyдвин (2 знак., 16.04.2020 18:20 — 18:32 , картинка, картинка)
                                                              • А не знаете ли, какой загрузчик в демо-платах Nucleo? Там к USB присоединен тот же STM32F103 напрямую, очевидно, что и загрузчик у него USB-овый. И еще вопрос: для чего на этих платах делают такой глубокий пропил? Запрограммировал — отломил? 🙂Kceния (1 знак., 17.04.2020 18:10 , картинка)
                                                                • это как раз ST-LINK — Aleksey_75 (17.04.2020 18:18 )
                                                                  • Однако стандартная программа STM32CubeProgrammer.exe нос воротит — пишет, что бутлоадер устаревшей версии. Тем не менее, IAR прошивает, если сказать ему, что дебаггер ST-LINK. Но раз уж в 103-ий возможно, залить USB-загрузчик, то где его взять? Т.е. могу ли я залить в него такой загрузчик (скажем, JTAG-программатором), чтобы потом сколько угодно раз перешивать его без программатора непосредственно через USB? — Kceния (17.04.2020 18:34 )
                                                                    • со старой версией ST-LINK будет работать STM32 ST-LINK Utility.exe — User_ (17.04.2020 20:49 )
                                                                    • напишите свой бут и вперед с пестнями! — Aleksey_75 (17.04.2020 18:57 )
                                                                      • Это тяжело для меня :). А готовые бутики нигде не раздают? — Kceния (17.04.2020 18:58 )
                                                                        • надо для начала выяснить! Вам действительно нужен бут ? Если программировать будете только вы, имхо, все это лишнее, шить по swd лить голову не парить! Если еще кто-то и проша может утечь к «врагам», тогда нужен не только бут но и шифрование — Aleksey_75 (17.04.2020 19:41 )
                                                                          • Мне бы такой же, какой на STM32F4xx фабрично прошивают, но только в исходниках, т.к. по размеру памяти они с 103-им сильно отличаются, тогда как bootloader на нужном месте должен быть. Т.е. мне нужно не абы как прошить, чтобы все проги признавали бы в нем ST-LINK, а он сам этот протокол поддерживал.Kceния (291 знак., 17.04.2020 19:56 )
                                                                            • брррр, причем здесь ST-LINK. Посмотрите , но чтот мне подсказывает, что вы ищете приключений на свою пятую точку, без видимых на то оснований )))Aleksey_75 (5 знак., 17.04.2020 19:59 , ссылка)
                                                                              • Посмотрю, спасибо. — Kceния (17.04.2020 20:00 )
                                                                              • Дык это вирус какой-то 🙂 — Kceния (17.04.2020 19:47 )
                                                                                • Нет там вируса 🙂 Просто прога, позволяющая слегка кастомизировать уже скомпилированный бинарник. Если не хотите глубоко разбираться — то самое оно. — LightElf (17.04.2020 21:12 )
                                                                                • Тут оно же только в исходниках ->ir0407 (30 знак., 17.04.2020 21:01 , ссылка, ссылка)
                                                                                  • Вторая ссылка — загрузчик для Ардуины, такого мне не надо. А первый слишком странный — внутри FATFS, а мне такой нагрузки задаром не нужно, т.к. превращать МК во флешку категорически не хочу. — Kceния (17.04.2020 21:12 )
                                                                                    • Если посмотреть на состав исходников, то там можно собрать хоть черта в ступе.:) — ir0407 (17.04.2020 21:50 )
                                                                                    • Возможно поэтому он на Ali и дороже. — Гyдвин (16.04.2020 18:36 )
                                                                                      • Не, это как повезет. У меня в самых дешевых якобы STM32f103 в основном и в одном 102. А по факту скорее всего из одной бочки наливали. — Andreas (16.04.2020 18:40 )
                                                                                      • Ну вот у меня походу проц и сдох. А перепаять — надо на работу ехать, фен там остался. Но светодиодом моргает, но медленно. Может попробовать через UART перепрошить. — Звepoящep (16.04.2020 18:49 )
                                                                                        • Может в кварце «лампочка стряслась»? 🙂 — Гyдвин (16.04.2020 19:50 )
                                                                                          • Попробовал перепрошить труп. Перепрошивается. Причём ST-Link на китайский чип не ругается, тупо прошивает и норм. Так вот, он прошивается, но винда его не видит один фиг. — Звepoящep (20.04.2020 08:11 )
                                                                                            • Кстати вспомнил, и у меня перепрошивался, но не работал. В морг. — Andreas (20.04.2020 13:24 )
                                                                                              • Еще можно перепаять 🙂 — Kceния (20.04.2020 13:52 )
                                                                                              • Неверно выразился. Винда пишет — устройство не распознано. — Звepoящep (20.04.2020 08:59 )
                                                                                              • 🙂 гы. в моём мусорнике нашлось ST-Link V2 в стиковом исполнении три типа по поведению. один перешивается, не работает с EFM32 (отказывается), но с отладкой разных STM32 вполне работоспособен. второй — не хочет перешиваться — ругается, мол, неизвестная фирмваря. утилитой апгрейдил до последней версии — типа смогло, но в J-Link не шилось — так же обругалось. в конце концов оно сдохло и больше не определяется. третий тип веселый — в зависимости от версии перешивалки либо типаVit (471 знак., 17.04.2020 17:56 )
                                                                                                • в кетайце третьего типа стоит чудо с маркировкой CKS32F103C8T6Vit (19 знак., 21.04.2020 13:22 , ссылка, ссылка)
                                                                                                • Усиленно ковыряться сейчас нет времени, увы 🙁 Сделал только вот что: Залил фирмварь от ST-Link в BluePill с помощью JLink. Прогой JFlash. Этот J-Link за минуту до этого изобразил перепрошиватором из того-же китайского ST-Link, ибо лень вошкаться с кривыми программаторами ST 🙂 После перетыкания USB, BluePill с этой прошивкой определилась, как ST-Link. Запустил перепрошиватор (повторюсь — правильный, который сам лечил. Пущай не пугает название — просто тогда возился сГyдвин (254 знак., 18.04.2020 00:19 , ссылка)
                                                                                                  • Спасибо, посмотрю во вторник. — Vit (18.04.2020 12:37 )
                                                                                                  • Не то, чтобы боролся, но юзал. и оно вроде как даже живёт. Последнее из испробованного — какая-то недавняя версия DAP-Link прям на BluePill.Vit (996 знак., 17.04.2020 22:45 )
                                                                                                  • Мне было нужно прошивать через J-Flash (отладка не нужна). Для работы мелочевку я в Китае беру редко. А тут коробка с тучей JLink-OB потерялась:)Vit (48 знак., 18.04.2020 13:17 )
                                                                                                  • Ну у меня оно почему-то работает и с утилитами от Segger, и с другими процами. — Гyдвин (10.04.2020 20:13 )
                                                                                                    • У ОБ и уарт есть для отладки, и ресет. Например кинетисы без ресета вообще не желают шиться. — Andreas (10.04.2020 20:18 )
                                                                                                      • Ну у меня есть парочка оригинальных J-Link со всеми полагающимися причиндалами, но и переделанный ST тоже не лишний. — Гyдвин (10.04.2020 20:22 )
                                                                                                      • Чем? — VLLV (10.04.2020 21:09 )
                                                                                                        • Я так и не смогла написать BAT-файл, чтобы он прошивал автоматически, а не как сейчас — путем мышедолбления по меню и кнопкам. — Kceния (10.04.2020 21:11 )
                                                                                                          • Я сам не программист, но один человек, которому поставили эту задачу, запускает Jflash и отрабатывает тот факт, что jlink — это клон. Второй человек скрипт написал, читает ID, запрашивает серийный номер из базы и программирует. Говорят, там бездна возможностей для тех, кто умеет. — VLLV (10.04.2020 21:16 )
                                                                                                            • Не поняла, что вы сказали. Уметь программировать здесь не надо, а надо твердо помнить, по каким местам мышкой стучать (т.к файл прошивки не меняется, но регулярно появляются новые платы, которые требуется этой прошивкой прошить, а к тому времени забывается, по каким местам мышкой раньше бродили). Вот пример инструкции, которую я написала, чтобы не забыть порядок действий:Kceния (672 знак., 10.04.2020 21:34 )
                                                                                                              • Это стеб? Пример для другого проца:Andreas (136 знак., 10.04.2020 21:42 )
                                                                                                                • Именно. Segger рулит. Пущай Ксения так попробует изобразить со ST-Link. — Гyдвин (11.04.2020 01:03 )
                                                                                                                  • Да запросто, openocd все это умеет. Скрипт можно накидать на питоне или bash — evgeniy1294 (11.04.2020 12:23 )
                                                                                                                  • C stlink именно это еще проще, но сеггер конечно удобен, что любой арм берет. Уже с прошивкой бита защиты:Andreas (60 знак., 11.04.2020 11:58 )
                                                                                                                  • так если задача батник сделать, то STMFlashLoader.exe работала через батник на ура, при этом шилось через ком порт. STM32 ST-LINK Utility.exe позволяла шить батником через St-Link. С новой, которая Cube, не разбирался — User_ (11.04.2020 02:26 )
                                                                                                                  • Сколько надо — столько и сотрет. Если есть особые пожелания — добавляются особые команды. В хелпе неплохо они описаны. — Andreas (10.04.2020 22:03 )
                                                                                                                  • если только прошить, то зачем все эти перепрошивания и т.д. Есть две утилиты от STM (старая и новая), которые прекрасно программируют stm-кие камни через St-Link — User_ (10.04.2020 20:02 )
                                                                                                                    • А через IAR получится? — Kceния (10.04.2020 20:06 )
                                                                                                                      • дабезпроблем — Andreas (10.04.2020 20:08 )

                                                                                                                      Лето 7532 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна. Вебмастер
                                                                                                                      MMI © MMXXIV

                                                                                                                      Микроконтроллер широкого назначения STM32F101CBT6 ST LQFP48

                                                                                                                      Микроконтроллер широкого назначения STM32F101CBT6 ST LQFP48

                                                                                                                      STMicroelectronics STM32F101CBT6, 32bit ARM Cortex M3 Microcontroller, 36MHz, 128 kB Flash, 48-Pin LQFP STMicroelectronics отличается от других производителей полупроводников прекрасным соотношением «цена/функционал» . Читать далее.

                                                                                                                      ATMEL ATTINY13A микроконтроллер

                                                                                                                      • Доступность: Нет в наличии 0

                                                                                                                      Доставка и оплата

                                                                                                                      Оплата

                                                                                                                      Узнайте как оплатить!

                                                                                                                      Наложенный платеж

                                                                                                                      Оплата заказа после его получения

                                                                                                                      Доставка Новой Почтой

                                                                                                                      Стоимость доставки оплачивает получатель

                                                                                                                      Банковский перевод

                                                                                                                      Предоплата переводом на карту Приватбанка

                                                                                                                      STMicroelectronics STM32F101CBT6, 32bit ARM Cortex M3 Microcontroller, 36MHz, 128 kB Flash, 48-Pin LQFP

                                                                                                                      STMicroelectronics отличается от других производителей полупроводников прекрасным соотношением «цена/функционал» при сохранении самых высоких стандартов качества. Семейство STM32 — яркий пример этого. Высокая эффективность с первоклассной периферией и низким энергопотреблением по доступной цене. Простая архитектура c простыми в использовании инструментами – облегчает работу с данными микроконтроллерами. STM32F100, как и все микроконтроллеры семейства STM32, имеет встроенный DMA-контроллер, позволяющий разгрузить ядро от обработки и передачи данных. Нельзя не отметить наличие в семействе STM32 высококлассной аналоговой периферии. В частности, STM32F100 имеет 12-битный 16-канальный АЦП со временем измерения 1,2 мкс. В других сериях и семействах АЦП — более быстрый (1 мкс или даже 0,5 мкс).

                                                                                                                      • STM32F100 Value Line. Микроконтроллеры имеют максимальную тактовую частоту 24 МГц, флэш-память программ до 128 Кбайт, ОЗУ до 8 Кбайт, 12-разрядные АЦП (1) и ЦАП (2), интерфейсы UART (3), I2C (2), SPI (2). При цене, меньшей, чем у некоторых 8-разрядных МК, эти микроконтроллеры целесообразны для их замены в перспективных разработках;
                                                                                                                      • STM32F101 Access Line. Максимальная тактовая частота 36 МГц, флэш-память программ до 1 Мбайт, ОЗУ до 80 Кбайт, 12-разрядные АЦП (1) и ЦАП (2), интерфейсы UART (5), I2C (2), SPI (3), параллельный интерфейс LCD. Эта линейка уже допускает подключение небольшого дисплея;
                                                                                                                      • STM32F102 USB Access Line. Максимальная тактовая частота 48 МГц, флэш-память программ до 128 Кбайт, ОЗУ до 16 Кбайт, 12-разрядный АЦП, кроме интерфейсов UART (3), I2C (2) и SPI (2) еще имеется USB-device 2.0 Full Speed;
                                                                                                                      • STM32F103 Performance Line. Максимальная тактовая частота 72 МГц, флэш-память программ до 1 Мб, ОЗУ до 96 Кбайт, 12-разрядные АЦП (3) и ЦАП (2), интерфейсы UART (5), I2C (2), SPI (3), USB-device 2.0 FS, CAN, SDIO, параллельный интерфейс LCD. Это наиболее мощная по параметрам ядра и набору интерфейсов линейка;
                                                                                                                      • STM32F105/107 Connectivity Line. Максимальная тактовая частота 72 МГц, флэш-память программ до 256 Кбайт, ОЗУ до 64 Кбайт, 12-разрядные АЦП (2) и ЦАП (2), интерфейсы UART (5), I2C (2), SPI (3), USB-device 2.0 FS, CAN (2), Ethernet (в STM32F107). Это микроконтроллеры с расширенными коммуникационными возможностями.
                                                                                                                      • Ядро: ARM Cortex M3
                                                                                                                      • Ширина шины данных: 32 bit
                                                                                                                      • Максимальная тактовая частота: 36 MHz
                                                                                                                      • Размер программной памяти: 32 kB
                                                                                                                      • Размер ОЗУ данных: 6 kB
                                                                                                                      • Разрешение АЦП: 12 bit
                                                                                                                      • Рабочее напряжение питания: 2 V to 3.6 V
                                                                                                                      • Максимальная рабочая температура: + 85 C
                                                                                                                      • Минимальная рабочая температура: — 40 C
                                                                                                                      • Упаковка / блок: UFQFPN-36
                                                                                                                      • Вид монтажа: SMD/SMT
                                                                                                                      • Тип ОЗУ данных: SRAM
                                                                                                                      • Тип интерфейса: I2C, SPI, USART
                                                                                                                      • Количество каналов АЦП: 10
                                                                                                                      • Тип памяти программ: Flash
                                                                                                                      • Напряжение питания — макс.: 3.6 V
                                                                                                                      • Напряжение питания — мин.: 2 V

                                                                                                                      Клоны STM32: хороший, плохой, злой

                                                                                                                      После того, как некий продукт становится популярным, у компаний, которые могли бы его создать, но не сделали этого, неизбежно возникает желание прокатиться на волне его популярности. Это — лишь вопрос времени. Именно этот феномен в ответе за то, что было создано так много ужасных детских игрушек и компьютерных игр. Проявляется он и в мире электроники. Поэтому неудивительным должно выглядеть то, что произошло с чрезвычайно успешной серией микроконтроллеров (Microcontroller Unit, MCU) STMicroelectronics, основанных на ARM. На долю этих контроллеров выпало немалое количество имитаций, клонов и явных подделок.

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

                                                                                                                      Поговорим о том, какие существуют подделки и имитации STM32, и о том, каково это — с чем-то подобным столкнуться.

                                                                                                                      Анатомия фальшивки

                                                                                                                      В начале сего года был опубликован хороший разбор, посвящённый поддельным микросхемам STM32F103, встречающихся на платах Blue Pill. На корпусах подделок можно видеть такую же маркировку, что и на корпусах настоящих STM32. Однако подделки можно распознать, присмотревшись к схеме расположения углублений на корпусах и к качеству нанесения маркировки.

                                                                                                                      Слева — настоящая микросхема STM32, а справа — поддельная. На её корпусе есть дополнительные углубления

                                                                                                                      Подделки не всегда отличаются тем же функционалом, что и оригинальные микроконтроллеры. Автор вышеупомянутой статьи отмечает, что многие из этих микросхем нельзя даже нормально прошить, или хотя бы запустить на них универсальный пример Blinky. Возможно даже то, что эти подделки, на самом деле, сделаны на основе бракованных кристаллов интегральных схем STM32F103 или подобных им, которые кто-то продаёт на чёрном рынке.

                                                                                                                      STM32FEB — это не настоящий STM32

                                                                                                                      Куда коварнее, возможно, чипы, которые можно назвать «полуподделками». Они, на первый взгляд могут выглядеть как настоящие. Но их выдаёт маркировка. Выглядит она как STM32FEBKC6. У компании STMicroelectronics нет компонентов с такой маркировкой. Наличие на чипе подобной маркировки служит важным признаком его поддельности. Это — клон STM32, столкнувшись с которым, можно нажить себе кучу проблем. Хотя подобные микроконтроллеры и работоспособны, они представляют собой урезанную версию STM32F103, в которой реализованы не все возможности настоящих чипов. О них, кроме того, очень сложно найти подробные сведения.

                                                                                                                      Копии талантливых подражателей

                                                                                                                      А тут мы поговорим о самых хитрых клонах, представленных в виде MCU CS32F103. Такие клоны работают точно так же, как настоящие чипы, на них нормально запускается код Blinky, скомпилированный для STM32F103. Некоторые из них могут быть даже маркированы как микросхемы производства STMicroelectronics. Это усложняет их уверенную идентификацию.

                                                                                                                      CS32F103 — более честный клон

                                                                                                                      Некоторые из них производит китайская компания CKS (中科芯微), которая, по всей видимости, создала полноценную версию STM32F103, дойдя даже до исправления дефектов, описанных в документации STMicroelectronics. Подробнее об этих микроконтроллерах можно почитать здесь.

                                                                                                                      Главное отличие этих копий от оригиналов становится заметным при получении сообщения об ошибке «UNEXPECTED idcode: 0x2ba01477» в ходе загрузки кода на них. Правда, эту проблему можно решить, например, используя соответствующий конфигурационный скрипт в OpenOCD.

                                                                                                                      Клоны производства GigaDevice

                                                                                                                      Возможно, самый известный создатель клонов STM32 — это компания GigaDevice со своими микроконтроллерами GD32. Как отмечено в этом материале, GD32F103, по-видимому, является более быстрой и функциональной версией STM32F103. GD32F103 имеет более высокую тактовую частоту и более быструю флеш-память. А изучение разобранного чипа показало, что в корпусе имеются две микросхемы. Одна — это основной чип, а вторая — это флеш-хранилище. А такое внутреннее устройство GD32F103 позволяет довольно гибко менять размер памяти чипов, производимых GigaDevice.

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

                                                                                                                      На первый взгляд чипы GD32 выглядят привлекательнее, чем STM32F1. Их тактовая частота выше (108 против 72 Мгц), в них более быстрая память. Хотя флеш-хранилище GD32 должно было бы работать очень медленно, так как это — SPI ROM, в микроконтроллере используется SRAM главного чипа в роли «кеша» для флеш-хранилища, что приводит к тому, что это хранилище быстрее того, которое входит в состав основного чипа. Оно не пребывает в состоянии ожидания даже при работе микроконтроллера на полной доступной ему тактовой частоте.

                                                                                                                      Минус использования SRAM в связке с флеш-памятью заключается в том, что это повышает энергопотребление устройства. Это, кроме того, вызывает задержку при загрузке (небольшую), вызванную тем, что содержимое SPI ROM копируется в SRAM до того, как сможет загрузиться прошивка. В зависимости от конкретной ситуации это может быть и достоинством, и недостатком. Это, естественно, тот же подход, который используется в микроконтроллере ESP8266, где для хранения прошивки тоже используется внешняя SPI ROM.

                                                                                                                      Правда, если говорить о других устройствах GD32, то, видимо, их разработчики не так сильно стремились к созданию прямых клонов. Так, микроконтроллер GDF303 использует ту же периферию, что и GDF103, хотя периферия STM32F3, пожалуй, лучше. Это, кроме того, не позволяет использовать GDF303 на платах, рассчитанных на STM32F3xx. На решение вопроса об использовании GD32 может повлиять отношение того, кто решает этот вопрос, к периферии STM32F1.

                                                                                                                      Они повсюду

                                                                                                                      Настоящий MCU CH32F103 на плате Blue Pill

                                                                                                                      Хотя я и знала о вышеописанных подделках и клонах, я, тем не менее, недавно встретилась с кое-чем новым из этой сферы. Я купила несколько плат Blue Pill с чипами STM32F103 у крупного немецкого продавца, занимающегося импортом подобных вещей. Я этим не горжусь, но мне нужны были дешёвые платы для датчиков BlackMagic, а предложение выглядело очень уж заманчивым. В комментариях к товарам на Amazon одни говорили, что получили платы с настоящими чипами, другие же говорили о подделках.

                                                                                                                      Меня влекло нездоровое любопытство, я получила несколько таких плат, после чего, со смесью ужаса и удовольствия заметила, что на них установлены вовсе не обещанные контроллеры STM32F103C8T6. На них стояли чипы CH32F103C8T6. Хорошо хоть они не прикидывались настоящими STM32.

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

                                                                                                                      Присоединив плату к ST-Link/V2 и подключившись к ней с помощью OpenOCD, я получила ту же ошибку CPUTAPID, которую выдают CS32F103 при использовании конфигурационного файла, рассчитанного на STM32F1xx. После того, как я отредактировала файл stm32f1xx.cfg , последовав найденным в интернете советам, я смогла без проблем прошить пример Blinkу из моего STM32-проекта Nodate.

                                                                                                                      Это говорит о том, что, по крайней мере, базовое управление тактированием и сбросом, GPIO и системный таймер достаточно похожи на то, что имеется в STM32. В результате система смогла пройти этот простой тест. Ещё мне хотелось бы исследовать то, как тут работают USART, DMA, SPI, I2C и I2S, узнать, соответствует ли их функционирование тому, что показывают STM32F103, которые имеются на нескольких моих платах. Если эти микроконтроллеры — это нечто вроде CS32F103, то я думаю, что они, скорее всего, будут работать так же, как STM32F103.

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

                                                                                                                      Пришло время для паники?

                                                                                                                      Внимательный читатель, возможно, заметил, что практически все рассмотренные клоны имитируют первое поколение микроконтроллеров STMicroelectronics на Cortex-M (серию STM32F1). В результате оказывается, что происходящее может обеспокоить лишь тех, кому нужно покупать платы Blue Pill для коммерческих проектов. Вряд ли это особо потревожит тех, для кого возня с STM32 — это хобби, и тех, кто держит у себя несколько дешёвых плат с Cortex-M3 на борту для разных «домашних» проектов. Если заказывать микроконтроллер и платы у надёжных поставщиков, вроде Digikey и Mouser, то о подделках тоже можно не волноваться.

                                                                                                                      Платы Blue Pill в последнее время претерпели некоторые улучшения, что выражается в выходе их новой версии с MCU STM32F4, которую, из-за её чёрного цвета, называют Black Pill. Хотя эти новые платы и немного дороже тех, что основаны на STM32F103, они дают разработчику значительно больше ресурсов и гораздо более интересную (как мне кажется) периферию. Это может повлиять на рынок плат, основанных на STM32F103, в результате чего ослабеет поток бесчисленных клонов, подделок и копий STM32F103.

                                                                                                                      Правда, так будет лишь до того момента, пока на рынок не попадут первые партии поддельных, клонированных и скопированных MCU STM32F401 и STM32F411. Вряд ли с этим можно что-то сделать.

                                                                                                                      А вам попадались поддельные STM32?

                                                                                                                      Программирование ARM-контроллеров STM32 на ядре Cortex-M3. Часть 15. Таймеры. Глава 1 — Введение. Простейшие таймеры

                                                                                                                      В микроконтроллерах stm32 есть 14 различных таймеров, которые по своим функциональным возможностям условно делятся на три типа: простейшие (TIM6,7), общего назначения (TIM2-5, TIM9-14) и продвинутые (TIM1,8).

                                                                                                                      Если кратко описать отличия этих трёх типов, то они заключаются в том, что простейшие таймеры почти ничего не умеют, кроме простого отсчёта заданных интервалов, таймеры общего назначения дополнительно мультиплексированы с выводами микроконтроллера, которые они могут использовать в качестве выходов (для генерации сигналов различной формы) или входов (для измерения интервалов между сигналами), а продвинутые таймеры имеют дополнительные вкусные плюшки, типа управления комплиментарными выходами с программируемым дэдтаймом.

                                                                                                                      В принципе в младших линейках, например, в популярных stm32f103 реализованы всего 4 таймера (1 продвинутый и 3 общего назначения), но я всё равно напишу про все варианты, постепенно продвигаясь от простого к сложному.

                                                                                                                      Первая глава будет посвящена изучению простейших таймеров: TIM6 и TIM7.

                                                                                                                      Итак, простейшие таймеры TIM6 и TIM7 работают полностью независимо друг от друга, не имея никаких общих ресурсов, и каждый из них обладает следующим функционалом:

                                                                                                                      • 16-битный автоматически перезагружаемый нарастающий счётчик (то есть он может считать от нуля до заданного значения)
                                                                                                                      • 16-битный программируемый предделитель (позволяет увеличивать счётчик не каждый такт, а через заданное количество тактов)
                                                                                                                      • контур синхронизации для управления DAC (событие переполнения таймера может служить триггером для DAC)
                                                                                                                      • генерация прерываний/запросов к DMA по событию переполнения

                                                                                                                      Ниже представлена блок-схема таймеров TIM6,7

                                                                                                                      Как видите, основу таймера составляют 3 регистра:

                                                                                                                      • TIMx_CNT — регистр-счётчик (здесь происходит счёт)
                                                                                                                      • TIMx_PSC — регистр предделителя (здесь задаётся дополнительное количество тактов для счётчика)
                                                                                                                      • TIMx_ARR — регистр автоматической перезагрузки (здесь хранится значение, при достижении которого нужно обнулять счётчик)

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

                                                                                                                      Интересной особенностью двух последних регистров является то, что они имеют буферизацию. Что это значит? Это значит, что для каждого из них есть реальный рабочий регистр, — в доке он называется теневым (shadow register) и недоступен для прямого доступа, и есть регистр предварительной загрузки (preload register) — буфер, к которому и осуществляется доступ в операциях чтения/записи. На схеме выше эти два регистра выделены цветом и тенью.

                                                                                                                      Буферизация позволяет осуществлять загрузку данных из регистра предварительной загрузки в рабочий регистр двумя разными способами: немедленно при операции записи в буфер (сквозная запись) или с привязкой к событию обновления — UEV (отложенная запись). Для регистра TIMx_ARR выбор момента синхронизации осуществляется битом ARPE в регистре настройки TIMx_CR1. Для предделителя синхронизация осуществляется только по событию UEV.

                                                                                                                      Событие UEV (обновление счётчика) генерируется в двух случаях: 1 — при переполнении счётчика (то есть при достижении им значения, записанного в TIMx_ARR), 2 — при установке бита UG в регистре TIMx_ERG (он может быть установлен программно). По сути, это единственное событие, которое может произойти с простейшими таймерами. Вокруг этого события всё и крутится.

                                                                                                                      Установкой бита UDIS в регистре TIMx_CR1 можно выключить событие обновления. Это позволяет избежать обновления рабочих регистров при записи новых значений в регистры предварительной загрузки. В этом случае событие обновления не происходит до тех пор, пока бит UDIS не будет сброшен в ноль, хотя счётчик и предделитель при достижении заданных значений по прежнему сбрасываются и начинают отсчёт с нуля.

                                                                                                                      Дополнительно, если установлен бит бит URS в регистре TIMx_CR1, то установка бита UG вызывает генерацию события обновления (UEV), однако при этом не устанавливается флаг UIF (и, соответственно, не генерируется запрос на прерывание и запрос к DMA).

                                                                                                                      TIMx_CR1 — регистр настройки. Содержит биты, определяющие режимы работы таймеров.

                                                                                                                      • CEN (counter enable): включение(1)/выключение(0) счётчика.
                                                                                                                      • UDIS (update disable): выключение(1)/включение(0) события UEV. Когда событие выключено, то установка бита UG вызывает реинициализацию счётчика, но не вызывает генерацию события UEV (соответственно, не происходит синхронизация теневых регистров с буферами, не происходит установка флага UIF и не генерируется запрос к DMA).
                                                                                                                      • URS (update request source): выбор источников генерирования события UEV. Если этот бит сброшен, то событие UEV генерируется при переполнении счётчика (то есть при достижении им значения, записанного в TIMx_ARR) или при установке бита UG. Если бит установлен, то UEV генерируется только при переполнении счётчика.
                                                                                                                      • OPM (one pulse mode): если бит установлен, то при наступлении события UEV автоматически сбрасывается бит CEN и счётчик останавливается.
                                                                                                                      • ARPE: если бит установлен, то данные, записанные в регистр TIMx_ARR переписываются в рабочий регистр по событию UEV. Когда бит сброшен — используется сквозная запись, то есть данные, записанные в TIMx_ARR сразу записываются в рабочий регистр.

                                                                                                                      TIMx_CR2 — регистр настройки. Содержит биты, определяющие режимы работы таймеров.

                                                                                                                      • MMS[2:0] (master mode selection): эти биты определяют, какие события таймера будут использоваться для активации выхода триггера (то есть в качестве события TRGO для подчинённых устройств):
                                                                                                                        • 000: Reset — в качестве выхода триггера используется бит UG
                                                                                                                        • 001: Enable — в качестве выхода триггера используется бит CEN
                                                                                                                        • 010: Update — в качестве выхода триггера используется событие UEV

                                                                                                                        TIMx_DIER — регистр управления прерываниями и DMA.

                                                                                                                        • UDE: включение(1)/выключение(0) генерирования запроса к DMA по событию UEV
                                                                                                                        • UIE: разрешение(1)/запрет(0) генерирования прерывания по событию UEV

                                                                                                                        TIMx_SR — регистр статуса

                                                                                                                        • UIF: флаг ожидания прерывания по событию обновления счётчика (UEV). Этот флаг устанавливается аппаратно в случае переполнения (ну то есть обновления) счётчика при сброшенном бите UDIS или в случае реинициализации счётчика, вызванного установкой бита UG при сброшенных битах URS и UDIS. Сбрасывается программно, записью нуля.

                                                                                                                        TIMx_EGR — регистр генерации события

                                                                                                                        • UG: установка этого бита в 1 вызывает программную генерацию события UEV (если не установлен бит UDIS) и в любом случае вызывает реинициализацию счётчика таймера и очистку счётчика предделителя.

                                                                                                                        Ну и осталось только 3 уже известных нам 16-битных регистра: регистр-счётчик TIMx_CNT, регистр предделителя TIMx_PSC и регистр автоматической перезагрузки TIMx_ARR.

                                                                                                                        С учётом регистра TIMx_PSC итоговое значение частоты счёта таймера получается равным fCK_PSC/(PSC[15:0]+1), где fCK_PSC — частота тактирования таймера от шины APB1.

                                                                                                                        Следует учесть, что пока в регистре TIMx_ARR записан ноль — работа таймера блокирована.

                                                                                                                        Программирование простейших таймеров осуществляется по классической схеме:

                                                                                                                        1. Включаем тактирование таймера. Оба простейших таймера (TIM6 и TIM7) тактируются от шины APB1, соответственно тактирование включается в регистре APB1_ENR или функцией RCC_APB1PeriphClockCmd (из библиотеки StdPeriph)
                                                                                                                        2. Настраиваем предделитель (TIMx_PSC) и регистр автоматической перезагрузки (TIMx_ARR). Значения в обоих регистрах можно настроить функцией TIM_TimeBaseInit (из библиотеки StdPeriph).
                                                                                                                        3. Настраиваем режим работы регистра автоматической перезагрузки (бит ARPE): отложенная или сквозная запись нового значения. Для настройки можно использовать функцию TIM_ARRPreloadConfig (из библиотеки StdPeriph).
                                                                                                                        4. Настраиваем события: 1) Настраиваем источник события UEV: только счётчик или счётчик и бит UG (определяется битом URS). Для настройки можно использовать функцию TIM_UpdateRequestConfig (из библиотеки StdPeriph); 2) Определяем, должно ли вообще генерироваться событие UEV (определяется битом UDIS). Для настройки можно использовать функцию TIM_UpdateDisableConfig (из библиотеки StdPeriph)
                                                                                                                        5. Если нужно, то настраиваем DMA. Для простейших таймеров можно только включить/выключить запросы к DMA (определяется битом UDE). Для настройки можно использовать функцию TIM_DMACmd (из библиотеки StdPeriph)
                                                                                                                        6. Если нужно, то настраиваем выход TRGO. Задаем, какое событие будет генерировать сигнал TRGO: reset, enable или update (определяется битами MMS[2:0]). Для настройки можно использовать функцию TIM_SelectOutputTrigger (из библиотеки StdPeriph).
                                                                                                                        7. Настраиваем прерывания. Для простейших таймеров можно только включить/выключить прерывание от UEV (определяется битом UIE). Для настройки можно использовать функцию TIM_ITConfig.
                                                                                                                        8. Включаем таймер установкой бита CEN регистра TIMx_CR1

                                                                                                                        Примера работы с простейшими таймерами не будет — тут и так всё очень просто, так что на этом на сегодня всё. О работе с более сложными таймерами читайте в следующих главах.

                                                                                                                        1. Часть 1. Установка MDK, создание проекта, основы Keil uVision
                                                                                                                        2. Часть 2. Команды и директивы ассемблера, структура и синтаксис программы. Первая программа для STM32
                                                                                                                        3. Часть 3. Карта памяти контроллеров STM32, методы работы с памятью
                                                                                                                        4. Часть 4. Регистры, старт и режимы работы контроллеров STM32
                                                                                                                        5. Часть 5. Как залить прошивку в контроллер
                                                                                                                        6. Часть 6. Настройка системы тактирования
                                                                                                                        7. Часть 7. Работа с портами ввода-вывода
                                                                                                                        8. Часть 8. Процедуры на ассемблере для STM32
                                                                                                                        9. Часть 9. Система прерываний
                                                                                                                        10. Часть 10. CMSIS, использование стандартных библиотек и функций
                                                                                                                        11. Часть 11. Подключение и использование драйверов из пакета StdPeriph
                                                                                                                        12. Часть 12. Работа с модулями USART и UART.
                                                                                                                        13. Часть 13. Работа с модулями ADC
                                                                                                                        14. Часть 14. Использование DMA
                                                                                                                        15. Часть 15. Таймеры. Глава 1 — Введение. Простейшие таймеры
                                                                                                                        16. Часть 15. Таймеры. Глава 2 — Таймеры общего назначения TIM9 — TIM14
                                                                                                                        17. Часть 15. Таймеры. Глава 3 — Таймеры общего назначения TIM2 — TIM5
                                                                                                                        18. Часть 15. Таймеры. Глава 4 — Продвинутые таймеры TIM1, TIM8
                                                                                                                        19. Часть 16. Создание устройства USB HID в Keil uVision при помощи библиотечного компонента USB
                                                                                                                        20. Приложение 1. Набор инструкций THUMB-2 и особенности их использования
                                                                                                                        21. Приложение 2. Таблица векторов прерываний для семейств STM32F101, STM32F102, STM32F103
                                                                                                                        22. Приложение 3. Драйвера и функции библиотеки StdPeriph

                                                                                                                        Понравилась статья? Поделись с друзьями!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *