[Решено] Discovery STM32F100RB - Проблемы с таймерами и структурой библиотеки

HDLENG
Пн 25 сентября 2017 г., 4:18 утра
Я встроенный в отставтный разработчик, который работал в промышленных управлениях и системах обороны. Я продолжил эту работу в качестве хобби, и я работаю над дизайнами для режимов цифровых коммуникаций в любительском радио.

Я разработал программное обеспечение STM32 на Eclipse IDE, и я использовал Arduino IDE для некоторой 8-битной работы Atmel. Но я новичок в STM32Duino.

Я использую плату Discovery STM32F100RB. Я успешно протестировал цепочку и плату инструментов с помощью Arduino \ arpware \ arduino_stm32-master \ stm32f1 \ libraries \ a_stm32_examples \ example \ digital \ blink \ blink.Ино.

Я попытался сделать Arduino \ arpware \ arduino_stm32-master \ stm32f1 \ librarion.Ино.
/* Timer Interrupts Example Demonstrates usage of the HardwareTimer classes by blinking the LED Created 22 April 2010, last updated 8 June 2010 By Bryan Newbold for LeafLabs This code is released with no strings attached. */ #define LED_PIN 13 #define BUTTON_PIN 38 #define LED_RATE 500000 // in microseconds; should give 0.5Hz toggles void handler_led(void); void handler_count1(void); void handler_count2(void); int toggle = 0; int count1 = 0; int count2 = 0; void setup() { Serial.begin(115200); // Ignored by Maple. But needed by boards using hardware serial via a USB to Serial adaptor // Set up the LED to blink pinMode(LED_PIN, OUTPUT); // Set up BUT for input pinMode(BUTTON_PIN, INPUT_PULLUP); // Setup LED Timer Timer2.setChannel1Mode(TIMER_OUTPUTCOMPARE); Timer2.setPeriod(LED_RATE); // in microseconds Timer2.setCompare1(1); // overflow might be small Timer2.attachCompare1Interrupt(handler_led); // Setup Counting Timers Timer3.setChannel1Mode(TIMER_OUTPUTCOMPARE); Timer4.setChannel1Mode(TIMER_OUTPUTCOMPARE); Timer3.pause(); Timer4.pause(); Timer3.setCount(0); Timer4.setCount(0); Timer3.setOverflow(30000); Timer4.setOverflow(30000); Timer3.setCompare1(1000); // somewhere in the middle Timer4.setCompare1(1000); Timer3.attachCompare1Interrupt(handler1); Timer4.attachCompare1Interrupt(handler2); Timer3.resume(); Timer4.resume(); } void loop() { // Display the running counts Serial.print("Count 1: "); Serial.print(count1); Serial.print("\t\tCount 2: "); Serial.println(count2); // Run... while BUT is held, pause Count2 for(int i = 0; i<1000; i++) { if(digitalRead(BUTTON_PIN)) { Timer4.pause(); } else { Timer4.resume(); } delay(1); } } void handler_led(void) { toggle ^= 1; digitalWrite(LED_PIN, toggle); } void handler1(void) { count1++; } void handler2(void) { count2++; }

Rogerclark
Пн 25 сентября 2017 г. 5:33 утра
Добро пожаловать, Фрэнк

Я только что попытался собрать этот пример, и у меня нет ошибок

Я попробовал 2 разных доска Generic STM32F103C, а также Nucleo F103RB

Единственная разница, которую я могу видеть, если вы используете довольно старую версию Arduino IDE (1.6.9) Где, как я использую 1.8.3
(Похоже, 1.8.4 - последний и, вероятно, в порядке)

Хотя я не вижу, как может вызвать эту проблему версию IDE.

Я предполагаю, что вы недавно скачали молнию или клонировали мое репо ?

В любом случае.

Вам не нужно отлаживать это, так как он, кажется, компилируется в порядке.


Можете ли вы подтвердить, какую доску вы выбрали ?

HDLENG
Пн 25 сентября 2017 г., 7:55 утра
Роджер,

Спасибо за быстрый ответ.

Выбор платы был инструментами: Номер детали платы: «STM32F100RB-Discvl».

Когда я выбрал Generic STM32F103C, компиляция была успешной.

Я скачал репо в течение прошлой недели.

