Пользователь
0,0
рейтинг
3 января 2015 в 09:01

Как надо дружиться с STM32 tutorial

Не, не, не, все не так!

Давайте дружиться с STM32 правильно!

Самая главная ошибка, сделанная автором — это неправильно выбранный инструментарий. Начинать дружить с контроллерами STM32 надо, безусловно, с плат STM32Fx-Discovery. На них уже есть программатор-отладчик, весь необходимый обвес, ноги для подключения периферии и плюшки в виде светодиодов, экранов, датчиков и ЦАП-ов в зависимости от платы. Цена дискаверей начинается от 10 долларов. Это копейки за мгновенный и безпроблемный старт. Т.е. вам вообще ничего больше из железа покупать не надо (mini-USB шнур, полагаю, дома найдется), чтобы помигать светодиодом, изучить системы пространственной ориентации, поработать с выводом звука и графики и сделать USB-устройство.

Дополнительный бонус — программатором с дискавери можно программировать внешние МК, разъем для этого есть на плате.

Но, допустим, не лежит у вас душа к дискавери. Ладно, я понимаю. Смотрим тогда, на чем же построены отладчики ST-Link V1/V2. А построены они на микроконтроллере STM32F103C8T6 (@eta4ever, да, да, он самый). Соответственно, если у тебя есть плата на этом МК, то ее можно превратить в программатор ST-Link V2. Для заливки прошивки можно воспользоваться либо инструкцией от STM (AN2557 STM32F10x in-application programming using the USART) или той же дискавери, если есть под рукой и утилитой STM32 ST-LINK utility. Или купите отладчик. Стоит он 25 долларов, но вещь полезная, если собираетесь хоть сколько серьезно этим заниматься.

Кстати, еще насчет платы. Китайцы продают много готовых плат, вроде вот таких. Платка такая за 6 долларов — совсем неплохо. Лучше только такая платка за 4 доллара. Итак, заказываем такие платки, после получения превращаем одну в программатор, а с остальными развлекаемся. Ну не сказка ли?

Итак, как же сделать программатор? Пара резисторов, немножко провода и пятнадцать минут почитать вот эту тему. Что с чем соединять:
— соединить РА5 и РВ13 это линия SWCLK
— между РВ14 и РВ12 резистор 220 Ом
— РВ14 линия SWDIO
— РА0 подключить к делителю из двух резюков 4,7кОм между GND и +3,3V

Прошиваем вот этой прошивкой.

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

Пару слов про IDE. CooCox неплох, удобный и все такое, но у них очень туго с ресурсами и они не успевают поддерживать новые микроконтроллеры, да еще к тому же у них приоритет, похоже, LPC. Я так нарвался с поддержкой МК на плате STM32F0-Discovery. Ждал обещанной поддержки несколько месяцев, но плюнул и ушел на IAR. Иаровская среда называется EWARM (Embedded Workbench for ARM), бесплатной версии хватает за глаза (ограничение кода 8 кб, я ни разу не утыкался в него), скачивается отсюда. Еще КуКокс грешит тем, что они ломают что-то периодически в новых релизах и стабильность среды невысокая — может просто закрыть все окна без сохранения изменений. Кто в общаге не жил, где свет вырубался раз в час и не имеет привычки нажимать Ctrl+S каждые 30 секунд, может попасть очень сильно. IAR тоже не без грехов, в первую очередь бесит уродская разметка кода и отсутствие выделения активного/неактивного кода в зависимости от директив препроцессора, но жить с этим можно. Важно, что просто так взять и построить проект под STM32 не выйдет (извините, не буду вставлять картинку с Боромиром). Если захотите, напишу подробную степ-бай-степ инструкцию (с картинками!) про то, как создать свой собственный проект с нуля.

P.S. А все-таки, дикавери! Потому что на чем-то еще взять и вот так с нуля сделать фиг получится:

