Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
18 / 17 / 2
Регистрация: 29.03.2019
Сообщений: 234
1

Eclipse and libopencm3

12.07.2020, 12:35. Просмотров 1214. Ответов 16

Решил познакомится с опенсорс бибилотекой libopencm3. Скачал репозиторий протестил примерчик - работает(запускал make, а потом bin файл зашивал в мк командой - st-flash write miniblink.bin 0x8000000). Установил arm-none-eabi, arm-плагин. st-link - потом протестил базовый пример с hello world, который arm предоставляет(с библиотеками SPL, CMSIS) - тоже работает. Затем взял пример из libopencm3:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/gpio.h>
 
static void gpio_setup(void)
{
    /* Enable GPIOD clock. */
    /* Manually: */
    // RCC_AHB1ENR |= RCC_AHB1ENR_IOPDEN;
    /* Using API functions: */
    rcc_periph_clock_enable(RCC_GPIOD);
 
    /* Set GPIO12 (in GPIO port D) to 'output push-pull'. */
    /* Manually: */
    // GPIOD_CRH = (GPIO_CNF_OUTPUT_PUSHPULL << (((8 - 8) * 4) + 2));
    // GPIOD_CRH |= (GPIO_MODE_OUTPUT_2_MHZ << ((8 - 8) * 4));
    /* Using API functions: */
    gpio_mode_setup(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO12);
}
 
int main(void)
{
    int i;
 
    gpio_setup();
 
    /* Blink the LED (PC8) on the board. */
    while (1) {
        /* Manually: */
        // GPIOD_BSRR = GPIO12;     /* LED off */
        // for (i = 0; i < 1000000; i++)    /* Wait a bit. */
        //  __asm__("nop");
        // GPIOD_BRR = GPIO12;      /* LED on */
        // for (i = 0; i < 1000000; i++)    /* Wait a bit. */
        //  __asm__("nop");
 
        /* Using API functions gpio_set()/gpio_clear(): */
        // gpio_set(GPIOD, GPIO12); /* LED off */
        // for (i = 0; i < 1000000; i++)    /* Wait a bit. */
        //  __asm__("nop");
        // gpio_clear(GPIOD, GPIO12);   /* LED on */
        // for (i = 0; i < 1000000; i++)    /* Wait a bit. */
        //  __asm__("nop");
 
        /* Using API function gpio_toggle(): */
        gpio_toggle(GPIOD, GPIO12); /* LED on/off */
        for (i = 0; i < 1000000; i++) { /* Wait a bit. */
            __asm__("nop");
        }
    }
 
    return 0;
}
И решил заменить код в main из примера arm этим. Прописал пути в GNU ARM Cross Assembler->Includes и GNU ARM Cross С/С++ Compiler -> Includes:
/libopencm3/,
/libopencm3/include/,
/libopencm3/lib/stm32/common/

Добавил в GNU ARM Cross Assembler->Preprocessor и GNU ARM Cross С/С++ Compiler -> Preprocessor значение STM32F4

Но линкер ругается:

/home/northcitizen/opt/gnu-mcu-eclipse/arm-none-eabi-gcc/8.2.1-1.7-20190524-0603/bin/../lib/gcc/arm-none-eabi/8.2.1/../../../../arm-none-eabi/bin/ld: ./src/main.o: in function `gpio_setup':
/home/northcitizen/eclipse-workspace/1234567/Debug/../src/main.c:11: undefined reference to `rcc_periph_clock_enable'
/home/northcitizen/opt/gnu-mcu-eclipse/arm-none-eabi-gcc/8.2.1-1.7-20190524-0603/bin/../lib/gcc/arm-none-eabi/8.2.1/../../../../arm-none-eabi/bin/ld: /home/northcitizen/eclipse-workspace/1234567/Debug/../src/main.c:18: undefined reference to `gpio_mode_setup'
/home/northcitizen/opt/gnu-mcu-eclipse/arm-none-eabi-gcc/8.2.1-1.7-20190524-0603/bin/../lib/gcc/arm-none-eabi/8.2.1/../../../../arm-none-eabi/bin/ld: ./src/main.o: in function `main':
/home/northcitizen/eclipse-workspace/1234567/Debug/../src/main.c:46: undefined reference to `gpio_toggle'
collect2: error: ld returned 1 exit status
make: *** [makefile:64: 1234567.elf] Error 1
"make all" terminated with exit code 2. Build might be incomplete.

Плата - STM32F4-Discovery
ОС - linux/Ubuntu

Добавлено через 2 часа 29 минут
Стоит упамянуть, что arm-плагин установил через eclipse в разделе Help -> Eclipse marketplace
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2020, 12:35
Ответы с готовыми решениями:

stm32l4-discovery и libopencm3
Всем привет... Нужна помочь корифеев. Пытаюсь сделать мигалку на на демоборде из subj. Код...

Libopencm3 как прикрутить к IAR
Если кто в теме, помогите прикрутить Libopencm3 к IAR, на примере мигания tid...)

Использование libopencm3
Добрый день. Пытаюсь запустить пример к библиотеке libopencm3. Есть объявленная структура: ...

[Решено]libopencm3 библиотека для ARM Cortex M0/M3/M4
С Новым Годом ребята. Помогите разобраться с кодом библиотеки...

16
18 / 17 / 2
Регистрация: 29.03.2019
Сообщений: 234
14.07.2020, 13:28  [ТС] 2
Я так понял у меня не создается bin файл правильного вида в eclipse

Почему то когда прошиваю через eclipse - то получаю следующую инфу от St-link:

st-flash 1.6.0-392-g31b1fa1
2020-07-14T13:19:15 INFO common.c: F4xx: 192 KiB SRAM, 1024 KiB flash in at least 16 KiB pages.
file 1234567.bin md5 checksum: 6676c3596a4c601fa098d31249a9963b, stlink checksum: 0x00000120
2020-07-14T13:19:15 INFO common.c: Attempting to write 40 (0x28) bytes to stm32 address: 134217728 (0x8000000)
EraseFlash - Sector:0x0 Size:0x4000 2020-07-14T13:19:16 INFO common.c: Flash page at addr: 0x08000000 erased
2020-07-14T13:19:16 INFO common.c: Finished erasing 1 pages of 16384 (0x4000) bytes
2020-07-14T13:19:16 INFO common.c: Starting Flash write for F2/F4/L4
2020-07-14T13:19:16 INFO flash_loader.c: Successfully loaded flash loader in sram
enabling 32-bit flash writes
size: 40
2020-07-14T13:19:16 INFO common.c: Starting verification of write complete
2020-07-14T13:19:16 INFO common.c: Flash written and verified! jolly good!

а когда через терминалку командой st-flash write miniblink.bin 0x8000000

st-flash 1.6.0-392-g31b1fa1
2020-07-14T13:25:45 INFO common.c: F4xx: 192 KiB SRAM, 1024 KiB flash in at least 16 KiB pages.
file miniblink.bin md5 checksum: e82ce02349464bc8977ecae452cd5328, stlink checksum: 0x00009a7d
2020-07-14T13:25:45 INFO common.c: Attempting to write 752 (0x2f0) bytes to stm32 address: 134217728 (0x8000000)
EraseFlash - Sector:0x0 Size:0x4000 2020-07-14T13:25:46 INFO common.c: Flash page at addr: 0x08000000 erased
2020-07-14T13:25:46 INFO common.c: Finished erasing 1 pages of 16384 (0x4000) bytes
2020-07-14T13:25:46 INFO common.c: Starting Flash write for F2/F4/L4
2020-07-14T13:25:46 INFO flash_loader.c: Successfully loaded flash loader in sram
enabling 32-bit flash writes
size: 752
2020-07-14T13:25:46 INFO common.c: Starting verification of write complete
2020-07-14T13:25:46 INFO common.c: Flash written and verified! jolly good!


то есть видно, что bin-файл в первом случае 40, а во втором 752 байта.

Но почему так не понятно. для примеров из arm плагина все нормально было
0
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,113
Записей в блоге: 6
14.07.2020, 13:42 3
Цитата Сообщение от northcitizen Посмотреть сообщение
то есть видно, что bin-файл в первом случае 40, а во втором 752 байта.
Вы не можете в проводнике открыть папку с файлом и посмотреть какой у него размер?
0
18 / 17 / 2
Регистрация: 29.03.2019
Сообщений: 234
14.07.2020, 13:48  [ТС] 4
Видимо мне нужно сказать эклипсу как выполнять вроде такой команды
arm-none-eabi-objcopy -O binary miniblink.elf miniblink.bin

Добавлено через 6 минут
Цитата Сообщение от locm Посмотреть сообщение
Вы не можете в проводнике открыть папку с файлом и посмотреть какой у него размер?
Могу, только от этого размеры файлов не изменятся..
0
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,113
Записей в блоге: 6
14.07.2020, 13:54 5
То есть вы хотите сказать что один и тот же файл находящийся в одной и той же папке меняет свой размер в зависимости от того через что шьете одной и той же утилитой?
Сами понимаете бредовость этого?
0
18 / 17 / 2
Регистрация: 29.03.2019
Сообщений: 234
14.07.2020, 14:33  [ТС] 6
Цитата Сообщение от locm Посмотреть сообщение
То есть вы хотите сказать что один и тот же файл находящийся в одной и той же папке меняет свой размер в зависимости от того через что шьете одной и той же утилитой?
Покажите то место, где я это сказал(То что файлы в одной директории). Я сказал, что клипса не может сгенерить файл. Или может но не правильно именно для проета с libopencm3/ и уточнил, что для проектов которые поставляет arm с SPL/CMSIS все было нормально.

Добавлено через 10 минут
Цитата Сообщение от locm Посмотреть сообщение
Сами понимаете бредовость этого?
Если вы даже внимательно посмотрите, то увидете, что это два разных файла.

Добавлено через 22 минуты
Похоже, что Eclipse вообще не создвет binary file, а этот еще висит с arm-плагина. Нужно разбираться..
0
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,113
Записей в блоге: 6
14.07.2020, 14:36 7
Цитата Сообщение от northcitizen Посмотреть сообщение
Я сказал, что клипса не может сгенерить файл.
Вы написали.
Цитата Сообщение от northcitizen Посмотреть сообщение
Почему то когда прошиваю через eclipse - то получаю следующую инфу от St-link:
Цитата Сообщение от northcitizen Посмотреть сообщение
а когда через терминалку командой st-flash write miniblink.bin 0x8000000
То есть один и другой файл прошивки был скомпилирован и прошит. Если не клипсой то чем (умалчиваете)? Тут форум экстрасенсов?

Цитата Сообщение от northcitizen Посмотреть сообщение
Или может но не правильно именно для проета с libopencm3
Ну а проект конечно же выложили но забыли дать ссылку? Я прав? Или все таки считаете что здесь форум экстрасенсов?
Во вашим вопросам видно что вы очень сильно не хотите получить ответ по существу.

Цитата Сообщение от northcitizen Посмотреть сообщение
Если вы даже внимательно посмотрите, то увидете, что это два разных файла.
То есть об этом мы должны догадаться по размеру файла?
В первом логе нет имени файла. С таким подходом ответа не будет.

Цитата Сообщение от northcitizen Посмотреть сообщение
Похоже, что Eclipse вообще не создает binary file. Нужно разбираться..
Что же вы тогда шьете? Те 40 байт это что? Сферический конь в вакууме?
Возьмите нормальную, настроенную под STM32 IDE и не создайте себе сложностей которые не можете решить.
0
18 / 17 / 2
Регистрация: 29.03.2019
Сообщений: 234
14.07.2020, 14:51  [ТС] 8
Спасибо за помощь
То есть один и другой файл прошивки был скомпилирован и прошит. Если не клипсой то чем (умалчиваете)? Тут форум экстрасенсов?
bin файл был получен так: arm-none-eabi-objcopy -O binary <file name>.elf <file name>.bin
прошит тем же st-link-ом так: st-flash write <file name>.bin 0x8000000
Это все через terminal
Цитата Сообщение от locm Посмотреть сообщение
Те 40 байт это что?
котрый остался скопилированный для примера из arm-плагина

Проектик во вложении
0
Вложения
Тип файла: zip 1234567.zip (77.4 Кб, 3 просмотров)
18 / 17 / 2
Регистрация: 29.03.2019
Сообщений: 234
14.07.2020, 15:06  [ТС] 9
Хотя Эклипс похожее делает.. но почему то в поле Text 0

Invoking: GNU ARM Cross Create Flash Image
arm-none-eabi-objcopy -O binary "1234567.elf" "1234567.bin"
Finished building: 1234567.bin

Invoking: GNU ARM Cross Print Size
arm-none-eabi-size --format=berkeley "1234567.elf"
text data bss dec hex filename
0 40 256 296 128 1234567.elf
Finished building: 1234567.siz
0
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,113
Записей в блоге: 6
14.07.2020, 15:10 10
То есть elf файл создается?
st-flash не умеет шить elf файл? Попробуйте вместо него eblink который шьет elf, hex и srec файлы.

Цитата Сообщение от northcitizen Посмотреть сообщение
Проектик во вложении
В релизной папке hex примерно на 40 байт.
Судя по map файлу, кода в нем вообще нет. В отладочной аналогично.
Где стартап файл?
0
18 / 17 / 2
Регистрация: 29.03.2019
Сообщений: 234
14.07.2020, 15:35  [ТС] 11
Цитата Сообщение от locm Посмотреть сообщение
То есть elf файл создается?
Да, я удалял его потом делал Build All и он в проекте снова появляется
Цитата Сообщение от locm Посмотреть сообщение
Где стартап файл?
Я не могу его найти. Черт.
Это из-за него этот ворнинг ?
/home/northcitizen/opt/gnu-mcu-eclipse/arm-none-eabi-gcc/8.2.1-1.7-20190524-0603/bin/../lib/gcc/arm-none-eabi/8.2.1/../../../../arm-none-eabi/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000008000028
0
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,113
Записей в блоге: 6
14.07.2020, 15:58 12
Лучший ответ Сообщение было отмечено northcitizen как решение

Решение

Цитата Сообщение от northcitizen Посмотреть сообщение
Я не могу его найти.
Вот поэтому прошивка не содержит кода.
1
18 / 17 / 2
Регистрация: 29.03.2019
Сообщений: 234
14.07.2020, 17:00  [ТС] 13
locm, добавляю в проект файл startup_stm32f407xx.s меняю на startup_stm32f407xx.S, чтобы eclipse понял, что это файл asm. Потом добавляю пути к стартапу и после компиляции все без измненений. Где я опять фигню сделал?

Добавлено через 28 минут
Я думаю, мне нужно в эклипсе что то поменять для правильной генерации make файла. Потомучто в папке с проектом от libopencm3 тоже нет startup файла. Зато у них make файл со следующим содержанием
Bash
1
2
3
4
5
BINARY = miniblink
 
DEVICE=STM32F407VG
 
include ../../Makefile.include
и есть автосгенеренный файлик по имени generated.STM32F407VG.ld со следующим содержанием
EXTERN(vector_table)
ENTRY(reset_handler)
MEMORY
{
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 128K
rom (rx) : ORIGIN = 0x08000000, LENGTH = 1024K
ccm (rwx) : ORIGIN = 0x10000000, LENGTH = 64K
}
SECTIONS
{
.text : {
*(.vectors)
*(.text*)
. = ALIGN(4);
*(.rodata*)
. = ALIGN(4);
} >rom
.preinit_array : {
. = ALIGN(4);
__preinit_array_start = .;
KEEP (*(.preinit_array))
__preinit_array_end = .;
} >rom
.init_array : {
. = ALIGN(4);
__init_array_start = .;
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
__init_array_end = .;
} >rom
.fini_array : {
. = ALIGN(4);
__fini_array_start = .;
KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
__fini_array_end = .;
} >rom
.ARM.extab : {
*(.ARM.extab*)
} >rom
.ARM.exidx : {
__exidx_start = .;
*(.ARM.exidx*)
__exidx_end = .;
} >rom
. = ALIGN(4);
_etext = .;
.data : {
_data = .;
*(.data*)
. = ALIGN(4);
_edata = .;
} >ram AT >rom
_data_loadaddr = LOADADDR(.data);
.bss : {
*(.bss*)
*(COMMON)
. = ALIGN(4);
_ebss = .;
} >ram
.ccm : {
*(.ccmram*)
. = ALIGN(4);
} >ccm
/DISCARD/ : { *(.eh_frame) }
. = ALIGN(4);
end = .;
}
PROVIDE(_stack = ORIGIN(ram) + LENGTH(ram));
0
18 / 17 / 2
Регистрация: 29.03.2019
Сообщений: 234
14.07.2020, 17:13  [ТС] 14
Кстати, вот пример от libopencm3 который работает, если компилить и прошивать через консоль
0
Вложения
Тип файла: zip miniblink.zip (64.1 Кб, 3 просмотров)
18 / 17 / 2
Регистрация: 29.03.2019
Сообщений: 234
14.07.2020, 21:57  [ТС] 15
У них в проекте только ld скрипт. А стартап файла нет
0
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,113
Записей в блоге: 6
14.07.2020, 22:03 16
Цитата Сообщение от northcitizen Посмотреть сообщение
стартап файла нет
В архиве нет файлов libopencm3 но судя из map файла, векторы прерываний в файле libopencm3_stm32f4.a
1
18 / 17 / 2
Регистрация: 29.03.2019
Сообщений: 234
19.07.2020, 19:52  [ТС] 17
Остановился на том, стобы поставить System Workbech + OpenOCD. И не работает отладка

В debug configuration установлена галочка, чтобы конфигурационный файл генерировался автоматически. И с ним в консоль выпадает вот это

Open On-Chip Debugger 0.10.0+dev-00021-g524e8c8 (2019-04-12-08:33)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
srst_only separate srst_nogate srst_open_drain connect_assert_srst
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 1800 kHz
adapter_nsrst_delay: 100
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : clock speed 1800 kHz
Info : STLINK v2 JTAG v33 API v2 VID 0x0483 PID 0x3748
Info : Target voltage: 2.930000
Info : STM32F407VGTx.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : Listening on port 3333 for gdb connections
Info : accepting 'gdb' connection on tcp/3333
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x08000ff8 msp: 0x20020000
configuring PLL
adapter speed: 1800 kHz
Info : device id = 0x10016413
Info : flash size = 1024kbytes
shutdown command invoked


Info : dropped 'gdb' connection

Почитав разные форумы, понял, что проблема может быть в нем. Но когда я выбираю скрипт сам - stlink-v2-1.cfg из папки /openocd-0.10.0/tcl/interface то возникают другие ошибки, например, то что в скрипте не укзаана скорость передачи данных.
Поэтому добавлял в скрипт строку set CLOCK_FREQ 1800. Но ошибка не исчезает.

И еще заметил, что когда скрипт генерируется автоматически, то в нем есть такая строка source [find interface/stlink.cfg]. Я просто думал, что правильнее будет [find interface/stlink-v2-1.cfg], но это я поменять не могу, так как это из автогенерации.

Если есть, что подсказать буду примного благодарен. Сам я уже не знаю, что можно сделать
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.07.2020, 19:52

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

Libopencm3 usbhid то ли я дурак то ли железка нет прерывания
Доброго времени суток товарищи! Теперь по теме. Пытаюсь заставить stm32 f103, а точнее...

Пример 3ch АЦП и USB HID на libopencm3
И так я просто решил поделится примером. Так как очень сложно найти более менее толковые и близкие...

Как сохранить консольную прогу в Eclipse, чтобы запускать без Eclipse
Как сохранить написанное консольное приложение в Eclipse так, чтобы я мог запустить его без Eclipse.

Eclipse. Какое сочетание клавиш или как открыть только что закрытый в Eclipse файл?
Я уже задавал подобный вопрос и мне дали на него ответ Alt+стрелка влево. Решение довольно-таки...

Eclipse + AVR Eclipse + WINAVR
Начал изучать программирование AVR на Cи, для разработки проектов выбрал istypsi в связке с...

Чем отличается Eclipse IDE for Java EE Developers от Eclipse IDE for Java Developers?
чем отличается Eclipse IDE for Java EE Developers и Eclipse IDE for Java Developers? и какую лучше...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.