Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

"Метод Монте-Карло"

Ввиду того, что мануал на STM32F103 очень уж жирный, я решил для начала методом научного тыка Монте-Карло поковырять разный чужой код.
И вот такой фигвам: если чужой код для мигания диодами работал, то код, использующий библиотеку stm32f10x_stdperiph, ни в какую не хочет.

Вот такой у меня Makefile:

BIN=testproject

TOOLS_PATH=/usr/arm-none-eabi
TOOLS_PREFIX=arm-none-eabi-


CFLAGS=-c -mcpu=cortex-m3 -mthumb -Wall  -mapcs-frame -D__thumb2__=1 -O0
CFLAGS+=-msoft-float -gdwarf-2 -mno-sched-prolog -fno-hosted -mtune=cortex-m3
CFLAGS+=-march=armv7-m -mfix-cortex-m3-ldrd -ffunction-sections -fdata-sections
CFLAGS+=-I./cmsis -I./stm32_lib -I.

LDFLAGS=-static -mcpu=cortex-m3 -mthumb -mthumb-interwork -Wl,--start-group
LDFLAGS+=-L$(TOOLS_PATH)/lib/thumb2 -lc -lg -lstdc++ -lsupc++ -lgcc -lm
LDFLAGS+=-Wl,--end-group -Xlinker -Map -Xlinker $(BIN).map -Xlinker
LDFLAGS+=-T ./stm32_lib/device_support/gcc/stm32f100rb_flash.ld -o $(BIN)

ASFLAGS=-mcpu=cortex-m3 -I./cmsis -I./stm32_lib -gdwarf-2 -gdwarf-2


CC=$(TOOLS_PREFIX)gcc
AS=$(TOOLS_PREFIX)as
SIZE=$(TOOLS_PREFIX)size

CMSISSRC=./cmsis/core_cm3.c

STM32_LIBSRC=stm32_lib/system_stm32f10x.c
#~ STM32_LIBSRC+=stm32_lib/misc.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_adc.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_bkp.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_can.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_cec.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_crc.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_dac.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_dbgmcu.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_dma.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_exti.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_flash.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_fsmc.c
STM32_LIBSRC+=stm32_lib/stm32f10x_gpio.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_i2c.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_it.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_iwdg.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_pwr.c
STM32_LIBSRC+=stm32_lib/stm32f10x_rcc.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_rtc.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_sdio.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_spi.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_tim.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_usart.c
#~ STM32_LIBSRC+=stm32_lib/stm32f10x_wwdg.c

SRC=main.c

OBJ=system_stm32f10x.o startup_stm32f10x_md_vl.o

#~ OBJ+=misc.o
#~ OBJ+=stm32f10x_adc.o
#~ OBJ+=stm32f10x_bkp.o
#~ OBJ+=stm32f10x_can.o
#~ OBJ+=stm32f10x_cec.o
#~ OBJ+=stm32f10x_crc.o
#~ OBJ+=stm32f10x_dac.o
#~ OBJ+=stm32f10x_dbgmcu.o
#~ OBJ+=stm32f10x_dma.o
#~ OBJ+=stm32f10x_exti.o
#~ OBJ+=stm32f10x_flash.o
#~ OBJ+=stm32f10x_fsmc.o
OBJ+=stm32f10x_gpio.o
#~ OBJ+=stm32f10x_i2c.o
#~ OBJ+=stm32f10x_it.o
#~ OBJ+=stm32f10x_iwdg.o
#~ OBJ+=stm32f10x_pwr.o
OBJ+=stm32f10x_rcc.o
#~ OBJ+=stm32f10x_rtc.o
#~ OBJ+=stm32f10x_sdio.o
#~ OBJ+=stm32f10x_spi.o
#~ OBJ+=stm32f10x_tim.o
#~ OBJ+=stm32f10x_usart.o
#~ OBJ+=stm32f10x_wwdg.o

OBJ+=main.o

all: ccmsis cstm32_lib cc ldall
	$(SIZE) -B $(BIN)

ccmsis: $(CMSISSRC)
	$(CC) $(CFLAGS) $(CMSISSRC)

cstm32_lib: $(STM32_LIBSRC)
	$(CC) $(CFLAGS) $(STM32_LIBSRC)
	$(AS) $(ASFLAGS) ./stm32_lib/device_support/gcc/startup_stm32f10x_md_vl.S -o startup_stm32f10x_md_vl.o

cc: $(SRC)
	$(CC) $(CFLAGS) $(SRC)

ldall:
	$(CC) $(OBJ) $(LDFLAGS)

.PHONY: clean load

clean:
	rm -f $(OBJ) $(BIN).map

load: $(BIN)
	st-flash write $(BIN) 0x08000000


Вот такой main.c:

#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

/*
void Delay(unsigned int d){
	unsigned long delay = d * 1000;
	while(delay) delay--;
}*/

static __IO uint32_t TimingDelay;
void Delay(__IO uint32_t nTime){
	TimingDelay = nTime;
	while(TimingDelay != 0);
}

int main(void) {
	GPIO_InitTypeDef GPIOC_init_params;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	GPIOC_init_params.GPIO_Pin = GPIO_Pin_12;
	GPIOC_init_params.GPIO_Speed = GPIO_Speed_50MHz;
	GPIOC_init_params.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOC, &GPIOC_init_params);

	GPIO_SetBits(GPIOC, GPIO_Pin_12);
	GPIOC->BSRR = GPIO_Pin_12;
	__enable_irq();
	while(1){
		GPIOC->ODR ^= GPIO_Pin_12;
		Delay(50);
		GPIOC->ODR ^= GPIO_Pin_12;
		Delay(100);
	}
}


void SysTick_Handler(void){
	if (TimingDelay != 0x00)
		TimingDelay--;
}


Файл компилируется, загружается, но ничего не происходит. Увы.

А еще иногда при попытке загрузки (компиляция при этом проходит успешно) выползают вот такие странные сообщения:

st-flash write testproject 0x02
2012-10-11T16:31:59 INFO src/stlink-common.c: Loading device parameters....
2012-10-11T16:31:59 INFO src/stlink-common.c: Device connected is: F1 Medium-density device, id 0x20036410
2012-10-11T16:31:59 INFO src/stlink-common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
stlink_sram_flash() == -1

или

st-flash write testproject 0x08000000
2012-10-11T16:29:49 INFO src/stlink-common.c: Loading device parameters....
2012-10-11T16:29:49 INFO src/stlink-common.c: Device connected is: F1 Medium-density device, id 0x20036410
2012-10-11T16:29:49 INFO src/stlink-common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
2012-10-11T16:29:49 INFO src/stlink-common.c: Attempting to write 91407 (0x1650f) bytes to stm32 address: 134217728 (0x8000000)
2012-10-11T16:29:49 WARN src/stlink-common.c: unaligned addr or size
stlink_fwrite_flash() == -1
make: *** [load] Ошибка 255



Да уж, надо искать приличную книжку по программированию этой хрени, т.к. по чужим неработающим примерам не получается ничего понять.
Tags: stm32, железяки, рукожопие
Subscribe

  • Чем бы таким заменить STM32F072C8T6?

    Полез сейчас на али цены посмотреть, а там… В среднем уже по 600-700 рублей за штучку просят! Вообще охамели. И это - гарантированно БУшные ведь!.. А…

  • Релюшки на CAN-шине

    Закончил с прошивкой для новой железяки. Как "наследница" USB-CAN переходника, она умеет все то же самое + несколько специфичных вещей (опрос…

  • Дохлый SSD

    Писал уже о китайском SSD, сдохшем за полтора месяца работы. Вот он, герой: Сегодня у нас опять работы с оптоволоконным спектрографом на цейссе,…

promo eddy_em august 17, 2019 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 0 comments