Russian Qt Forum

Qt => Qt Embedded => Тема начата: __Heaven__ от Июнь 29, 2017, 23:55



Название: Помогите нубу влиться в разработку МК. (STM32 NUCLEO-L053R8)
Отправлено: __Heaven__ от Июнь 29, 2017, 23:55
Привет друзья!
Прошу помочь разобраться и дать старт-пинок в обучении.
Я заинтересовался микроконтроллерами и хотел бы научиться вести разработку под них в IDE QtCreator.
Для моих экспериментов я владею картой NUCLEO-L053R8
Сейчас переработал достаточно много информации по теме, но всё равно остаюсь на уровне "железо подключено в ПК, но ничего не происходит", потому нуждаюсь в консультации.

Мне продемонстрировали, как можно создать проект при помощи сервиса mbed и импортировать в IDE Keil. С её помощью мне удалось помигать светодиодом с помощью кнопки. Недостатком Keil для меня послужило то, что на фоне QtCreator она какая-то не няш-мяш, да и с c++11 у меня там не сложилось.

Также с помощью статей из интернета я импортировал упомянутый проект в GCC make, который смог с некими ухищрениями открыть и скомпилировать в QtCreator, но почему-то отладка срабатывала как-то через раз.

Также я попытался создать проект QBS, куда прикручивал гитовые исходники mbed со своим main.cpp, но что-то пошло не так и скомпилированный код оказался большого размера 68к и не запустился на плате.

Меня интересует, каким образом было бы правильно вести разработку для данного МК. Меня беспокоит, что mbed отжирает минимум половину ПЗУ. Я наблюдал, как местные пользователи, например kuzulis, делятся проектами, где в качестве используемых библиотек присутствует жалкая горстка файлов. Так понимаю, что это весьма экономично. Хотелось бы узнать, как определять, какие файлы мне необходимо брать в проект и главное, откуда их брать?

Первой целью для меня сейчас стоит научиться отлаживать проект с использованием цифровых входов/выходов и прерываний.
Во вложении скрины настройки сборок.


Название: Re: Помогите нубу влиться в разработку МК. (STM32 NUCLEO-L053R8)
Отправлено: __Heaven__ от Июнь 29, 2017, 23:55
Продолжение


Название: Re: Помогите нубу влиться в разработку МК. (STM32 NUCLEO-L053R8)
Отправлено: kuzulis от Июнь 30, 2017, 08:37
Ну, вопрос "где брать файлы" риторический, т.к. стеков/библиотек полно, как от самих производителей, так и опенсорц. Часто, стеки (HAL) от вендоров - УГ. Поэтому можешь посмотреть в сторону опенсорсного libopencm3 (http://libopencm3.org/), который написан в более менее нормальном стиле.

Емнип, главное - это создать корректный файл для линкера *.ld и стартап файл startup.c/asm, иначе оно не сможет отлаживаться (да и мигать диодиками тоже). Я никогда не использовал QtC чтобы что-то серьезное отлаживать - а только мигать диодиками. :) У нас все используют Keil/IAR. На крайний случай, можно выдернуть готовые линкер-файлы и прочую дребедень из проектов CooCox (http://coocox.org/), т.к она использует GCC ARM компилер. Ну, а по хорошему - читаем даташит на проц и ляпаем линкер/стартап файлы.. :)

А насчет размера выходного файла бинарика - так, ЕМНИП, все зависит от флагов компиляции, линковки и стриппера. И тут QBS ни при чем - это же все не магия в конце концов.


Название: Re: Помогите нубу влиться в разработку МК. (STM32 NUCLEO-L053R8)
Отправлено: __Heaven__ от Июнь 30, 2017, 09:28
Я никогда не использовал QtC чтобы что-то серьезное отлаживать - а только мигать диодиками. :)
Не справляется??


Название: Re: Помогите нубу влиться в разработку МК. (STM32 NUCLEO-L053R8)
Отправлено: __Heaven__ от Июнь 30, 2017, 11:03
У меня имеются следующие файлики ld и asm (см. аттач). Взял их из mbed-os (mbed-os\targets\TARGET_STM\TARGET_STM32L0\TARGET_NUCLEO_L053R8\device\TOOLCHAIN_GCC_ARM)
На сколько они корректны и как их правильно прикручивать? Честно говоря, не сталкивался ранее с подобными файлами. Есть смысл углубляться в изучение того, как они формируются или на первых порах проще искать готовые  решения?


Название: Re: Помогите нубу влиться в разработку МК. (STM32 NUCLEO-L053R8)
Отправлено: kuzulis от Июнь 30, 2017, 11:29
Цитировать
Не справляется??

Не принято у нас, никто не перейдет на это с теплых/ламповых IAR/Keil. Будут мучаться с рефакторингом, но зато отладка по-быстрее говорят. Да я и не до такой степени эмбеддедщик, ничо нового не скажу.

Цитировать
На сколько они корректны и как их правильно прикручивать? Честно говоря, не сталкивался ранее с подобными файлами. Есть смысл углубляться в изучение того, как они формируются или на первых порах проще искать готовые  решения?

Я бы погуглил и поизучал на этот счет, т.к. разные компиляторы имеют разный синтаксис этих *.ld файлов (кроме того, для разных MCU они также имеют разный контент).
Но проще взять готовый на первых порах, и, если с ним заработает, то использовать его, а тюнинговать уже можно потом.


