Russian Qt Forum
Март 28, 2024, 21:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите нубу влиться в разработку МК. (STM32 NUCLEO-L053R8)  (Прочитано 12297 раз)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« : Июнь 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, делятся проектами, где в качестве используемых библиотек присутствует жалкая горстка файлов. Так понимаю, что это весьма экономично. Хотелось бы узнать, как определять, какие файлы мне необходимо брать в проект и главное, откуда их брать?

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

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Июнь 29, 2017, 23:55 »

Продолжение
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Июнь 30, 2017, 08:37 »

Ну, вопрос "где брать файлы" риторический, т.к. стеков/библиотек полно, как от самих производителей, так и опенсорц. Часто, стеки (HAL) от вендоров - УГ. Поэтому можешь посмотреть в сторону опенсорсного libopencm3, который написан в более менее нормальном стиле.

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

А насчет размера выходного файла бинарика - так, ЕМНИП, все зависит от флагов компиляции, линковки и стриппера. И тут QBS ни при чем - это же все не магия в конце концов.
« Последнее редактирование: Июнь 30, 2017, 08:41 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Июнь 30, 2017, 09:28 »

Я никогда не использовал QtC чтобы что-то серьезное отлаживать - а только мигать диодиками. Улыбающийся
Не справляется??
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #4 : Июнь 30, 2017, 11:03 »

У меня имеются следующие файлики ld и asm (см. аттач). Взял их из mbed-os (mbed-os\targets\TARGET_STM\TARGET_STM32L0\TARGET_NUCLEO_L053R8\device\TOOLCHAIN_GCC_ARM)
На сколько они корректны и как их правильно прикручивать? Честно говоря, не сталкивался ранее с подобными файлами. Есть смысл углубляться в изучение того, как они формируются или на первых порах проще искать готовые  решения?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Июнь 30, 2017, 11:29 »

Цитировать
Не справляется??

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

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

Я бы погуглил и поизучал на этот счет, т.к. разные компиляторы имеют разный синтаксис этих *.ld файлов (кроме того, для разных MCU они также имеют разный контент).
Но проще взять готовый на первых порах, и, если с ним заработает, то использовать его, а тюнинговать уже можно потом.
« Последнее редактирование: Июнь 30, 2017, 11:31 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #6 : Июль 04, 2017, 17:44 »

можешь посмотреть в сторону опенсорсного libopencm3, который написан в более менее нормальном стиле.

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

Сообщений: 4349



Просмотр профиля
« Ответ #7 : Июль 04, 2017, 20:00 »

Я посмотрел документацию на библиотеку и несколько примерчиков. Вполне себе годно.
libopencm3 неплоха, лежит максимально близко к железу, но из-за этого управление некоторой периферией для STM32F1, может сильно отличаться от такой же для STM32F4, например.
В свое время я из-за этого от нее отказался, и остановился на ChibiOS, это реалтайм ОС со своим HAL, который позволяет писать более переносимый код между контроллерами.

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

« Последнее редактирование: Июль 04, 2017, 20:45 от Old » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #8 : Июль 04, 2017, 23:43 »

Я возможно чего-то не понимаю, но mbed сходу отжирает больше половины норматива памяти. Не думал, что пироженки на столько дорогие.
С заданием тактирования я пока не разбирался, но на STM32L053 светодиод мигает, а на STM32L011 фиксируется только первое состояние. Мне казалось, что mbed за меня все настроит. Сейчас разбираюсь, как заставить мигать светодиод на мелкой плате (которая L011) и стоит ли связываться с mbed.
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #9 : Июль 05, 2017, 06:36 »

стоит ли связываться с mbed.
Нет. Это такая же игрушка, как и Ардуина. Надоест играться, придется заново разбираться с чем-то другим.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #10 : Июль 05, 2017, 09:22 »

kuzulis, old, спасибо за рекомендации. Я наверняка ещё обращусь с вопросами Улыбающийся
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #11 : Июль 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;
}
 
Код билдится, но выдается ошибка при попытке отладки (см. вложение)
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 564


Просмотр профиля
« Ответ #12 : Январь 10, 2018, 10:40 »

Цитировать
Прошу ... дать старт-пинок
запоздало, но тем не менее вот танец с бубном, вроде то, что нужно?

https://www.youtube.com/watch?v=YgHe3D1t3Fs
« Последнее редактирование: Январь 10, 2018, 10:44 от juvf » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #13 : Январь 10, 2018, 11:01 »

Спасибо!
Я пока отложил свои хобби - работы много Грустный
Так что не поздновато - буду использовать Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.092 секунд. Запросов: 23.