У Алекса есть проект (https://alexgyver.ru/colormusic/) я его допилил под свои нужды. Но мне и этого мало я решил переделать проект под
STM32F103C8T6 ARM. И вот только начал это делать и понял что всё не так и просто, как минимум не понимаю как переписать скетч под 12 битный АЦП
но уверен есть и ещё какие-то подводные камни. Пишу в arduino Ide так как основной скетч именно для ардуино.
Может кто-то что-то посоветовать и помочь с этим ?
(прикреплённый файл это мой модифицированый скетч который и хочу перенести)
42.9 KB Просмотры: 2
@The_Krunya, подводные камни будут, и дохрена. Arduino IDE хреново дружит с ARM архитектурой. А при портировании скетчей, написанных для AVR, возникает столько геммороя, что на отлов всех багов и получения более — менее рабочего кода уйдёт туева хуча времени и нервов. Проще и быстрее освоить какую-нибудь армовскую среду. Например я пользую Keil.
Реакции:
The_Krunya
Боюсь это не самое сложное, что тебя ожидает, так как функции преобразования фурье реализованы на ассемблере).
Портировать скетч врятли кто-то будет, переписать полностью — возможно.
Реакции:
The_Krunya
Можно в Arduino IDE поставить ядро для этого процессора. Залить загрузчик и программировать так же, как ардуинку.
Но под 12 АЦП просто будут данные другой длинны, скорее всего.
А по этому контроллеру ищите инфу как arduino BluePill.
@Kir, А вот тут товарищ прав. Я не смотрел сам код, но если есть ассемблерный код. Это будет сделать сложнее. Но скорость обработки данных у этого контроллера выше. Может удастся написать преобразование на С и он будет успевать?
Реакции:
The_Krunya
Спасибо ребята за ответы, значит буду переписывать скетч с нуля.
Реакции:
Эдуард Анисимов
Ну хоть один человек знает, что хочет, а не плачет что паровоз не едет.
Реакции:
The_KrunyaУ меня есть немного любви или ненависти к Arduino. Но если у меня были две серьезные претензии к оригинальному предложению, так это 8-битный процессор и отсутствие надлежащей поддержки отладки. Теперь в Arduino IDE есть много 32-битной поддержки, так что это решает первую большую проблему. Однако позаботиться о наличии настоящего отладчика немного сложнее. Недавно я решил использовать одну из дешевых плат STM32 ARM «синяя таблетка». Они доступны всего за несколько долларов из обычных китайских источников. Я купил свой примерно за 6 долларов, потому что хотел его через неделю, а не через месяц. Это еще совсем недорого. Чип имеет множество отличных функций отладки. Можем ли мы разблокировать их? Можно, при правильном подходе.
За несколько баксов вы не можете жаловаться на оборудование. Встроенный STM32F103C8T6 представляет собой процессор Cortex-M3, работающий на частоте 72 МГц. Есть 64 КБ флэш-памяти и 20 КБ ОЗУ. Есть mini micro-USB, который может выступать в качестве порта для программирования (но не на первых порах). Также есть много выводов, устойчивых к 5 В, хотя это часть с напряжением 3,3 В.
Вы можете найти гораздо больше информации на этой вики. Плата является более или менее клоном Maple Mini. На самом деле, это один из способов их использования. Вы можете использовать последовательный порт или порт ST-Link для программирования загрузчика Maple (все с открытым исходным кодом) и использовать его как Maple. То есть вы можете запрограммировать его через USB-кабель.
С моей точки зрения, я не хочу пытаться выполнять отладку через последовательный порт, и если у меня уже настроен порт ST-Link, мне не нужен загрузчик. Вы можете недорого приобрести аппаратное обеспечение, работающее как USB-устройство ST-Link, но у меня есть плата STM32VLDISCOVER. Большинство демонстрационных плат STM32 имеют встроенный программатор ST-Link, который предназначен для использования без исходного целевого оборудования. На некоторых старых платах приходилось обрезать дорожки, но на большинстве новых просто две перемычки, которые нужно удалить, когда вы хотите использовать программатор для управления другим устройством.
Обозначение «синяя таблетка» — это просто обычное прозвище, относящееся к Матрице, а не к лекарствам, которые вы видите в телевизионной рекламе. Плата имеет четыре контакта на одном краю для подключения интерфейса ST-Link. Порядок контактов не совпадает с четырьмя контактами на STM32VLDISCOVER, поэтому вы не можете просто использовать прямой четырехконтактный кабель. Вам также необходимо подать питание на плату, так как она также должна будет питать программатор. Я взял питание с платы STM32VLDISCOVER (которая получает питание от USB) и подключил его к моей макетной плате, так как это было удобно.
Программировать доску легко — я знал, что сообщество проделало большую работу, чтобы создать для нее пакет поддержки. Вам нужна последняя версия Arduino IDE (не та, которая отображается в репозиториях Ubuntu по умолчанию). Я скачал версию 1.8.1 с сайта Arduino, просто чтобы быть уверенным. Это был первый шаг моего общего плана атаки:
Последние версии Arduino IDE позволяют выбирать платформы с помощью диспетчера плат (доступного в меню «Инструменты | Плата»). Однако, если вы посмотрите, вы не увидите эту плату в списке. Вам нужно будет сообщить IDE, где можно получить сторонний пакет поддержки. Для этого вы можете перейти в пункт меню «Настройки» (в меню «Файл» для Windows и Linux; насколько я понимаю, он находится в меню Arduino на Mac). Вам понадобится этот же диалог настроек для второго шага.
Шаг 2 не является обязательным, но он облегчит выполнение шага 5. Просто установите флажок «Показывать подробный вывод во время компиляции». Что вам действительно нужно знать, так это временный каталог, который IDE использует для вашей сборки, и, как вы увидите, это самый простой способ сделать это.
Далее на экране настроек находится запись «Дополнительные URL-адреса менеджера досок». Если там уже что-то есть, нажмите маленькую кнопку, чтобы отредактировать список. Если он пуст, вы можете добавить этот URL:
https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
Теперь вы можете вернуться в Инструменты | В меню Board выберите Board Manager и найдите STM. Вы, вероятно, увидите несколько пакетов (у меня было три), но в одном для F1 будет конкретно упомянута синяя таблетка. Нажмите кнопку для установки и подождите, пока она сделает свое дело.
После установки у вас появятся новые записи в меню вашей доски. Когда вы выберете синюю таблетку, вы сможете выбрать несколько вариантов загрузки, включая тот, который нам нужен: ST-Link.
В пакете есть все необходимое для создания и загрузки программ с использованием различных методов, включая ST-Link. Однако у него нет конкретного инструмента, необходимого для отладки.
Создать инструменты достаточно просто. В репозитории GitHub есть код и несколько простых инструкций по сборке. Вам нужны libusb и CMake, но на странице все это объясняется, и как только у вас есть все части, сборка пойдет быстро. Для многих вариантов ОС есть готовые двоичные файлы, которые вы также можете использовать.
Вам также необходимо знать идентификатор USB вашей платы ST-Link и добавить его в правила udev для Linux. Если вы этого не сделаете, вам понадобится root для программирования устройства, а это не очень хорошая идея. Однако, в зависимости от того, какой интерфейс ST-Link вы используете, он может уже быть там из другого программного обеспечения или из установки Arduino. Я бы сначала попробовал тест, и если он работает только от root, вам нужно обновить udev.
Если вы сделали свою собственную сборку, я предлагаю запустить инструмент stlink-gui для выполнения теста. Вы также можете запустить st-info --descr
Если вы запускаете stlink-gui, нажмите кнопку подключения, когда ST-Link и синяя таблетка включены и подключены. Вы должны получить информацию об устройстве. Если нет, попробуйте как root. Если это работает, вам нужно обновить udev. Я создал файл /etc/udev/rules.d/45-stlink.rules.
ДЕЙСТВИЕ=="добавить" ПОДСИСТЕМУ=="usb", ATTR(idVendor)=="0483", ATTR(idproduct)=="3744", MODE="0666", GROUP="usbusers"
Вам нужно будет изменить это для идентификатора USB вашего конкретного интерфейса (мой был 0483:3744; команда lsusb может помочь ). Режим позволяет всем пользователям читать и записывать устройство. Я сделал владельца группы usbusers, но, поскольку каждый может получить доступ к устройству, это, вероятно, не является строго необходимым.
Как только вы сможете это сделать, попробуйте запустить скетч Blink из примеров IDE. Обязательно выберите «Метод загрузки: STLink» в меню «Инструменты» Arduino IDE. Если это не сработает, возможно, вам придется использовать инструменты, которые вы только что создали, вместо тех, которые поставляются с Arduino IDE. Мой работал, но для отладки требовалась специальная сборка (поскольку пакет Arduino не поставлялся с этим конкретным инструментом).
Arduino IDE довольно удобна, поэтому она не пытается устанавливать такие вещи, как платы для всех пользователей, поскольку для этого потребуется root. Загруженный вами пакет платы оказывается в вашем домашнем каталоге ~/.arduino15/packages/STM32/tools. Там есть каталог STM32Tools, а еще несколькими уровнями ниже вы найдете копии инструментов ST-Link. Если они не работают, вы можете вручную запустить инструменты, которые вы создали на предыдущем шаге, чтобы выполнить загрузку. Когда мы отлаживаем, мы все равно будем это делать.
Что действительно важно, так это то, что в каталоге STM32/tools находится еще один каталог с компилятором, который IDE использует для компиляции вашего кода. Также есть соответствующая версия GDB — отладчик GNU, которую вам придется использовать.
Если вы загрузили пример, убедитесь, что вы сохранили его в своем собственном каталоге (я ненавижу говорить альбом для рисования). Если вы этого не сделаете, IDE сделает частную копию любых внесенных вами изменений, и все станет запутанным.
Выполните сборку (значок галочки) и — при условии, что вы установили флажок на шаге 2 — вы получите много результатов от инструментов сборки. Вы можете убедиться, что используется именно тот компилятор, о котором мы упоминали выше. Вы также увидите, что ваша программа добавляется к другим вещам и помещается в каталог с именем вроде /tmp/arduino_build_XXXXXX, где XXXXXX — число. Ваш исходный код будет находиться в этом каталоге с именем, например, sketch/Blink.ino. В каталоге верхнего уровня будет исполняемый файл Blink.ino.elf. Это то, что вам нужно для отладки.
Если вам удобно редактировать файл настроек Arduino (просто убедитесь, что среда IDE не запущена в первую очередь), вы также можете принудительно создать каталог сборки, используя ключ build. path. В среде IDE есть команда «экспортировать двоичный файл» (в меню «Эскиз»), которая компилируется в папку вашего эскиза. Однако в этом .bin-файле недостаточно информации для отладчика.
Наконец-то можно отлаживать. Используйте исполняемый файл arm-none-eabi-gdb из того же каталога, что и GCC, используемый для компиляции вашей программы. Это важно. Если версии не совпадают, вы получите странные ошибки, хотя многие вещи будут работать. Укажите имя файла elf в качестве аргумента для GDB.
Если хотите, вы можете использовать флаг -tui для GDB, чтобы получить что-то вроде текстового GUI. В любом случае, у вас есть еще один шаг. Инструмент st-util, который вы создали ранее, может прослушивать интерфейс ST-Link и предоставляет сокет, который GDB может использовать для отладки.
Начните так:
st-util -p 1234
Это заставит прослушивать порт 1234. Если вы уже используете этот порт для чего-то другого, выберите другой. Просто помните, что в Linux только root может прослушивать порты ниже 1024, поэтому выберите большее число.
Как только это запустится, вы запускаете GDB со своим именем файла elf и вводите команду:
target extended-remote :1234
Или, я недавно начал использовать:
target remote :1234
Вы можете запустите две части на разных компьютерах, поэтому при необходимости используйте имя хоста (например, devbox21:1234). В большинстве случаев программы находятся в одном и том же окне, и вы можете использовать локальный хост или опустить его, как это сделал я. Разница между удаленным и расширенным удаленным режимом заключается в том, что сервер не выключается в конце сеанса расширенного удаленного доступа. Это часто работает, но я видел случаи, когда мне все равно приходилось перезапускать сервер, поэтому в последнее время я использую старый добрый удаленный доступ, чтобы заставить меня перезапускать его при каждом сеансе.
Команда «загрузить» в GDB теперь запишет вашу программу на плату. Типичный сеанс после загрузки может быть:
break main продолжать список н н n
Команда «n» переходит к следующей инструкции. Вы можете найти намного больше об использовании GDB в предыдущем посте. Вам также может быть проще посмотреть пошаговое руководство в этом видео:
Несколько предостережений. Во-первых, оптимизация может привести к тому, что ваши строки будут выполняться не по порядку или даже вернуться назад. Это также может привести к тому, что переменные не будут видны там, где они были оптимизированы. Еще одна вещь, на которую следует обратить внимание, это то, что в некоторых случаях отладчик внутренне выполняет отдельные шаги. Например, это может привести к очень медленному выполнению процедур задержки. Вы можете уменьшить или удалить задержки во время отладки или быть осторожными, когда пытаетесь выполнить один шаг, а не ставить точки останова.
Было бы здорово, если бы Arduino IDE позволяла выполнять отладку внутри себя. Однако есть способы сделать это с помощью Eclipse (и GDB) или Visual Studio (если вы используете Windows). Если вы похожи на меня и согласны с командной строкой, вы можете подумать об использовании одного из Makefiles для Arduino вместо IDE. Если вас не устраивает командная строка, вы можете попробовать GDB-оболочки с графическим интерфейсом. Если вы предпочитаете взломать прошивку ST-Link, мы тоже это видели. Если вы скучаете по printf, вы можете попробовать зонд Black Magic, который должен работать примерно так же, как интерфейс ST-Link, но также предоставляет последовательный порт для printf и других неприятностей.
Кстати, Arduino не единственный выбор для этой платы. С ними можно использовать mBed и другие средства разработки. Но это тема для будущего поста.
После получения макетной платы LPC1768 или LPC1769 Cortex-M3 пришло время приступить к работе с MCUXpresso IDE. В этом пошаговом руководстве мы рассмотрим процесс создания проектов в MCUXpresso IDE для микроконтроллеров серии Cortex-M от NXP (основана Philips) на основе CMSIS (стандарт программного интерфейса Cortex для микроконтроллеров). MCUXpresso является производным от LPCXpresso и Kinetis Design Studio IDE с комбинированной поддержкой микроконтроллеров LCP и Kinetis. IDE поставляется со встроенным компилятором arm-gcc и всеми необходимыми отладочными драйверами, такими как LPC-Link и т. д., которые помогут вам начать быструю разработку приложений для встраиваемых систем с использованием наших плат LPC17xx.
Это руководство применимо для семейств микроконтроллеров NXP Cortex-M, таких как LPC800 (например, LPC81x), LPC1100 (например, LPC111x), LPC1300 (например, LPC134x), LPC1700 (например, LPC176x), LPC4300 и т. д. После создания проектов MCUXpresso с помощью CMSIS среда IDE автоматически добавить все необходимые файлы запуска (для инициализации MCU), заголовки и исходный файл проекта (C/C++) в зависимости от настроек, которые мы выбрали при создании проекта.
Загрузите интегрированную среду разработки
Вы можете скачать и установить IDE по ссылкам, как показано ниже:
После загрузки установите из установочного файла с настройками по умолчанию. Во время установки также будут установлены драйверы отладочных зондов, которые также используются для прошивки кода. Просто нажмите Да/Далее/Принять, если будет запрошено подтверждение установки драйвера. По умолчанию среда IDE будет установлена в папку — C:\NXP\MCUXpressoIDE_<версия>\.
После установки выполните следующие действия, чтобы создать новый проект для LPC1768 или LPC1769. Мы создали два примера проекта: один для нашей платы разработки Open1768 — LPC1768 ARM Cortex M3, а другой — для нашего LPC1769 — стартовый комплект и плата разработки ARM Cortex M3. Следующая документация относится главным образом к LPC1769, но создание проекта идентично для LPC1768, и мы отметили разделы, в которых применимы различия.
Пошаговое руководство
Шаг 1: При запуске MCUXpresso сначала запрашивается путь для создания рабочей области. Рабочая область похожа на главный каталог с настройками и может содержать множество отдельных проектов, больше похожая на общую папку «Проекты». При появлении запроса введите путь, по которому вы хотите создать рабочее пространство:
Вы можете выбрать любой путь, но мы рекомендуем использовать настройки по умолчанию. Обратите внимание, что IDE позволяет создавать несколько рабочих областей и переключаться между ними. Фактически, мы рекомендуем использовать эту функцию для разделения проектов в логическом порядке, соответствующем вашим потребностям.
Шаг 2: На этом шаге мы создадим новый проект, соответствующий требованиям для LPC1768 или LPC1769. IDE запустится сразу после установки. Теперь щелкните ссылку «Новый проект…» на панели «Быстрый запуск» (вид IDE слева внизу):
Шаг 3: Мастер проекта откроется, как показано ниже. Выберите целевой MCU (1768 или LPC1769; наш пример относится к LPC1769), нажмите Next :
Примечание : Мастер покажет несколько изображений плат справа, но их внешний вид не имеет значения для настроек нашего проекта.
Шаг 4: Выберите «Проект C», нажмите Далее .
Примечание : Наши исходные примеры кода написаны на «C». Если и когда возникнет необходимость, вы всегда можете открыть новый проект с настройками «C++».
Шаг 5: Введите подходящее имя для вашего проекта, затем нажмите Далее . В этом примере мы выбрали «LCP1769Template» (используйте «LPC1768Template» для платы LPC1768) и рекомендуем следовать этому соглашению об именах. В последующих сообщениях мы скопируем код шаблона и изменим его в соответствии с выбранным приложением.
Шаг 6: На этом шаге мы устанавливаем CMSIS для LPC1768 и LPC1769. Однако, прежде чем продолжить, убедитесь, что CMSIS еще не установлен.
Если вы видите ссылку на CMSIS_CORE-LPC17xx в окне проекта IDE, как показано ниже, вам следует перейти к шагу 7 .
Чтобы установить библиотеку CMSIS, нажмите кнопку Import .
Появится новое окно «Импорт…». Нажмите «Обзор» в разделе «Архив проекта (zip)». Затем выберите необходимый zip-файл библиотеки CMSIS для вашего семейства MCU. Его можно найти в папке «ide\Examples\Legacy\NXP\LPC1000/LPC17xx» (для микроконтроллеров LPC17xx) внутри каталога установки MCUXpresso.
Выберите файл «LPC17xx_LatestCMSIS_Libraries», затем нажмите Open .
Щелкните Далее .
В диалоговом окне ниже выберите параметр CMSIS_DSPLIB_CM3 только тогда, когда вам нужна библиотека DSP (не требуется для нашего кода шаблона).
Шаг 7 : В разделе «Основная библиотека CMSIS» выберите CMSIS_CORE_LPC17xx для семейства микроконтроллеров LPC1768/1769 и нажмите 9. 0165 Следующий .
Шаг 8 : В следующем окне снова нажмите Далее .
Шаг 9 : В диалоговом окне, как показано ниже, выберите параметр «Создать каталог ‘inc’ и добавить в путь», затем нажмите Готово .
Примечание : мы будем использовать папку «inc» для добавления файлов заголовков, поддерживающих доступ к различным компонентам интерфейса на плате.
На данный момент мы создали работающий основной проект, однако без какой-либо функциональности.
В файле LPC1769Template.c, содержащем функцию main(), есть несколько разделов TODO.
Вы можете запустить компиляцию (нажмите «Build ‘LPC1769Template’ [Debug]»), и сообщений об ошибках не будет, а программа будет просто зависать в бесконечном цикле, вообще ничего не делая.
Для первого проекта я разработал код, который использует встроенные ресурсы, в данном случае встроенные светодиоды и внутренние таймеры MUC (мигающий светодиод — это встроенная версия популярного приложения «Hello World!»).
Ссылка :
Полное руководство по процессорам ARM Cortex-M3 и Cortex-M4
Это новое издание было полностью переработано и обновлено, чтобы включить обширную информацию о процессоре ARM Cortex-M4, предоставить полное актуальное руководство по процессорам Cortex-M3 и Cortex-M4, а также сделать возможным переход от различных процессорных архитектур до захватывающего мира Cortex-M3 и M4.
В этой книге представлены основы архитектуры ARM и описаны особенности процессоров, такие как набор инструкций, обработка прерываний, а также показано, как программировать и использовать доступные расширенные функции, такие как блок защиты памяти (MPU).
Главы, посвященные началу работы с инструментами IAR, Keil, gcc и CooCox CoIDE, помогут начинающим разрабатывать программные коды. Охват также включает важные области разработки программного обеспечения, такие как использование функций с низким энергопотреблением, обработка ввода/вывода информации, смешанные языковые проекты с ассемблером и C, а также другие сложные темы.