Название: Re: Помогите нубу влиться в разработку МК. (STM32 NUCLEO-L053R8)
Отправлено: __Heaven__ от Июль 04, 2017, 17:44
можешь посмотреть в сторону опенсорсного libopencm3 (http://libopencm3.org/), который написан в более менее нормальном стиле.

Я посмотрел документацию на библиотеку и несколько примерчиков. Вполне себе годно. Хотел бы уточнить, быть может будет рекомендация на подобную либу только на c++?
Очень уж понравилось использовать всякие DigitalOut led(LED1); led = true;


Название: Re: Помогите нубу влиться в разработку МК. (STM32 NUCLEO-L053R8)
Отправлено: Old от Июль 04, 2017, 20:00
Я посмотрел документацию на библиотеку и несколько примерчиков. Вполне себе годно.
libopencm3 неплоха, лежит максимально близко к железу, но из-за этого управление некоторой периферией для STM32F1, может сильно отличаться от такой же для STM32F4, например.
В свое время я из-за этого от нее отказался, и остановился на ChibiOS, это реалтайм ОС со своим HAL, который позволяет писать более переносимый код между контроллерами.

Хотел бы уточнить, быть может будет рекомендация на подобную либу только на c++?
Очень уж понравилось использовать всякие DigitalOut led(LED1); led = true;
Это пока хочется мигать светодиодиками. Скорее всего в боевом коде, который что-то делает, удобней будет использовать другие, более высокоуровневые, абстракции.
Но если очень хочется, то есть mbed: https://developer.mbed.org/



Название: Re: Помогите нубу влиться в разработку МК. (STM32 NUCLEO-L053R8)
Отправлено: __Heaven__ от Июль 04, 2017, 23:43
Я возможно чего-то не понимаю, но mbed сходу отжирает больше половины норматива памяти. Не думал, что пироженки на столько дорогие.
С заданием тактирования я пока не разбирался, но на STM32L053 светодиод мигает, а на STM32L011 фиксируется только первое состояние. Мне казалось, что mbed за меня все настроит. Сейчас разбираюсь, как заставить мигать светодиод на мелкой плате (которая L011) и стоит ли связываться с mbed.


Название: Re: Помогите нубу влиться в разработку МК. (STM32 NUCLEO-L053R8)
Отправлено: Old от Июль 05, 2017, 06:36
стоит ли связываться с mbed.
Нет. Это такая же игрушка, как и Ардуина. Надоест играться, придется заново разбираться с чем-то другим.


Название: Re: Помогите нубу влиться в разработку МК. (STM32 NUCLEO-L053R8)
Отправлено: __Heaven__ от Июль 05, 2017, 09:22
kuzulis, old, спасибо за рекомендации. Я наверняка ещё обращусь с вопросами :)


Название: Re: Помогите нубу влиться в разработку МК. (STM32 NUCLEO-L053R8)
Отправлено: __Heaven__ от Июль 08, 2017, 23:06
Начал знакомство с opencm3 пока под windows. Плата STM32L011K4T6.
Начала qbs проект.
Код
Javascript
import qbs
 
CppApplication {
   consoleApplication: true
   files: "main.c"
 
   cpp.includePaths: ["C:/Development/libopencm3/include"]
   cpp.libraryPaths: ["C:/Development/libopencm3/lib"]
   cpp.staticLibraries: ["opencm3_stm32l0"]
   cpp.defines: ["STM32L1"]
   cpp.commonCompilerFlags: ["-mcpu=cortex-m0plus"]
   cpp.linkerFlags: ["-mcpu=cortex-m0plus", "-Wl,--start-group", "-lc", "-lc",
       "-lnosys", "-Wl,--end-group"]
 
   Group {     // Properties for the produced executable
       fileTagsFilter: product.type
       qbs.install: true
   }
}
 
Код
C++ (Qt)
#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/gpio.h>
 
#define LED_GREEN_PIN GPIO4
#define LED_GREEN_PORT GPIOB
#define LED_RED_PIN GPIO5
#define LED_RED_PORT GPIOA
 
static void gpio_setup(void)
{
   /* Enable GPIOB clock. */
   rcc_periph_clock_enable(RCC_GPIOA);
   rcc_periph_clock_enable(RCC_GPIOB);
 
   /* set pins to output mode, push pull */
   gpio_mode_setup(LED_RED_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED_RED_PIN);
   gpio_mode_setup(LED_GREEN_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED_GREEN_PIN);
}
 
int main(void)
{
   int i;
 
   gpio_setup();
 
   while (1) {
       /* toggle each led in turn */
       gpio_toggle(LED_GREEN_PORT, LED_GREEN_PIN);
       for (i = 0; i < 100000; i++) { /* Wait a bit. */
           __asm__("nop");
       }
       gpio_toggle(LED_RED_PORT, LED_RED_PIN);
       for (i = 0; i < 100000; i++) { /* Wait a bit. */
           __asm__("nop");
       }
   }
 
   return 0;
}
 
Код билдится, но выдается ошибка при попытке отладки (см. вложение)


Название: Re: Помогите нубу влиться в разработку МК. (STM32 NUCLEO-L053R8)
Отправлено: juvf от Январь 10, 2018, 10:40
Цитировать
Прошу ... дать старт-пинок
запоздало, но тем не менее вот (http://"https://www.youtube.com/watch?v=YgHe3D1t3Fs") танец с бубном, вроде то, что нужно?

https://www.youtube.com/watch?v=YgHe3D1t3Fs


Название: Re: Помогите нубу влиться в разработку МК. (STM32 NUCLEO-L053R8)
Отправлено: __Heaven__ от Январь 10, 2018, 11:01
Спасибо!
Я пока отложил свои хобби - работы много :(
Так что не поздновато - буду использовать :)