Я собираюсь начать все сначала с обновления до самого последнего Arduino IDE, а затем добавив материал STM32.

еще раз спасибо,

Откровенный

Стивестронг
Пн 25 сентября 2017 г., 7:58 утра
Я думаю, что это среда: Arduino: 1.6.9 (Windows XP), Board: "Discovery, STM32F100RB-DISCVL, STLink, None, None"

Rogerclark
Пн 25 сентября 2017 г. 8:11
[Стивестронг - Пн, 25 сентября 2017 г. 7:58] - Я думаю, что это среда: Arduino: 1.6.9 (Windows XP), Board: "Discovery, STM32F100RB-DISCVL, STLink, None, None"

HDLENG
Пн, 25 сентября 2017 г. 8:52 утра
В файле: предпочтения: URL -адреса дополнительных плат менеджера :, я добавил https: // github.com/stm32duino/boardmana ... индекс.json.

Тогда под инструментами: доски: менеджер совета директоров..., Я выбрал тип: внес свой. Затем я нашел и установил «ядер STM32 от ST-Microelectronics версии 2017.8.17 ". Доски включены в этот пакет ..., STM32F100RB-DISCVL, ...

Это проливает какой -либо свет на то, есть ли у меня подходящее ядро?

Я только что скачал arduino_stm32-master.молния. Это 37.7 МБ. Файл, который я загрузил 17.09.2017, был 39, был 39.0 МБ. Это имеет значение?

Спасибо за помощь и терпение,

Откровенный

Стивестронг
Пн 25 сентября 2017 г. 9:03
Ну, действительно, ты смешал STM32DUINO CORE от ST (доступно через менеджер библиотеки в Arduino IDE) с Arduino_stm32 (libmaple) Core Управляется Роджером, доступным только как загружаемый пакет ZIP.
Вы должны использовать только один из них, удалить другой.

HDLENG
Пн 25 сентября 2017 г. 9:30 утра
Стив,

Спасибо за предложение. Может быть, я приближаюсь к тому, чтобы это работать. Я пошел на инструменты: Правление: Менеджер правления... и отобранный и удаляемый STM32Duino Core из ST. Я перезапустил Ардуино. Теперь я не вижу досок STM32 под инструментами: Правление.
Я поместил репо Роджер в документы/arduino/harpware; Есть ли что -то еще, что мне нужно сделать, чтобы IDE осознал об этом?

Спасибо,

Откровенный

ZMEMW16
Пн 25 сентября 2017 г. 9:41
@hdleng
Извлеките основные файлы ZIP в каталог «Аппаратный» и переименуйте их, добавив префикс
Для Стива я добавляю SS-, для STM32Generic я добавлю CM- или DAN-
Так что, если бы у меня был установлен Роджерс и Стив Arduino_STM32 ss-Arduino_STM32

HDLENG
Пн 25 сентября 2017 г. 10:05 утра
@zmemw16,

Спасибо за помощь. Я думаю, что я следую указаниям, но я, очевидно, что -то не понимаю. Итак, я постараюсь объяснить шаги, которые я предпринял подробно.

Я скачал arduino_stm32-master.Zip от GitHub Роджера. Я извлек (все) в документы/arduino/hardware. Я ничего не помещал в программные файлы/arduino/hardware.

В моих документах \ arduino \ hardware \ arduino_stm32-master \ stm32f1 \ Есть платформа файла '.текст'. В этом файле есть строка: "name = stm32 платы (STM32duino.com) ".

Но нет листинга в соответствии с инструментами: доска показывает «Доски STM32».

Вы можете увидеть, что я могу делать не так?

Спасибо,

Откровенный

Rogerclark
Пн, 25 сентября 2017 г. 10:18
Откровенный

Я думаю, что вы правильно устанавливаете.

Вы перезапустили IDE после копирования файлов в аппаратную папку

Также. Вам нужно установить компилятор ARM, поэтому, если у вас удалил сердечник STM, вам нужно установить Arduino Due или Zero, как либо установите компилятор ARM, который использует мой репо.

ZMEMW16
Пн 25 сентября 2017 г. 10:41
Это мой способ справиться с несколькими ядрами Libmaple или STM32GERIERIERIER в резиденции, применяются стандартные отказы от ответственности.
@hdleng
Хорошо, мой аппаратный каталог находится под '/Home/Stephen/Sketchbook', который установлен в предпочтениях

Я только что отредактировал платформу.TXT в каталоге STM32F1 и добавлено «SRP-» в начало строки имени.
выпущен Arduino, затем через инструменты->Правление-менеджер и пришлось много прокручивать вниз.
У моего выпадения черный треугольник, направленный вниз, внизу. ~/sketchbook/hardware/Arduino_STM32/STM32F1/platform.txt

Rogerclark
Пн 25 сентября 2017 г. 11:11
Не должно быть необходимости редактировать файлы.

Все ядра STM32 должны сосуществовать OK без переименования и т. Д

У меня есть мой «Libmaple» Core и Daniel's STM32Generic в моей аппаратной папке, и они оба работают нормально.

ZMEMW16
Пн 25 сентября 2017 г. 14:49
есть преобладание «я» в посте. Я редактирую в предупреждении.

Ядра проживают вместе очень хорошо, если у вас есть только один из каждого я.эн. Один либмапл и один STM32Generic, однако я обнаружил, что в качестве досок существуют в нескольких ядрах, текст «Описание ядра» в выпадении идентично.
Я не знаю, как читается аппаратный каталог, какое ядро ​​обрабатывается первым и т. Д.
Итак, какое ядро ​​я на самом деле выбираю доску из ?
Если я хочу попробовать что -то в Стивном Корне, мне нужно будет переименовать его в верхний каталог или удалить свой, то же самое верно для STM32Generic.
Также кажется, что я установил ядер ST.

Этот пост описывает, как я с этим справлялся.

Стивен

HDLENG
Пн 25 сентября 2017 г., 19:56
@zmemw16 и @roger,

Спасибо за постоянную помощь. Я лег спать; Я тебя не игнорировал. Я вижу, что мы находимся в трех широко разделенных часовых поясах.

Кажется, у меня есть Arduino IDE, работающий на STM32. Я просто удалил все, а затем переустановил в соответствии с вашими инструкциями. Я не знаю, что на этот раз я сделал что -то по -другому, но результаты успешны. Итак, я, должно быть, что -то изуродовал по предыдущей попытке.

Я ценю ваше терпение.

Я могу успешно скомпилировать TimerErrupts.INO для общего STM32F103C. MCU на моей плате Discovery IS Microcontroller STM32F100RBT6B, 128 КБ Flash, 8 КБ оперативной памяти в 64-контактной LQFP. Я могу, конечно, отредактировать исходные файлы для решения различных карт ввода -вывода/вывода. Но это различия в размерах памяти (и, возможно, на периферийных устройствах). Это хороший способ приспособиться к этому?

Еще раз спасибо за то, что придерживались меня,

Откровенный

ZMEMW16
Пн 25 сентября 2017 г., 22:18
Я не думаю, что вам нужно сделать что -нибудь в качестве подходящего файла линкера, предоставленного в ядре.
Я не знаю, где и как это генерируется.
Файл линкера действительно изменяется с выбранным вариантом конкретного платы, не является хорошей идеей, чтобы попробовать больший чип : D
Я думаю, если вы пройдете через доски.текст & платформа.TXT как «упражнение», вы, вероятно, найдете что -то.
Стивен

Rogerclark
Пн 25 сентября 2017 г., 22:31
Вам нужно будет сделать новый «вариант», если вы хотите внести обширные изменения

Существует вариантная папка для каждого основного типа F103 MCU.

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

HDLENG
Пн 25 сентября 2017 г., 11:30 вечера
@zmemw16, @roger,

Примером несовместимости платы Discovery STM32F100 с универсальным STM32F103C является ошибка «PC8» не была объявлена ​​в этой области ». Я определил, что доска.H файл не имеет перечисленного PC8. Редактирование перечисления исправляет ошибку компилятора (но, конечно, это создаст плохой двоичный файл). Правление.Файл CPP содержит сопоставление PIN, и мне придется отредактировать его, чтобы соответствовать моей плате. Тогда есть доска.TXT и платформа.TXT, который необходимо скорректировать. Я думаю, что я буду следить за советом Роджера, просто отредактирую существующий вариант и заработаю его. Я могу после этого добавить доску обнаружения правильно.

Вы были полезны в моем изучении структуры Arduino, что касается STM32.

