STM32 Hardware Development - Getting Started

Все о микроконтроллерах: AVR, PIC, STM8, STM32, Arduino, Altera, Xilinx, все что угодно. Этот раздел для всего что клацает байтиками.
Proletariat
Сообщения: 88
Откуда: Москва-Киров

Сообщение Proletariat » 04 апр 2012, 19:05

Поковырялся с 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 (а с линкером я уже разобрался, т.е разнести бутлодырь и основную программу я сумею)

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 04 апр 2012, 19:23

1. Для использования SWD никаких емкостей не нужно. Просто цепляешь его в выводам контроллера и все.
2. Как переписать память написано в секции "Embedded Flash memory" Reference manual'а

Proletariat
Сообщения: 88
Откуда: Москва-Киров

Сообщение Proletariat » 04 апр 2012, 20:36

Еще вопрос в кучу. О стабильности внутреннего генератора 8МГц, достаточно ли его стабильности для UART, лишние кварцы лепить не хочется.

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 04 апр 2012, 20:47

Да, для UARTа точности с головой.

uschema.com
Сообщения: 162

Сообщение uschema.com » 06 апр 2012, 18:03

В инете где-то есть версия (у мя в букмарках линка была) бутлодыря, который по юсб прикидывается FAT, туда просто льете свой бинарик и он зашивает чип.
Правда там помоему все это еще както связано с SD карточкой, иль я чтото спутал, забыл уже ))
погуглите на предмет STM32+FAT+bootloader

Proletariat
Сообщения: 88
Откуда: Москва-Киров

Сообщение Proletariat » 24 апр 2012, 13:36

Таак, вот я сделал простенькую приблудину на 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 молчит. Я просто в замешательстве, хотя скорее всего сказывается маленький опыт работы с этим контроллером. Жду вашей помощи.

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 24 апр 2012, 14:16

Что значит, на ускоренной скорости?

Proletariat
Сообщения: 88
Откуда: Москва-Киров

Сообщение Proletariat » 24 апр 2012, 15:16

А вот что это значит:
в тексте написано примерно следующее,

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

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 нога все еще не телепается

uschema.com
Сообщения: 162

Сообщение uschema.com » 24 апр 2012, 16:52

GPIO_BSRR_BSхх это с дефайнов. http://www.st.com/mcu/modules/Splatt_Fo ... TM32F10x.h
похоже что
GPIO_BSRR_BSхх - set bit, GPIO_BSRR_BRхх - reset bit

Proletariat
Сообщения: 88
Откуда: Москва-Киров

Сообщение Proletariat » 24 апр 2012, 17:17

Это понятно, что с дефайнов, вопрос не в этом, и это понятно, что 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. проблема была в питании. Толи некачественный кабель, толи какая то такая же проблема, но камень тупо не заводился. Сейчас бьюсь дальше.

Proletariat
Сообщения: 88
Откуда: Москва-Киров

Сообщение Proletariat » 24 апр 2012, 21:43

upd2. Продвинулся дальше. Но как говорила Алиса, чем дальше тем страньше.
Итак, для того чтобы PB3, PB4 ожили нужно отключить JTag. Его я благополучно отключил! SWD оставил включенным. И урра, экран ожил, причем как надо ожил. Правда я пока умышленно использую 8-битный интерфейс, но об этом дальше.
Натолкнулся на трудность. По совету Сергея (см. выше в ветке) в плату я не завел RESET с ST-LINK и вот теперь мучаюсь. Для того чтобы перезалить прошивку контроллера я должен сделать такое шаманство: 1 Подцепить Boot0 к +, отключить, питание, подключить питание, запустить download прошивки. Утомляет.

Вопрос по существу: как вновь подключить JTAG. Ну то есть, я его отключил, попользовался его ногами и снова подключил (Как сделать вторую операцию)

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 24 апр 2012, 21:55

Я не понимаю, зачем тебе ресет? Не нужно никакого шаманства, прошивка вполне себе заливается через SWD.
Подключить JTAG можно обратнов установив биты remap'а.

Proletariat
Сообщения: 88
Откуда: Москва-Киров

Сообщение Proletariat » 24 апр 2012, 22:11

Вооот, а можно конкретнее? Как? с куском кода если можно

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 24 апр 2012, 22:26

AFIO->MAPR &= ~AFIO_MAPR_SWJ_CFG;

vovanxp
Сообщения: 2

Сообщение vovanxp » 07 апр 2014, 21:47

ST-link использую с stm32vldiscovery, на discovery ST-LINK Utility конектится.

Подключаю внешнюю плату не конектится. Перемычки на stm32vldiscovery убираю, внешний МК stm32f407. Питание на МК подается.

vovanxp
Сообщения: 2

Сообщение vovanxp » 07 апр 2014, 23:31

Проблема в том что что хочет ресет “Can’t connect to target”.

Питание использую на тарждете отдельное, если питание питание от stm32vldiscovery тогда работает.

Аватара пользователя
N1X
Сообщения: 321
Откуда: Беларусь, Гомель

Сообщение N1X » 02 май 2014, 23:02

Снимок.JPG

Блин, вот наткнулся в даташите на такую фигню... Это что, у них на 3й группе питания что-то мощное висит? И кто-нибудь придерживался этой фигни? )

Proletariat
Сообщения: 88
Откуда: Москва-Киров

Сообщение Proletariat » 22 май 2014, 10:17

Я ставлю прямо как написано. А что не так? На каждую ногу питания вблизи ее ставится 100nF + общее >4.7мкФ на все питание. Конечно, это все зависит от реально используемого чипа и количество ног питания может отличаться от чипа к чипу

Аватара пользователя
N1X
Сообщения: 321
Откуда: Беларусь, Гомель

Сообщение N1X » 22 май 2014, 16:20

Так в том и смысл, что написано конкретно "4,7мкф должен быть подключен к Vdd3", т.е. из контекста я понимаю, что не куда-то там, а ближе именно к Vdd3, вот и стало любопытно - может кто в курсе к чему именно так?

Proletariat
Сообщения: 88
Откуда: Москва-Киров

Сообщение Proletariat » 26 май 2014, 07:57

Нет, имеется в виду именно это, что куда то там, но близко от микросхемы.

Вернуться в «Микроконтроллеры и ПЛИС»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей