Jump to content
    

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

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

Share this post


Link to post
Share on other sites

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

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

void main()

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites

1 hour ago, poweroff said:

Добрый день.

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

syscalls.c

 

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

 

Share this post


Link to post
Share on other sites

4 minutes ago, poweroff said:

uart.h требует.

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

Share this post


Link to post
Share on other sites

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!
Спойлер

 

 

Share this post


Link to post
Share on other sites

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

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

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

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

 

Share this post


Link to post
Share on other sites

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

GPIOC->CRH |= 0x00000077;

GPIOC->ODR = 0x00000300;

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

 

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

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

 

STM32F100.ZIP

Share this post


Link to post
Share on other sites

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

GPIOC->CRH |= 0x00000033;

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

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

 

main.bin

Share this post


Link to post
Share on other sites

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

GPIOC->CRH |= 0x00000033;

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

 

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

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

GPIOC->CRH = 0x00000033;

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

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

Share this post


Link to post
Share on other sites

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

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


GPIOC->CRH = 0x00000033;

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...