С уважением,

Откровенный

Rogerclark
Пн, 25 сентября 2017 г. 11:56
Откровенный

Вам не нужно редактировать платформу.TXT для таких изменений.

Вам нужно только редактировать платформу.TXT, если у вас есть другой вид загрузки E E.глин. какой -то другой тип аппаратного программиста и т. Д. Или вы хотите что -то сделать с опциями компилятора и т. Д

Изменения, которые вам необходимы, могут быть внесены путем редактирования файлов в папке варианта и в конечном итоге, также изменяя платы.текст

КСТАТИ. Настройки линкера в *.LD -файлы, легко изменить ОЗУ и размер вспышки

Однако 8K - это не так много оперативной памяти, чтобы играть с... Пустой набросок с поддержкой USB использует почти.
Вы часто можете уменьшить использование оперативной памяти, выбрав другую настройку оптимизации. По умолчанию предназначен для самого маленького двоичного файла, но я заметил, что это может привести к большему использованию оперативной памяти.
Afik 99% вещей работает над настройкой оптимизации по умолчанию, но некоторые вещи могут не сработать, если вы выберете более высокие оптимизации (хотя у меня лично не было никаких проблем даже на -o3)

HDLENG
Вторник 26 сентября 2017 г. 12:06
Роджер,

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

Стало очевидно, поскольку я исследую внутреннюю работу STM32Duino, что вы проделали большую работу. Ты очень щедрый, и ты благодаришься.

Откровенный

HDLENG
Вторник 26 сентября 2017 г. 12:32 утра
Роджер,

Еще одна вещь. У платы Discovery STM32F100 есть два процессора. STM32F103C8T6 обрабатывает USB. На самом деле его можно использовать в качестве автономного ST-Link, подключенного к другим доскам. STM32F100R8T6B предназначен для кода пользователя, но ему не нужно выполнять свои функции USB. Итак, 8 тыс. ОЗУ не так ограничивает.

Откровенный

Rogerclark
Вторник 26 сентября 2017 г. 2:53 утра
Привет, Фрэнк

Я хотел бы получить все кредиты, но около 90% ядра исходит от исходного кода, который Leaflabs написал для своих продуктов Maple в 2012 году.

Leaflabs отказался от этого примерно в 2015 году, и я поднял его после того, как @bobc сделал какую -то работу, чтобы сделать его совместимым с Arduino 1.5

С тех пор я изменил / улучшил много вещей, но внесли большой вклад различных других людей, так что теперь это очень основанная на сообществе.

КСТАТИ. Я также поддерживаю загрузчик... Но поскольку у вашей доски, вероятно, есть Stlink на ней, вы не будете использовать это

ZMEMW16
Вторник 26 сентября 2017 г. 4:50 утра
это обнаружение ?
Если да, две мысли
1. Поддерживают ли ядра ST напрямую ?
2. Сделайте поиск "Джефф Браун, обнаружив микроконтроллер STM32"
Полезная ссылка на PDF : D
https: // www.Google.сопутствующий.Великобритания/URL?SA = T&rct = j ... ncpliib-dq
По общему признанию, он использует классический подход «C», но он дает большое количество информации. :ржу не могу:

Добавление окончательного 3. :ржу не могу: :ржу не могу:
3. http: // stm32duino.com/viewtopic.PHP?T = 1741#P22876
Стивен

Rogerclark
Вторник 26 сентября 2017 г. 5:45 утра
Мне пришло в голову, что Фрэнк мог взглянуть на собственное ядро ​​STM.

https: // github.com/stm32duino/arduino_core_stm32

Тем не менее, у STM нет варианта для его доски, поэтому ему нужно сделать то же самое.

Кроме того, у Afik STM нет никаких примеров того, как использовать аппаратные таймеры, поэтому ему нужно было научиться использовать API программирования HAL STM, прежде чем он сможет что -либо сделать.

Я посмотрел в формате PDF этой онлайн -книги, но это дни
На протяжении всей этой книги мы используем стандартную периферийную библиотеку ST Не HAL, поэтому это не обязательно так полезно с точки зрения обучения, как программировать, используя ядро ​​STM