Андрей @imwode
карма
55,2
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (79)

  • +2
    Важно, что просто так взять и построить проект под STM32 не выйдет

    Легко и очень просто. STM32Cube и через 5 минут готовый каркас со всей инициализацией готов.
    • +1
      О, я отстал от жизни. Когда я последний раз его смотрел, он назывался по-другому и генерации кода не имел.
      • +3
        (смущенно) Сам недавно переоткрыл его :) Пока у него только один большой и жирный минус — полностью завязан на HAL, назвать который «свободным от глюков» и «документированным» у меня ничего не поворачивается. :)
        • 0
          Ну вот напишу, как собрать проект с нуля и темплейты сделать в IAR-е
          • +3
            У меня уже есть аналогичное для Keil & STMCube, но правила хабра не позволяют сюда запостить. Думаю, с IARом будет разница только в одном дропселекте :)

            Но в любом случае, давайте, ибо мало, катастрофически мало материалов по stm32
    • 0
      Печально, что оный STM32CubeMX есть только под Win (хотя и написан на яве). И, судя по всему, они таки выпилили StdPeriphLib и заменили её на hal в составе STM32CubeFx.
      • 0
        ну под wine он пускался у меня отлично, а под макосью у меня виртуалка есть.

        А про STD — они ее забросили окончательно и теперь все на HAL тащат. И в этом я их поддерживаю, ибо STD — это реально за гранью добра и зла :)
        • 0
          ну под wine он пускался у меня отлично, а под макосью у меня виртуалка есть
          Оно сейчас требует jre 7u45+, а оно под wine 1.7 не заводится (ни x86, ни amd64 версия, во всех трёх комбинациях winearch). А виртуалки я периодически выношу, т. к. эта порнография места жрёт немерено.

          А про STD — они ее забросили окончательно и теперь все на HAL тащат. И в этом я их поддерживаю, ибо STD — это реально за гранью добра и зла :)
          Посмотрел в код hal по тем модулям, с которыми уже имел дело. И не вижу принципиальных отличий от spl. Чуть более причёсано и документации побольше. Из приятных бонусов — сделали, похоже, нормальную поддержку dma для периферии. Что вы подразумевали под «за гранью добра и зла»?
          • 0
            Для меня за «гранью добра и зла» (когда я очень сильно матерился и соскочил на opencmp3) было то, что код общения с периферией был для каждого контроллера свой (отличался в нюансах типа смещений регистров, но отличался). А у меня как раз был период, когда мне надо было «раскатить» один код на несколько моделей (да, изврат, но надо было)…

            А сейчас (скажу честно, пока большого опыта с HAL нет) — мои околотестовые задачи таскаются с контроллера на контроллер «как есть» — единственное что меняется — это частоты и делители. Очень радует
            • 0
              Я вот на микрочиповских примерах понял суть драйверов — они под несколько мк пишут драйвер (и ты под свой можешь написать), а код при этом тот де остается. В СТМ-ных примерах есть зачатки этого, но мне сильно меньше это нравится — все на дефайнах…
            • 0
              Надо будет подробнее посмотреть на libopencm3. Несмотря на то, что написано по поддержке железа поддержка stm32 неплохая. Количество открытых тикетов, конечно, большое, но для бурно развивающейся библиотеки это нормально. Ещё радует, что код в libopencm3 куда качественнее, чем в StdPeriphLib от st.

              С контроллера на контроллер всё хорошо таскается в рамках одного семейства. А при скачке с F1 на F4, например, меняются как само ядро (с cm3 на cm4/cm4f, что сказывается на доступных интристиках, появлении hardfp, dsp-инструкций), так и периферия с errata ко всему этому барахлу. Например, на F4 у GPIO есть отдельные биты для управления подтяжкой. Доступная периферия разная, DMA потоки и каналы разные и т. п. Если нужна портируемость между семействами, то, в любом случае, надо изолировать платформо-зависимый код и делать условную сборку (где-то на дефайнах, где-то по разным файлам раскидывать).

              В любом мало-мальски нетривиальном приложении выделится свой hal под данную задачу. В качестве примера могу привести свой код с гитхаба: github.com/grossws/stm32-lcd/blob/master/lcd.c. Низкоуровневые функции изолированы в отдельном куске, что облегчает портирование при необходимости. Даже для хобби-проектов это может быть полезно.

              Посмотрел на stm32cubef4 (новый hal). Может, они наняли новых индусов. Или стали использовать металлическую линейку, но качество кода и комментариев подросло. Всякий io код почти однообразно выглядит для блокирующих и асинхронных (через прерывания или dma) вызовов. И пляшут теперь не от железа конкретной линейки, а от функционала, что должно упростить портирование в будущем. Пока из неприятностей столкнулся с тем, что dma выставляет fifo error даже в случае, если fifo был отключен. ST предлагает его игнорировать, но не делает это в cube.

              куски кода
              int main(void) {
                HAL_Init();
                uart_init();
                while(1) {
                  uart_loop();
                }
                return 1; // never
              }
              
              // from uart.c
              void uart_init(void) {
                uart.Instance = USARTx;
              
                uart.Init.BaudRate = 57600;
                uart.Init.WordLength = UART_WORDLENGTH_8B;
                uart.Init.Parity = UART_PARITY_NONE;
                uart.Init.StopBits = UART_STOPBITS_1;
                uart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
                uart.Init.Mode = UART_MODE_TX_RX;
              
                if(HAL_UART_Init(&uart) != HAL_OK) {
                  Error_Handler();
                }
              }
              
              void uart_loop(void) {
              
                if(HAL_UART_Receive(&uart, rx_buf + rx_buf_idx, 1, UART_TIMEOUT) != HAL_OK) {
                  return;
                }
                rx_buf_idx++;
              
                LEDg_ON();
                HAL_Delay(10);
                LEDg_OFF();
              
                // buffer full
                if(rx_buf_idx == BUFSIZE) {
                  _uart_flush();
                }
              
                if(rx_buf[rx_buf_idx - 1] == '\r' || rx_buf[rx_buf_idx - 1] == '\n') {
                  _uart_flush();
                }
              }
              
              static void _uart_flush(void) {
                // wait for tx_buf
                while(!_uart_tx_ready);
              
                memcpy(tx_buf, rx_buf, rx_buf_idx);
                tx_buf_idx = rx_buf_idx;
                rx_buf_idx = 0;
              
                LEDo_ON();
                if(HAL_UART_Transmit_DMA(&uart, tx_buf, tx_buf_idx) != HAL_OK) {
                  Error_Handler();
                }
              }
              
              // uart dma/it tx complete callback 
              void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
                _uart_tx_ready = 1;
                LEDo_OFF();
              }
              
              // uart dma/it error callback
              void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) {
                LEDr_ON();
                // FIXME: irq prio
                HAL_Delay(50);
                LEDr_OFF();
                _uart_tx_ready = 1;
              }
              
              DMA_HandleTypeDef uart_tx_dma;
              
              // HAL_UART_Init callback to init required periph
              void HAL_UART_MspInit(UART_HandleTypeDef *huart) {
                USARTx_RX_CLK_EN();
                USARTx_TX_CLK_EN();
                USARTx_CLK_EN();
                USARTx_DMA_CLK_EN();
              
                GPIO_InitTypeDef gpio;
              
                gpio.Pin = USARTx_TX_PIN;
                gpio.Mode = GPIO_MODE_AF_PP;
                gpio.Speed = GPIO_SPEED_FAST;
                gpio.Pull = GPIO_NOPULL;
                gpio.Alternate = USARTx_TX_AF;
                HAL_GPIO_Init(USARTx_TX_PORT, &gpio);
              
                gpio.Pin = USARTx_RX_PIN;
                gpio.Alternate = USARTx_RX_AF;
                HAL_GPIO_Init(USARTx_RX_PORT, &gpio);
              
                // not used currently
              //  HAL_NVIC_SetPriority(USARTx_IRQn, 0, 1);
              //  HAL_NVIC_EnableIRQ(USARTx_IRQn);
              
                uart_tx_dma.Instance = USARTx_DMA_TX_STREAM;
                uart_tx_dma.Init.Channel = USARTx_DMA_TX_CHANNEL;
                uart_tx_dma.Init.Direction = DMA_MEMORY_TO_PERIPH;
                uart_tx_dma.Init.Mode = DMA_NORMAL;
                uart_tx_dma.Init.PeriphInc = DMA_PINC_DISABLE;
                uart_tx_dma.Init.MemInc = DMA_MINC_ENABLE;
                uart_tx_dma.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
                uart_tx_dma.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
                uart_tx_dma.Init.Priority = DMA_PRIORITY_LOW;
                uart_tx_dma.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
                uart_tx_dma.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
                uart_tx_dma.Init.MemBurst = DMA_MBURST_INC4;
                uart_tx_dma.Init.PeriphBurst = DMA_PBURST_INC4;
              
                HAL_DMA_Init(&uart_tx_dma);
                __HAL_LINKDMA(huart,hdmatx,uart_tx_dma);
              
                HAL_NVIC_SetPriority(USARTx_DMA_TX_IRQn, 0, 1);
                HAL_NVIC_EnableIRQ(USARTx_DMA_TX_IRQn);
              
                // indication leds rcc en
                LEDg_CLK_EN();
                LEDo_CLK_EN();
              
                // rx indication led
                gpio.Pin = LEDg_PIN;
                gpio.Mode = GPIO_MODE_OUTPUT_PP;
                gpio.Pull = GPIO_NOPULL;
                HAL_GPIO_Init(LEDg_PORT, &gpio);
              
                // tx indication led
                gpio.Pin = LEDo_PIN;
                HAL_GPIO_Init(LEDo_PORT, &gpio);
              }
              
              void HAL_UART_MspDeInit(UART_HandleTypeDef *huart) {
                USARTx_FORCE_RESET();
                USARTx_RELEASE_RESET();
              
                HAL_GPIO_DeInit(USARTx_TX_PORT, USARTx_TX_PIN);
                HAL_GPIO_DeInit(USARTx_RX_PORT, USARTx_RX_PIN);
              
                HAL_DMA_DeInit(&uart_tx_dma);
                HAL_NVIC_DisableIRQ(USARTx_DMA_TX_IRQn);
              //  HAL_NVIC_DisableIRQ(USARTx_IRQn);
              
                HAL_GPIO_DeInit(LEDg_PORT, LEDg_PIN);
              }
              
              
              // from it.c
              void SysTick_Handler(void) {
                  HAL_IncTick();
              }
              
              void USARTx_Handler(void) {
                HAL_UART_IRQHandler(&uart);
              }
              
              void USARTx_DMA_TX_IRQHandler(void) {
                HAL_DMA_IRQHandler(uart.hdmatx);
              }
              
              
  • +1
    Поддерживаю использование STM32 Discovery. Тоже заказывал её. Плата недорогая. Правда я заказал сразу STM32F429 с сенсорным экраном. Потом понял, что сначала нужно было взять STM32F407, т.к. под неё примеров значительно больше. У этих двух плат есть отличия.

    Добавлю, что с разворачиванием тулчейна под Linux тоже никаких проблем нет. Чтобы запустить мигающий светодиод пользовался вот этой инструкцией: www.wolinlabs.com/blog/linux.stm32.discovery.gcc.html. Всё компилируется и прошивается очень просто в 2 команды.
  • +1
    вроде вот таких. Платка такая за 6 долларов — совсем неплохо

    По ссылке:
    Цена: US $28.60

    А где по 6?
    • 0
      Там цена за партию из 5 штук.
  • +2
    Я вообще не понимаю, в чём суть проблем, из-за чего флейм. Чем плохи Discovery? Купите и пользуйтесь, очень недорого.
    • +1
      Все-таки, Discovery 20$ стоит, а минимальная Maple Mini-подобная — ровно впятеро дешевле.
      • +1
        Discovery бывают разные, и стоят по-разному.
        1000 ± 200 рублей — не очень большая цена за вход, особенно по сравнению с другими производителями отладочных плат.
        • 0
          Соглашусь. Хотя, сам начинал с AVR, где та самая «плата за вход» оказалась на уровне… буквально 300 рублей (ATMega8535 + программатор Громова на рассыпухе + бесплатный UniProf).
          У самого сейчас пара Discovery (F3 + F4 без особых наворотов) и несколько отдельных чипов.
          Надеюсь, когда доделаю проект на AVR, займусь ими.
        • 0
          Цена «за вход» ардуины — 4$. А уж за 1000 можно в догонку цветной сенсорный экран получить. Ну так, для сравнения.

          Лично я промышленно этим заниматься не планирую, поэтому желание ST продать мне отладочную плату за 1000р я не разделяю.
          • +1
            Не надо путать божий дар с яичницей. Никогда ты не купишь ардуино за $4. Скорее за 20+. А китайские клоны стоят те же $4.

            А на Дискавери такой обвес, что 1000р — это халява, радоваться надо. Тем более, что это не вина ST, что у нас нет нормальной почтовой службы. Во всем мире можно Дискавери купить за $8 самую маленькую. И уж точно не их вина в том, что сегодня $8 это не $8 летом, а в два раза дороже
            • 0
              > А на Дискавери такой обвес, что 1000р — это халява

              Это не «халява», а оверхед.
          • +1
            ОК, у каждого свои потребности.
            Я вот занимаюсь «промышленно», и уверяю вас, что 1000 рублей, это даром по сравнению с некоторыми другими платформами.
            • 0
              Не спорю. Но те платформы ещё менее интересны широким кругам.
              • +2
                Но те платформы ещё менее интересны широким кругам.

                И не предназначены для широких кругов, заметим.
  • 0
    Поддерживаю, дискавери это очень удобно! До этого писал под HY-Mini STM32, там каждый раз при прошивке приходилось одним пальцем выполнять комбинацию нажатий Boot0+Reset, получалось не всегда сразу. А на дискавери ничего делать не надо, программатор сам сбрасывает чип и заливает прошивку. К тому же есть отладчик, и его можно подцепить к тому же gdb.
  • +1
    Рискую нарваться на вопли «Сжечь еретика!», но когда мне захотелось приобщиться к ARM, я взял Arduino Due…
  • 0
    Недавно на kickstarter был интересный проект на stm32
    www.kickstarter.com/projects/gfw/espruino-pico-javascript-on-a-usb-stick
    (или же www.espruino.com/Pico)
    задействует STM32F401CD, основная фишка — в качестве языка программирования выбран javascript
    • 0
      Заказывал и юзал. В качестве платы для того, чтобы поиграться — шик. Можно что-то включать/выключать прямо в live-консоли, как в консоли браузера. Случайно сжег её, и сразу заказал новую.
      Из очевидных минусов — нужно больше RAM, чем на большинстве дешевых чипов, и интерпритатор JS отъедает и RAM и Flash. То есть программа не компилируется на компе и затем зашивается бинарик, а именно что на плате настоящий JS-интерпритатор. Ну и сама плата не из дешевых.

      Если я где не прав или заблуждаюсь, пусть меня поправят.
      • 0
        Espruino работает на куче обычных плат типа Дискавери. Так что можно обойтись дешевыми платами.
        Автор активно работает над прекомпиляцией. Чтобы код занимал меньше места и исполнялся быстрее.
        • 0
          Безусловно оно работает на Дискавери. Однако использовать Дискавери в продакшен-устройствах нельзя по соображениям лицензии(об этом тоже написано на сайте Espruino). По поводу прекомпиляции — это очень круто. Означает ли это, что можно будет зашивать готовый бинарик на любой STM32?
          • 0
            Прекомпиляция позволяет не хранить в памяти текстовое представление программы, прошить ссылки на внутренние функции и переменные, соптимизировать еще что-нибудь, но Espruino по прежнему будет в железке со всеми вытекающими ограничениями.
            Я так понял, что эта прекомпиляция существует пока в виде эксперимента в ветке репозитория. Полный план и список фич не формализованы.
          • 0
            Не нашел ограничений «по соображениям лицензии». Наоборот есть конкретный вопрос и ответ на эту тему:
            CAN I SELL BOARDS CONTAINING THE ESPRUINO SOFTWARE?

            Yes, as long as you abide by the terms of Espruino's MPLv2 licence and respect the Espruino trademark (eg. don't call your board an Espruino board unless agreed with us).
              • 0
                LICENSE
                STMicroelectronics (“ST”) grants You the right to use the enclosed Evaluation Board offering limited features only to evaluate and test ST
                products solely for Your evaluation and testing purposes in a research and development setting. The Evaluation Board shall not be, in any
                case, directly or indirectly assembled as a part in any production of Yours as it is solely developed to serve evaluation purposes and has no
                direct function and is not a finished product. If software and/or firmware is accompanied by a separate end user license agreement (“EULA”),
                then such software and/or firmware shall be governed by such EULA.

                EVALUATION BOARD STATUS
                The Evaluation Board offers limited features allowing You only to evaluate and test the ST products. The Evaluation Board is not intended for
                consumer or household use. You are not authorized to use the Evaluation Board in any production system, and it may not be offered for sale
                or lease, or sold, leased or otherwise distributed for commercial purposes. If the Evaluation Board is incorporated in an evaluation system,
                the evaluation system may be used by You solely for Your evaluation and testing purposes. Such evaluation system may not be offered for
                sale or lease or sold, leased or otherwise distributed for commercial purposes and must be accompanied by a conspicuous notice as follows:
                “This device is not, and may not be, offered for sale or lease, or sold or leased or otherwise distributed for commercial purposes”.
            • 0
              Выше ответили уже. Речь шла о том, что нельзя использовать платы Дискавери в продакшене.
              ST Nucleo and Discovery boards are sold at a very low price, for evaluation purposes only. According to the Evaluation products license agreement that comes with each board, you must not use them as part of a finished product.
              • 0
                А ну это понятно. Было бы странно использовать их в продакшн.
                Из-за фразы «написано на сайте Espruino» я понял, что Espruino нельзя использовать в коммерческих продуктах кроме их родной платы.
  • +4
    Большое спасибо за развернутый ответ про дружбу с STM!

    STM32F4Discovery у меня была, но я убоялся количества ножек и общей монструозности сей конструкции и по-тихому ее сбагрил другому желающему поиграться. Хотя, предварительно ввалил в нее Micro Python (тогда еще я был Read-only, и небольшая статейка про это дело песочницу не покинула) и малость поигрался. В целом, после поверхностного знакомства с Discovery. я решил начинать с чего-то попроще.

    А вот соорудить ST-Link — это мне в голову не приходило, наверное, прямо сегодня и займусь.

    P.S. Платы, которые я заказывал. По 4$.
    • 0
      F4Discovery — хороша! С ней я от мигания диодами до распарсивания команд по WiFi и плавной анимации светодиодов на FreeRTOS практически с нуля дошел за 2-3 мес. Работаю в программировании на WPF под десктоп. Изучал вечерами и по некоторым выходным. Все доступно и удобно.
    • 0
      А вы, случайно, не в курсе — на STM32F0DISCOVERY возможно ли залить Micro Python так, чтобы он на ней работал?
      • 0
        Заливал на STM32F4DISCOVERY, работало (кроме акселерометра). За F0 ничего сказать не могу.
  • –1
    Visual Studio + плагин VisualGDB (платный, но есть 30 дней триала и при желании довольно легко ломается). Все toolchain сам подтягивает и настраивает. Компилится всё на ура и сразу.
  • –1
    st-link не нужен, iar не нужен, мастдайка не нужна! Мк прекрасно шьются в линксе безо всяких извращений!
    • +5
      МК не нужны, на 155-й серии все отлично собирается.
      • –1
        Зачем 155-я серия? Делаем на голых транзисторах! Так будет эротиШнее ;)
        • +1
          На реле тогда уж. Щелкают прикольно.
          • +2
            Тёплые ламповые тиратроны же!
            • 0
              Может, просто электроны пинать ногами?
              • +4
                Камни перекладывать.
      • –8
        Ну, МК-то нужны. Не нужны идиоты, которые вообще не имея образования, суют куда попало свои ручонки!
        ПОПУляризация техники не нужна! Нужна популяризация знаний.
        В мире знаний всякое говно вроде «ардуйни», «бубунты», «яблофонов» было бы не нужно, т.к. просто не было бы клиентуры. Умный человек говно покупать не будет.
        • +4
          Давайте еще про капиталистических акул и зомбирование хомячков искусственными потребностями.
          • –2
            хомячков зомбировать не надо: они по определению уже зомбированы. их учить надо, чтобы не было вокруг этой непробиваемой тупости с мастдайками, ардуйней, гей-осями и прочей дрянью!
            • +2
              Ок. Всем выдать по красной книжечке с текстом GNU GPL, загнать в бараки и учить уму-разуму. Ничего так, утопичненько.
  • 0
    Хмм. Собрал сейчас подобие ST-Link, не работает от слова «вообще». Не определяется компом как устройство.
    • 0
      И… проблема решена. На Maple резистор между D+ и 3v3 подтягивается через транзистор, управляемо. Тут нам такое не надо, поэтому ставим резистор на 1.5 КОм и радуемся.
      • 0
        Итого, для превращения Maple Mini в ST-Link нужно четыре резистора (220 Ом, 1.5 КОм, 2 шт. по 4.7 КОм) и несколько проводков. Работает (проверил заливку прошивки и кокосовый дебаг).
  • 0
    У кого-нибудь есть опыт работы с ST Nucleo? Например developer.mbed.org/platforms/ST-Nucleo-F401RE/
    Как оно?
    • 0
      Вот, вроде бы: habrahabr.ru/post/230931/
    • 0
      Прекрасно! Я статейку уже написал.
    • 0
      ограничение кода 8 кб, я ни разу не утыкался в него

      Ничего дружище, всё ещё впереди!
      • 0
        я периодически упираюсь в объем флеша на камне :) Приходится подключать оптимизацию, чтобы как-то уместиться
    • +1
      mbed.org — совсем игрушка. Детский сад — штаны на лямках. И с документацией беда. Но вот светодиодом поморгать, не устанавливая вообще ничего на свой комп — это да, легко и непринужденно.
  • +4
    Эээ… Это, пожалуй, самое необычное, что я видел на главной странице в своей ленте:) Даёшь больше технических батлов!:)
  • +1
    Хотел бы прорекламировать проект libopencm3 www.libopencm3.org/ — библиотека для stm32. IMHO библиотека куда более лучше написана чем стандартная.

    Ну и стандартно — мограние диодиками на libopencm3 github.com/anatol/stm32f4-examples/blob/master/libopencm3/miniblink/miniblink.c
  • +5
    >>как надо дружиться с STM32.
    через datasheet.
  • +3
    Не знаю, на мой взгляд они там в ST что-то не совсем то делают в смысле продвижения этих МК. Заявлено вроде бы как замена Ардуино, но замены как-то не получается, слишком сложно пользовать. Это скорее уровень после освоения Ардуино, больше возможностей, но порог вхождения выше. Платы же отладочные, дискавери, можно сказать, копеечные, расчет явно на массовость. Тут на хабре разрекламировали эти контроллеры, а у меня соображение было, на МК примитивную систему навигации сделать, чтобы положение сенсора в пространстве грубо отслеживать, в пределах нескольких метров и показания сенсора на ПК передавать. Можно было бы это потом как-то попользовать для сканеров, например, металлоискателей, ближней локации и т.п. Сам я не программист, больше железячник, причем, больше по аналоговой технике. Тем не менее, решил попробовать. Ну вот приобрел я эту плату, сначала на кортекс M3, кое-как через кейл запрограмировал, поморгал дидами, потом взял пример (не из Cube) и сделал обмен с ПК через аудиопорт (понятно, что лучше через COM, USB и пр., но уж как смог). Даже отписался по этому поводу здесь: habrahabr.ru/post/224169/
    Дальше нужно было акселерометр/гироскоп как-то к этому приделать, данные с него обрабатывать и в ПК передавать. Отдельно акселерометр брать не стал, приобрел другую плату STM дискавери, со встроенным акселерометром, но уже на кортекс М4. Взял пример с акселерометром из Cube, попытался допилить — весь мозг сломал. Сначала оказалось что на моей плате акселерометр не того типа, что в примере. Причем, определять это пришлось экспериментально, маркировки там нет и никакой сопроводительной документации к плате также. Ну ладно, нашел даташит на нужный акселерометр, переставил цифирьки-буковки, что-то вроде заработало — но только в пределах примера, а в явном виде в примере значения ускорений мне там найти не удалось. Обмен там шел через DMA, все летало мимо процессора. Для обработки же нужно было иметь ускорения по трем осям в явном виде в дискретные моменты времени. Возился долго, потом бросил — времени нет, нужно же и по работе что-то делать. У меня приятель есть, под Ардуино программирует, я ему STM32 порекомендовал, плату предложил попользовать, думал, разберется, потом меня научит, он вроде сначала загорелся, потом почитал все эти даташиты и то что есть по этому поводу в интернете и энтузиазм пропал. Так что начинающим, на мой взгляд, вряд ли это посоветуешь.
    • 0
      Ну зря ты так
      Доки на все дискавери есть, том числе и со схемами, посмотри здесь: www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF252419
      • +2
        Дык не нужно уж совсем за идиота меня держать, все скачал, что мог с этого сайта, и схемы, и даташиты, и библиотеки, и даже рекламные листы посмотрел. С русскоязычных форумов тоже информацию брал, т.к. английский знаю плохо. В платах с акселерометром они сначала ставили акселерометр одного типа, потом стали ставить другого, схемы на сайте оказались для старого варианта и примеры в библиотеках также. Сейчас, возможно, заменили уже.
        • 0
          Я на stm32f4-discovery при экспериментах с spi тоже матерился, т. к. акселерометр на плате оказался не тот, что в примерах кода (в частности, он возвращает другой id, 0x3f, а не 0x3b). Хотя сейчас на сайте указано, что устанавливается «LIS302DL or LIS3DSH».
          • 0
            Что еще досадно, нашел несколько примеров использования акселерометра, несложные сравнительно программы, статьи на русском языке — но для 302DL. Для 3DSH их приспособить не удалось. 3DSH это вроде бы более новый акселерометр, более точный или более чувствительный. Библиотечный пример для 302DL приспособить для 3DSH удалось, частота моргания светодиодов зависела от направления и величины наклона. Как мышь плата тоже работала. Правки там были незначительные, типа этот самый id поменять и/или еще что-то, не помню точно. Библиотечный пример для использования оказался непригоден, там какой-то сложный многоуровневый код, очень запутанный. Только в рамках функциональности примера — диоды местами поменять и т.п., да и то не слишком просто.
  • 0
    И еще добавлю, по поводу качества кода примеров. Загружается стандартный набор, компилируется и линкуется, Времени это занимает много, минуты или даже десятки минут. Большая часть файлов в проекте примера не нужна, при удалении их из проекта функциональность не страдает. Еще часть просто удалить нельзя, хотя их ненужность очевидна. При их удалении линковщик выдает ошибки, на них есть ссылки в других файлах. Если закомментировать эти ссылки, проект примера нормально собирается и нормально функционирует. Т.е. никто оптимизацией примеров явно не занимался, просто втупую что-то наваяли под копирку.
  • 0
    А STM32 вроде же можно программировать через UART. Обычный USB-UART конвертер для этих целей не подойдёт?
    • +1
      У SWD немного больше возможностей, чем просто заливка бинарного файла. А так, да, можно.
      • 0
        Просто немного знаком с AVR микроконтроллерами и планирую попробовать STM32. Так что пока больше интересуют не возможности, а как можно более простой старт.
        • +1
          Простой старт — это ST Nucleo и mbed. На Nucleo отладчик ST-Link встроенный.
          Если хочется разбираться «с основ», тогда можно взять любой голый чип, и заливать прошивку по UART.

          Собственно, тут habrahabr.ru/post/247241 я прошивал STM32F103CB с помощью USB UART.
        • +2
          Самое неудобное — это то, что для прошивки по UART нужно совершить пару манипуляций, чтобы ввести МК в режим UART загрузчика. Быстро надоест. SWD можно вообще не отключать, он работает «на лету».
    • 0
      Пойдет, причем я сейчас поигрался с ESP8826, там народ делает так — нога, которую при прошивке требутся тянуть к земле/питанию подключают к DTR, а ресет МК подключаеют к RST переходника. А в прошивальном скрипте дергают DTR/RST и проц автоматом входит в режим перограммирования. Но придется, похоже, делать обертку на каком-нить питоне, плюс без отладки тяжко жить в мире МК…
      • 0
        Я тоже сейчас играюсь с ESP8266. Только на моём глубоко китайском конвертере не так то просто будет вытащить DTR/RST.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.