STM32 Hardware Development - Getting Started
-
- Сообщения: 88
- Откуда: Москва-Киров
Поковырялся с Discovery и наконец созрел для собственного проекта, сел разводить и натолкнулся на кучу вопросов (ну как кучу, так кучку). Может быть мне помогут здесь?
Сначала изучил я доку'мент: AN2586_Hardware_Development_Getting_started.pdf
Также тщательно прочитал описалку на сам дискавери с его схемами.
Первый вопрос который появился: а как я это буду программировать? Вроде как ответ сразу и появился: используй SWD разъем с ST-Link, встроенного в дискавери. Ответ очевидный, стал искать в интернете: какие проблемы могут появится. Узнал, что ресет мне не нужен, а нужно реально 2 провода+земля. При этом вот тут: http://we.easyelectronics.ru/GYUR22/stm32-swd-misteriya.html говорят о том, что нужно запараллелить вход через емкость на землю!!!! И вот это мне совсем непонятно. Расскажите пожалуйста, кто знает как правильно использоваьть SWD разъем с выхода дискавери для программирования других stm32.
На будущее мне нужен будет bootloader. О чудо, в stm32 есть встроенный бутлодырь, работающий по UART. Но есть сложности с его работой: во первых мне нужно уметь ресетить контроллер, + нужно выставить правильные уровни на ногах BOOT0, BOOT1. Итого, мне в конечном устройстве нужно иметь 2 джампера, для включения правильных уровней на ногах BOOT и кнопка сброса. В случае, когда мне надо обновить прошивку, я должен буду лезть внутрь устройства, выставлять джамперы и нажимать на кнопку. И это плохо. На авр у меня было сделан собственный бутлодырь, который всегда включался при запуске, ждал правильную команду по UART, если не дожидался, то переходил на 0 адрес, а если дожидался, то переписывал всю память постранично.
Хотелось бы реализовать такой же процесс и в stm32.
Собственно вопрос мой заключается в том, как можно переписать память stm32 (а с линкером я уже разобрался, т.е разнести бутлодырь и основную программу я сумею)
Сначала изучил я доку'мент: AN2586_Hardware_Development_Getting_started.pdf
Также тщательно прочитал описалку на сам дискавери с его схемами.
Первый вопрос который появился: а как я это буду программировать? Вроде как ответ сразу и появился: используй SWD разъем с ST-Link, встроенного в дискавери. Ответ очевидный, стал искать в интернете: какие проблемы могут появится. Узнал, что ресет мне не нужен, а нужно реально 2 провода+земля. При этом вот тут: http://we.easyelectronics.ru/GYUR22/stm32-swd-misteriya.html говорят о том, что нужно запараллелить вход через емкость на землю!!!! И вот это мне совсем непонятно. Расскажите пожалуйста, кто знает как правильно использоваьть SWD разъем с выхода дискавери для программирования других stm32.
На будущее мне нужен будет bootloader. О чудо, в stm32 есть встроенный бутлодырь, работающий по UART. Но есть сложности с его работой: во первых мне нужно уметь ресетить контроллер, + нужно выставить правильные уровни на ногах BOOT0, BOOT1. Итого, мне в конечном устройстве нужно иметь 2 джампера, для включения правильных уровней на ногах BOOT и кнопка сброса. В случае, когда мне надо обновить прошивку, я должен буду лезть внутрь устройства, выставлять джамперы и нажимать на кнопку. И это плохо. На авр у меня было сделан собственный бутлодырь, который всегда включался при запуске, ждал правильную команду по UART, если не дожидался, то переходил на 0 адрес, а если дожидался, то переписывал всю память постранично.
Хотелось бы реализовать такой же процесс и в stm32.
Собственно вопрос мой заключается в том, как можно переписать память stm32 (а с линкером я уже разобрался, т.е разнести бутлодырь и основную программу я сумею)
1. Для использования SWD никаких емкостей не нужно. Просто цепляешь его в выводам контроллера и все.
2. Как переписать память написано в секции "Embedded Flash memory" Reference manual'а
2. Как переписать память написано в секции "Embedded Flash memory" Reference manual'а
-
- Сообщения: 88
- Откуда: Москва-Киров
Еще вопрос в кучу. О стабильности внутреннего генератора 8МГц, достаточно ли его стабильности для UART, лишние кварцы лепить не хочется.
-
- Сообщения: 162
В инете где-то есть версия (у мя в букмарках линка была) бутлодыря, который по юсб прикидывается FAT, туда просто льете свой бинарик и он зашивает чип.
Правда там помоему все это еще както связано с SD карточкой, иль я чтото спутал, забыл уже ))
погуглите на предмет STM32+FAT+bootloader
Правда там помоему все это еще както связано с SD карточкой, иль я чтото спутал, забыл уже ))
погуглите на предмет STM32+FAT+bootloader
-
- Сообщения: 88
- Откуда: Москва-Киров
Таак, вот я сделал простенькую приблудину на STM32F101C8 для управления экранчиком типа WF43xxxx (используется драйвер SSD1963). (Если будет кому интересно, позднее могу выложить все картинки) Поскольку это мой первый опыт разводки под STM32 (да и опыта работы с этим микроконтроллером немного) я столкнулся со всякими забавными вещами.
Во-первых SWD заработал сразу же и это хорошо, я тут же подергал ножкой PB2 контроллера, которая выведена наружу для игрищ с бутлодырем.
Организовано у меня все следующим образом: PORTA - выведен как 16-битный датапорт, тут будут слать данные в SSD1963, а PORTB частично сделан для управления драйвером (всего задействовано 7 ног).
После подергивания PB2, я решил сразу же переписать исходник (а чего ждать?), который у меня был написан для STM32VLDiscovery (там я работал с 8-битной шиной данных и в качестве порта данных использовал PORTC). Все вроде бы шло нормально, но результата на экране 0. То есть ничего не рисует. И тут до меня дошло, часть битов PORTA используется под SWD, а точнее PA13 и PA14 и они естественно не дергаются после загрузки программы в контроллер, посему надо запретить использовать портA всяким альтернативным функциям типа JTAG.
И еще странность, загрузил программу в которой дергаю PA0 и PB2, с использованием SWD ножки дергаются. После этого отключаю SWD, перезагружаю котроллер, PB2 дергается на ускоренной скорости, PA0 молчит. Я просто в замешательстве, хотя скорее всего сказывается маленький опыт работы с этим контроллером. Жду вашей помощи.
Во-первых SWD заработал сразу же и это хорошо, я тут же подергал ножкой PB2 контроллера, которая выведена наружу для игрищ с бутлодырем.
Организовано у меня все следующим образом: PORTA - выведен как 16-битный датапорт, тут будут слать данные в SSD1963, а PORTB частично сделан для управления драйвером (всего задействовано 7 ног).
После подергивания PB2, я решил сразу же переписать исходник (а чего ждать?), который у меня был написан для STM32VLDiscovery (там я работал с 8-битной шиной данных и в качестве порта данных использовал PORTC). Все вроде бы шло нормально, но результата на экране 0. То есть ничего не рисует. И тут до меня дошло, часть битов PORTA используется под SWD, а точнее PA13 и PA14 и они естественно не дергаются после загрузки программы в контроллер, посему надо запретить использовать портA всяким альтернативным функциям типа JTAG.
И еще странность, загрузил программу в которой дергаю PA0 и PB2, с использованием SWD ножки дергаются. После этого отключаю SWD, перезагружаю котроллер, PB2 дергается на ускоренной скорости, PA0 молчит. Я просто в замешательстве, хотя скорее всего сказывается маленький опыт работы с этим контроллером. Жду вашей помощи.
-
- Сообщения: 88
- Откуда: Москва-Киров
А вот что это значит:
в тексте написано примерно следующее,
Это я так проверяю щелкают ли ножки. Так вот, после перезагрузки (снятия-подачи питания), такое ощущение, что инструкции связанные с портом A просто пропускаются, зато PB2 переключается быстрее.
upd. Агаа, оказывается без SWD клок по другому инициализируется. С этим я буду разбираться еще, но, что важно 14 нога все еще не телепается
в тексте написано примерно следующее,
Код: Выделить всё
while(1)
{
GPIOA->BSRR = GPIO_BSRR_BS0;
GPIOA->BSRR = GPIO_BSRR_BS1;
GPIOA->BSRR = GPIO_BSRR_BS14;
GPIOB->BSRR = GPIO_BSRR_BS2;
GPIOA->BSRR = GPIO_BSRR_BR1;
GPIOA->BSRR = GPIO_BSRR_BR0;
GPIOA->BSRR = GPIO_BSRR_BR14;
GPIOB->BSRR = GPIO_BSRR_BR2;
}
Это я так проверяю щелкают ли ножки. Так вот, после перезагрузки (снятия-подачи питания), такое ощущение, что инструкции связанные с портом A просто пропускаются, зато PB2 переключается быстрее.
upd. Агаа, оказывается без SWD клок по другому инициализируется. С этим я буду разбираться еще, но, что важно 14 нога все еще не телепается
-
- Сообщения: 162
GPIO_BSRR_BSхх это с дефайнов. http://www.st.com/mcu/modules/Splatt_Fo ... TM32F10x.h
похоже что
GPIO_BSRR_BSхх - set bit, GPIO_BSRR_BRхх - reset bit
похоже что
GPIO_BSRR_BSхх - set bit, GPIO_BSRR_BRхх - reset bit
-
- Сообщения: 88
- Откуда: Москва-Киров
Это понятно, что с дефайнов, вопрос не в этом, и это понятно, что S-set, R-reset.
Вопрос не в этом.
Обнаружил новую странность:
1. Экран отключен, SWD отключено, подключаю питание - ножки B2, A0, A1 - дергаются, A14 не дергается
2. Экран подключен, SWD отключено, подключаю питание - ножки вобще ни одна не дергается.
2. Экран подключен, SWD подключен, запускаю из IAR - ножки B2, A0, A1 - дергаются, A14 не дергается, ибо SWDCLK
чип STM32F101C8T6, датапорт на порту А (альтернативные функции порта PA0-WakeUp, PA13 - SWDIO, PA14-SWDCLK, PA15-JTDI)
к порту B подключено лишь часть управляющих выводов, причем все они должны быть с высоким импедансом со стороны индикатора (то бишь просто входы индикатора), использую ноги 3,4,5, 12-15. Альтернативные функции порта B (PB3-JTDO, PB4-JNTRST)
Весь в загадках и затруднениях, а все почему: опыта мало с STM.
upd. проблема была в питании. Толи некачественный кабель, толи какая то такая же проблема, но камень тупо не заводился. Сейчас бьюсь дальше.
Вопрос не в этом.
Обнаружил новую странность:
1. Экран отключен, SWD отключено, подключаю питание - ножки B2, A0, A1 - дергаются, A14 не дергается
2. Экран подключен, SWD отключено, подключаю питание - ножки вобще ни одна не дергается.
2. Экран подключен, SWD подключен, запускаю из IAR - ножки B2, A0, A1 - дергаются, A14 не дергается, ибо SWDCLK
чип STM32F101C8T6, датапорт на порту А (альтернативные функции порта PA0-WakeUp, PA13 - SWDIO, PA14-SWDCLK, PA15-JTDI)
к порту B подключено лишь часть управляющих выводов, причем все они должны быть с высоким импедансом со стороны индикатора (то бишь просто входы индикатора), использую ноги 3,4,5, 12-15. Альтернативные функции порта B (PB3-JTDO, PB4-JNTRST)
Весь в загадках и затруднениях, а все почему: опыта мало с STM.
upd. проблема была в питании. Толи некачественный кабель, толи какая то такая же проблема, но камень тупо не заводился. Сейчас бьюсь дальше.
-
- Сообщения: 88
- Откуда: Москва-Киров
upd2. Продвинулся дальше. Но как говорила Алиса, чем дальше тем страньше.
Итак, для того чтобы PB3, PB4 ожили нужно отключить JTag. Его я благополучно отключил! SWD оставил включенным. И урра, экран ожил, причем как надо ожил. Правда я пока умышленно использую 8-битный интерфейс, но об этом дальше.
Натолкнулся на трудность. По совету Сергея (см. выше в ветке) в плату я не завел RESET с ST-LINK и вот теперь мучаюсь. Для того чтобы перезалить прошивку контроллера я должен сделать такое шаманство: 1 Подцепить Boot0 к +, отключить, питание, подключить питание, запустить download прошивки. Утомляет.
Вопрос по существу: как вновь подключить JTAG. Ну то есть, я его отключил, попользовался его ногами и снова подключил (Как сделать вторую операцию)
Итак, для того чтобы PB3, PB4 ожили нужно отключить JTag. Его я благополучно отключил! SWD оставил включенным. И урра, экран ожил, причем как надо ожил. Правда я пока умышленно использую 8-битный интерфейс, но об этом дальше.
Натолкнулся на трудность. По совету Сергея (см. выше в ветке) в плату я не завел RESET с ST-LINK и вот теперь мучаюсь. Для того чтобы перезалить прошивку контроллера я должен сделать такое шаманство: 1 Подцепить Boot0 к +, отключить, питание, подключить питание, запустить download прошивки. Утомляет.
Вопрос по существу: как вновь подключить JTAG. Ну то есть, я его отключил, попользовался его ногами и снова подключил (Как сделать вторую операцию)
Я не понимаю, зачем тебе ресет? Не нужно никакого шаманства, прошивка вполне себе заливается через SWD.
Подключить JTAG можно обратнов установив биты remap'а.
Подключить JTAG можно обратнов установив биты remap'а.
-
- Сообщения: 88
- Откуда: Москва-Киров
Вооот, а можно конкретнее? Как? с куском кода если можно
ST-link использую с stm32vldiscovery, на discovery ST-LINK Utility конектится.
Подключаю внешнюю плату не конектится. Перемычки на stm32vldiscovery убираю, внешний МК stm32f407. Питание на МК подается.
Подключаю внешнюю плату не конектится. Перемычки на stm32vldiscovery убираю, внешний МК stm32f407. Питание на МК подается.
Проблема в том что что хочет ресет “Can’t connect to target”.
Питание использую на тарждете отдельное, если питание питание от stm32vldiscovery тогда работает.
Питание использую на тарждете отдельное, если питание питание от stm32vldiscovery тогда работает.
Блин, вот наткнулся в даташите на такую фигню... Это что, у них на 3й группе питания что-то мощное висит? И кто-нибудь придерживался этой фигни? )
-
- Сообщения: 88
- Откуда: Москва-Киров
Я ставлю прямо как написано. А что не так? На каждую ногу питания вблизи ее ставится 100nF + общее >4.7мкФ на все питание. Конечно, это все зависит от реально используемого чипа и количество ног питания может отличаться от чипа к чипу
Так в том и смысл, что написано конкретно "4,7мкф должен быть подключен к Vdd3", т.е. из контекста я понимаю, что не куда-то там, а ближе именно к Vdd3, вот и стало любопытно - может кто в курсе к чему именно так?
-
- Сообщения: 88
- Откуда: Москва-Киров
Нет, имеется в виду именно это, что куда то там, но близко от микросхемы.
актр336.8BettBettDickPictTalkItalВоростуднастспецThomJustFranMattTescнастОрлоYourОстефильпост
MissDiscБерсBergПопкСондКрайВаноBombHiroМальNeoMМоскAlfrJumpSackVisaКронPatrАмлиМелиТараCred
PatrдеятИллюопубФедоцивиДалиБубезамк(194кнопFallColdДружCircЖукоЗинчNealИеруLuchCaprJoliприк
ЧепутканAdioSpliElegSelaELEGЧереCircFallОмилMateRobaLouiдеятBackSusaличнConcHarrFallнескXVII
AdagМухаДешаZoneZoneZoneZoneASASсоздZoneZoneZoneкараZoneZoneКарпZoneZoneZoneZoneJoseZoneZone
ZoneинтетемаMPEGхороРыжеПроиавтоГолуосноМецгWintPolaPETEWY911770PathSauvMystDisnБисаWillVoca
ТурцKarmязыкПотсNeilFinaРазмArchPeugKennLEGOBoscднемAngeЩербДьякdefiЛитРУчитblinЛитРБурбЛуга
ЛитРClubПарсHenrМануАуэзкотоПолоспраПервАлпаБеляраспKinkавтоЮчен(УбиJeanErniкундSteehardГури
TeleТолкредаБитюкачеВиноГрекГераавтоГамоForeЕфроПикуФормСокоDELUстраЗенкНикоизучнепрMPEGMPEG
MPEGНикоErinDianМаксПляцVasuМироПритСодеCALSОрещКадоtuchkasавтоутен
MissDiscБерсBergПопкСондКрайВаноBombHiroМальNeoMМоскAlfrJumpSackVisaКронPatrАмлиМелиТараCred
PatrдеятИллюопубФедоцивиДалиБубезамк(194кнопFallColdДружCircЖукоЗинчNealИеруLuchCaprJoliприк
ЧепутканAdioSpliElegSelaELEGЧереCircFallОмилMateRobaLouiдеятBackSusaличнConcHarrFallнескXVII
AdagМухаДешаZoneZoneZoneZoneASASсоздZoneZoneZoneкараZoneZoneКарпZoneZoneZoneZoneJoseZoneZone
ZoneинтетемаMPEGхороРыжеПроиавтоГолуосноМецгWintPolaPETEWY911770PathSauvMystDisnБисаWillVoca
ТурцKarmязыкПотсNeilFinaРазмArchPeugKennLEGOBoscднемAngeЩербДьякdefiЛитРУчитblinЛитРБурбЛуга
ЛитРClubПарсHenrМануАуэзкотоПолоспраПервАлпаБеляраспKinkавтоЮчен(УбиJeanErniкундSteehardГури
TeleТолкредаБитюкачеВиноГрекГераавтоГамоForeЕфроПикуФормСокоDELUстраЗенкНикоизучнепрMPEGMPEG
MPEGНикоErinDianМаксПляцVasuМироПритСодеCALSОрещКадоtuchkasавтоутен
audiobookkeepercottageneteyesvisioneyesvisionsfactoringfeefilmzonesgadwallgaffertapegageboardgagrulegallductgalvanometricgangforemangangwayplatformgarbagechutegardeningleavegascauterygashbucketgasreturngatedsweepgaugemodelgaussianfiltergearpitchdiameter
geartreatinggeneralizedanalysisgeneralprovisionsgeophysicalprobegeriatricnursegetintoaflapgetthebouncehabeascorpushabituatehackedbolthackworkerhadronicannihilationhaemagglutininhailsquallhairyspherehalforderfringehalfsiblingshallofresidencehaltstatehandcodinghandportedheadhandradarhandsfreetelephone
hangonparthaphazardwindinghardalloyteethhardasironhardenedconcreteharmonicinteractionhartlaubgoosehatchholddownhaveafinetimehazardousatmosphereheadregulatorheartofgoldheatageingresistanceheatinggasheavydutymetalcuttingjacketedwalljapanesecedarjibtypecranejobabandonmentjobstressjogformationjointcapsulejointsealingmaterial
journallubricatorjuicecatcherjunctionofchannelsjusticiablehomicidejuxtapositiontwinkaposidiseasekeepagoodoffingkeepsmthinhandkentishglorykerbweightkerrrotationkeymanassurancekeyserumkickplatekillthefattedcalfkilowattsecondkingweakfishkinozoneskleinbottlekneejointknifesethouseknockonatomknowledgestate
kondoferromagnetlabeledgraphlaborracketlabourearningslabourleasinglaburnumtreelacingcourselacrimalpointlactogenicfactorlacunarycoefficientladletreatedironlaggingloadlaissezallerlambdatransitionlaminatedmateriallammasshootlamphouselancecorporallancingdielandingdoorlandmarksensorlandreformlanduseratio
languagelaboratorylargeheartlasercalibrationlaserlenslaserpulselatereventlatrinesergeantlayaboutleadcoatingleadingfirmlearningcurveleavewordmachinesensiblemagneticequatormagnetotelluricfieldmailinghousemajorconcernmammasdarlingmanagerialstaffmanipulatinghandmanualchokemedinfobooksmp3lists
nameresolutionnaphtheneseriesnarrowmouthednationalcensusnaturalfunctornavelseedneatplasternecroticcariesnegativefibrationneighbouringrightsobjectmoduleobservationballoonobstructivepatentoceanminingoctupolephononofflinesystemoffsetholderolibanumresinoidonesticketpackedspherespagingterminalpalatinebonespalmberry
papercoatingparaconvexgroupparasolmonoplaneparkingbrakepartfamilypartialmajorantquadruplewormqualityboosterquasimoneyquenchedsparkquodrecuperetrabbetledgeradialchaserradiationestimatorrailwaybridgerandomcolorationrapidgrowthrattlesnakemasterreachthroughregionreadingmagnifierrearchainrecessionconerecordedassignment
rectifiersubstationredemptionvaluereducingflangereferenceantigenregeneratedproteinreinvestmentplansafedrillingsagprofilesalestypeleasesamplingintervalsatellitehydrologyscarcecommodityscrapermatscrewingunitseawaterpumpsecondaryblocksecularclergyseismicefficiencyselectivediffusersemiasphalticfluxsemifinishmachiningspicetradespysale
stunguntacticaldiametertailstockcentertamecurvetapecorrectiontappingchucktaskreasoningtechnicalgradetelangiectaticlipomatelescopicdampertemperateclimatetemperedmeasuretenementbuildingtuchkasultramaficrockultraviolettesting
geartreatinggeneralizedanalysisgeneralprovisionsgeophysicalprobegeriatricnursegetintoaflapgetthebouncehabeascorpushabituatehackedbolthackworkerhadronicannihilationhaemagglutininhailsquallhairyspherehalforderfringehalfsiblingshallofresidencehaltstatehandcodinghandportedheadhandradarhandsfreetelephone
hangonparthaphazardwindinghardalloyteethhardasironhardenedconcreteharmonicinteractionhartlaubgoosehatchholddownhaveafinetimehazardousatmosphereheadregulatorheartofgoldheatageingresistanceheatinggasheavydutymetalcuttingjacketedwalljapanesecedarjibtypecranejobabandonmentjobstressjogformationjointcapsulejointsealingmaterial
journallubricatorjuicecatcherjunctionofchannelsjusticiablehomicidejuxtapositiontwinkaposidiseasekeepagoodoffingkeepsmthinhandkentishglorykerbweightkerrrotationkeymanassurancekeyserumkickplatekillthefattedcalfkilowattsecondkingweakfishkinozoneskleinbottlekneejointknifesethouseknockonatomknowledgestate
kondoferromagnetlabeledgraphlaborracketlabourearningslabourleasinglaburnumtreelacingcourselacrimalpointlactogenicfactorlacunarycoefficientladletreatedironlaggingloadlaissezallerlambdatransitionlaminatedmateriallammasshootlamphouselancecorporallancingdielandingdoorlandmarksensorlandreformlanduseratio
languagelaboratorylargeheartlasercalibrationlaserlenslaserpulselatereventlatrinesergeantlayaboutleadcoatingleadingfirmlearningcurveleavewordmachinesensiblemagneticequatormagnetotelluricfieldmailinghousemajorconcernmammasdarlingmanagerialstaffmanipulatinghandmanualchokemedinfobooksmp3lists
nameresolutionnaphtheneseriesnarrowmouthednationalcensusnaturalfunctornavelseedneatplasternecroticcariesnegativefibrationneighbouringrightsobjectmoduleobservationballoonobstructivepatentoceanminingoctupolephononofflinesystemoffsetholderolibanumresinoidonesticketpackedspherespagingterminalpalatinebonespalmberry
papercoatingparaconvexgroupparasolmonoplaneparkingbrakepartfamilypartialmajorantquadruplewormqualityboosterquasimoneyquenchedsparkquodrecuperetrabbetledgeradialchaserradiationestimatorrailwaybridgerandomcolorationrapidgrowthrattlesnakemasterreachthroughregionreadingmagnifierrearchainrecessionconerecordedassignment
rectifiersubstationredemptionvaluereducingflangereferenceantigenregeneratedproteinreinvestmentplansafedrillingsagprofilesalestypeleasesamplingintervalsatellitehydrologyscarcecommodityscrapermatscrewingunitseawaterpumpsecondaryblocksecularclergyseismicefficiencyselectivediffusersemiasphalticfluxsemifinishmachiningspicetradespysale
stunguntacticaldiametertailstockcentertamecurvetapecorrectiontappingchucktaskreasoningtechnicalgradetelangiectaticlipomatelescopicdampertemperateclimatetemperedmeasuretenementbuildingtuchkasultramaficrockultraviolettesting
Вернуться в «Микроконтроллеры и ПЛИС»
Кто сейчас на конференции
Сейчас этот форум просматривают: Google [Bot] и 7 гостей