ZMEMW16
Вторник 26 сентября 2017 г. 6:48 утра
@hdleng
Что -то подсказывает мне, что я не должен, но у STM32F100RB есть таймер2 ?
Если да, то в файлах вариантов что -то не так, опечатка ? Может быть, это что-то неверное, timner2 ? ? ?
Если нет, то решен : D

Я предполагаю, что вы можете повторно применять идеи от учебников на основе Linux в настройку Windows, если это необходимо
Это очень тяжелое предложение для меня :!:

Есть книга, я получил ее от Amazon; Не рекомендация-на случайном порядке он использует Cubemx и Eclipse с подключаемостью GNU Arm Eclipse, за £ 2, почему бы и нет ?

Начало работы с Development STM32 Nucleo (Kindle Edition) Agus Kurniawan

Нашел пару сайтов/блогов/тут, это немного
http: // elastic-notes.блог.сопутствующий.Великобритания/
другой с битами
http: // www.ScienceProg.com/rivel-rac ... 2f103zet6/
А потом есть Святое Сообщество
https: // Сообщество.ул.com/thread/15404
и это
http: // scaluza.com/stm32f4/intro-in-stm32f4cubemx/

Просто просмотрите их, они лишь некоторые из моих открытых вкладок из нескольких окон Firefox
На самом деле я должен просто застегнуть свой файл истории или закладки от Firefox или моего мега-книги.HTML -файл :ржу не могу:

И тогда, конечно, есть YouTube :рулон:
Я считаю, что смотрю видеоурок в видео более отталкивает, никогда не могу попасть в паузу достаточно быстро и итерация взад-вперед к кадре ... ... А потом есть музыка, а тогда это звук на русском, немецком или французском

Стивен

HDLENG
Вторник 26 сентября 2017 г. 8:14
Роджер и Стивен,

Ваш совет был полезным, и теперь я в пути. Я обновлю свой прогресс.

До моего набега в Arduino я использовал командную строку Linux и сценарии для развития с GCC для ARM. Я использую периферийные библиотеки ST. Книга Джеффа Брауна хорошая, и я в значительной степени следил за его методологией. Я использовал эту среду разработки для большей части моей работы STM32F1.

Отдельно я использую Eclipse, работающий в Windows для работы STM32F4. Это делает работу немного более автоматизированной. И я все равно хотел изучить затмение. Книга Carmine Noviello, Mastering STM32, является очень хорошей ссылкой на создание инструментов и для выполнения специфической работы STM32F4.

Я изменил один из вариантов STM32F103 для работы с моей платой STM32F100. Я мог бы скомпилировать и загрузить Timerintrupt.Ино, но он не выполнился должным образом. Как ожидал Стивен, Timer2 не реализуется, как требуется в программе. Timer1 - это расширенный таймер на процессоре, и, изменяя код на его использование, мне удалось заставить его работать.

Работа, которую я проделал, используя код голого металла и библиотеки ST, дала мне низкое знакомство с таймерами; Итак, было не очень сложно устранить проблемы.

Теперь я прошел большую часть кривой обучения для STM32Duino, я смогу быстро работать проектами, которые могут переносить накладные расходы программного обеспечения, которые сопровождают Arduino. Иногда моя работа включает в себя прототипирование дизайна, запустив его один раз, затем разрывает его на части. Arduino имеет смысл в этих случаях. С другой стороны, я сразу же спускаюсь рядом с аппаратным обеспечением, используя C или даже сборку, когда это требует производительности, и объем оправдывает его.

Даже использование этой доски ST Discovery не имеет особого смысла, кроме как инструмент обучения. Я уже заказал несколько досок на базе STM32F103; Итак, я могу воспользоваться конфигурациями STM32Duino, которые уже на месте.

Спасибо вам обоим, господа, за вашу помощь. Я уверен, что когда -нибудь мы переписать снова по другим вопросам.

С наилучшими пожеланиями,

Откровенный

Rogerclark
Вторник 26 сентября 2017 г. 10:24
Привет, Фрэнк

Я рад, что ты справляешься с вещами..

Я пометил ветку как решенную и немного изменил заголовок, чтобы помочь любому другому, кто может использовать ту же доску.

Я перенесю эту ветку в соответствующий раздел (снова, чтобы помочь кому -либо еще с той же доской - так как большинство проблем были связаны с тем, что это тип доски, которую никто не пытался запустить Arduino раньше)

STM32L476RG