Перейти к содержанию
    

arm-none-eabi-gcc && st-util && linux

Добрый день.

Приобрёл оценочную плату для stm32f100rb. Соответственно хочется поморгать светодиодами. Для этого создал проект, в котором :

-библиотека CMSIS от ST

-stm32_flash.ld от ST

-makefile


TARGET = main

DEVICE = STM32F10X_MD_VL

DEVICE_SRCS += Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_md_vl.s
SYSTEM_SRCS += Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c

INCLUDE_DIRS += -I .
INCLUDE_DIRS += -I ./Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x
INCLUDE_DIRS += -I ./Libraries/CMSIS/CM3/CoreSupport

LINKER_SCRIPT = stm32_flash.ld

ASFLAGS += -mcpu=cortex-m3 -mthumb
CFLAGS += -c -g -mcpu=cortex-m3 -mthumb -Wall -DSTM32F10X_MD_VL
LDFLAGS += -mthumb -mcpu=cortex-m3 

CC = arm-none-eabi-gcc
AS = arm-none-eabi-as
OBJCOPY = arm-none-eabi-objcopy
SIZE = arm-none-eabi-size

RM = rm

.PHONY: all

all: startup_stm32f10x_md_vl.o system_stm32f10x.o $(TARGET).o $(TARGET).elf $(TARGET).bin size write

startup_stm32f10x_md_vl.o:
	$(AS) $(ASFLAGS) $(DEVICE_SRCS) -o startup_stm32f10x_md_vl.o

system_stm32f10x.o:
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) $(SYSTEM_SRCS) -o system_stm32f10x.o

$(TARGET).o: 
	$(CC) $(CFLAGS) $(INCLUDE_DIRS) $(TARGET).c -o $(TARGET).o

$(TARGET).elf:
	$(CC) -T $(LINKER_SCRIPT) $(LDFLAGS) -o $(TARGET).elf $(TARGET).o startup_stm32f10x_md_vl.o system_stm32f10x.o

$(TARGET).bin:
	$(OBJCOPY) -Obinary $(TARGET).elf $(TARGET).bin

size: $(TARGET).elf
	$(SIZE) $(TARGET).elf

clean:
	$(RM) -f startup_stm32f10x_md_vl.o
	$(RM) -f system_stm32f10x.o
	$(RM) -f $(TARGET).o
	$(RM) -f $(TARGET).elf
	$(RM) -f $(TARGET).bin
	$(RM) -f $(TARGET).size

write:
	st-flash write $(TARGET).bin 0x08000000

-main.c

#include "stm32f10x.h"

   int main (void)
   {
        RCC->APB2ENR |= 0x00000010;
        GPIOC->CRH   |= 0x00000077;
        GPIOC->ODR    = 0x00000300;

	while(1)
	{
	}
   }

 

 

При выполнении make возникает следующая ошибка

make
arm-none-eabi-gcc -T stm32_flash.ld -mthumb -mcpu=cortex-m3  -o main.elf main.o startup_stm32f10x_md_vl.o system_stm32f10x.o
/usr/lib/gcc/arm-none-eabi/7.3.1/../../../arm-none-eabi/bin/ld: /usr/lib/gcc/arm-none-eabi/7.3.1/../../../arm-none-eabi/lib/thumb/v7-m/libc.a(lib_a-exit.o): in function `exit':
/tmp/building/package/build/arm-none-eabi/thumb/v7-m/newlib/libc/stdlib/../../../../../../../newlib/libc/stdlib/exit.c:64: undefined reference to `_exit'
collect2: error: ld returned 1 exit status
make: *** [Makefile:40: main.elf] Ошибка 1

Подскажите, как это вылечить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда он ругается ещё больше

make
arm-none-eabi-as -mcpu=cortex-m3 -mthumb Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_md_vl.s -o startup_stm32f10x_md_vl.o
arm-none-eabi-gcc -c -g -mcpu=cortex-m3 -mthumb -Wall -DSTM32F10X_MD_VL -I . -I ./Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x -I ./Libraries/CMSIS/CM3/CoreSupport Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c -o system_stm32f10x.o
arm-none-eabi-gcc -c -g -mcpu=cortex-m3 -mthumb -Wall -DSTM32F10X_MD_VL -I . -I ./Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x -I ./Libraries/CMSIS/CM3/CoreSupport main.c -o main.o
main.c:3:9: warning: return type of 'main' is not 'int' [-Wmain]
    void main ()
         ^~~~
arm-none-eabi-gcc -T stm32_flash.ld -mthumb -mcpu=cortex-m3  -o main.elf main.o startup_stm32f10x_md_vl.o system_stm32f10x.o
/usr/lib/gcc/arm-none-eabi/7.3.1/../../../arm-none-eabi/bin/ld: /usr/lib/gcc/arm-none-eabi/7.3.1/../../../arm-none-eabi/lib/thumb/v7-m/libc.a(lib_a-exit.o): in function `exit':
/tmp/building/package/build/arm-none-eabi/thumb/v7-m/newlib/libc/stdlib/../../../../../../../newlib/libc/stdlib/exit.c:64: undefined reference to `_exit'
collect2: error: ld returned 1 exit status
make: *** [Makefile:40: main.elf] Ошибка 1

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, poweroff said:

Добрый день.

Подскажите, как это вылечить.

syscalls.c

 

Вот этот файл к проекту подцепите.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, dimka76 сказал:

syscalls.c 3 kB · 0 downloads

 

Вот этот файл к проекту подцепите.

 

uart.h требует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 минут назад, dimka76 сказал:

Закоментируйте в нем #include "uart.h"

Пришлось ещё всю функцию int _write(int file, char *ptr, int len) закоментить, но всё с компилировалось. Правда после прошивки, светодиоды так и не загорелись.

st-flash write main.bin 0x08000000
st-flash 1.5.1
2020-06-11T15:15:46 INFO common.c: Loading device parameters....
2020-06-11T15:15:46 INFO common.c: Device connected is: F1 Medium/Low-density Value Line device, id 0x10016420
2020-06-11T15:15:46 INFO common.c: SRAM size: 0x2000 bytes (8 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
2020-06-11T15:15:46 INFO common.c: Attempting to write 3716 (0xe84) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08000c00 erased
2020-06-11T15:15:46 INFO common.c: Finished erasing 4 pages of 1024 (0x400) bytes
2020-06-11T15:15:46 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2020-06-11T15:15:46 INFO flash_loader.c: Successfully loaded flash loader in sram
  4/4 pages written
2020-06-11T15:15:47 INFO common.c: Starting verification of write complete
2020-06-11T15:15:47 INFO common.c: Flash written and verified! jolly good!
Спойлер

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 часов назад, poweroff сказал:

Подскажите, как это вылечить.

Похоже, у вас подключился библиотечный стартап. Добавьте к ключам линкера ключик -nostartfiles.

Также полезно дать компилятору ключики -fno-exceptions -fno-rtti, чтобы не тянулись такие тяжёлые штуки. Эти ключи не всегда помогают, но лишними не будут.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 часов назад, poweroff сказал:

GPIOC->CRH |= 0x00000077;

GPIOC->ODR = 0x00000300;

Даже когда скомпилится диоды не загорятся. В режиме порта Open Drain выход в 1 установлен. Как это может зажечь что-то?

 

Гляньте приложенный проект. Там ключи компилятора подобраны чтобы по максимуму отключить всё ненужное библиотечное и на CMSIS кодить. make должен на win и linux собрать.

Ну и диоды ваши, скорее всего, замигают. Бонусом это же и в Keil с Iar соберётся.

 

STM32F100.ZIP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавил ключи компилятору и линковщику. так же заменил код на.

GPIOC->CRH |= 0x00000033;

Результат тот же .

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

 

main.bin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 минуты назад, poweroff сказал:

GPIOC->CRH |= 0x00000033;

И что это изменило? При включении питания было состояние 4. 4 |= 3 получаются те же 7. Open Drain.

 

38 минут назад, poweroff сказал:

Вот бинарник который получается,

3 кB код зажигания светодиода? Вы серьёзно? Я же кидал проект. 500 байт бинарник, из которых 256 таблица векторов прерываний.

43 минуты назад, poweroff сказал:

вначале и в конце почему то пустой

В начале всё в порядке, там таблица вектров прерываний.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 минут назад, VladislavS сказал:

И что это изменило? При включении питания было состояние 4. 4 |= 3 получаются те же 7. Open Drain.

 

3 кB код зажигания светодиода? Вы серьёзно? Я же кидал проект. 500 байт бинарник, из которых 256 таблица векторов прерываний.

В начале всё в порядке, там таблица вектров прерываний.

Действительно, ступил. Исправил на

GPIOC->CRH = 0x00000033;

и всё заработало.

Всем спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 6/12/2020 at 8:20 PM, poweroff said:

Действительно, ступил. Исправил на


GPIOC->CRH = 0x00000033;

и всё заработало.

Всем спасибо.

Почему не подключить LL драйвера от ST? Это же не HAL который тяжелый и громоздкий а по сути прямой доступ к регистрам, только в более понятной форме. И как раз таких "недоразумений" как у Вас позволил бы избежать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...