kolhozing.ru
В началоАвторемонтМоделизмОргтехникаСад и огородЭлектроникаФорум

Программатор ST-Link/V2 и отладочная плата Olimex STM32-H103

Начнем с программатора. Программатор является клоном программатора ST-Link/V2 компании STMicroelectronics. Покупался тут, хотя надо сказать, не самый лучший вариант. Комплект поставки минималистичный: сам программатор, наклейка с названием и четыре провода для подключения МК. Корпус типа "флешка", с одной стороны USB-A, с другой разъем 2х5. Рекомендую сразу наклеить (как у меня) распиновку этого разъема. Как и оригинал, программатор обеспечивает подключение по интерфейсам JTAG/SWD к STM32 и SWIM к STM8. При работе весело мигает синим светодиодом. Корпус крупноват и если порты расположены плотно, например, на ноутбуке, могут быть проблемы с подключением, будет мешать соседним устройствам.

Но у меня он все равно подключен в удлинитель, так что размеры не мешают. По работе сказать в целом нечего. Определяется как оригинальный, МК прошивает через SWD. Собран на том же МК, что и оригинальный, например с платы Discovery, т.е. STM32F103C8.

$ lsusb | grep -i stm
Bus 001 Device 017: ID 0483:3748 STMicroelectronics ST-LINK/V2

Теперь об отладочной плате STM32-H103. Производит ее Болгарская компания Olimex. На Aliexpress представлена слабо, да и цена с нынешним курсом не гуманная, в Москве можно найти раза в полтора дешевле из старых запасов. Новые, под заказ, конечно уже сильно дороже. На плате установлен МК STM32F103RB, схема платы есть на сайте производителя, так же как и документация и примеры кода.

Характеристики МК, установленного на плате:

  • ядро Cortext-M3,
  • тактовая частота 72МГц,
  • 128Кб ПЗУ (flash),
  • 20Кб ОЗУ (SRAM),
  • три таймера «General purpose»,
  • один «Advanced» таймер,
  • по два SPI и I2C,
  • три USART,
  • USB и CAN (к сожалению, одновременно их задействовать не получится),
  • два 12-битных 16-канальных АЦП.
Кроме этого, как и для всего семейства F103, МК имеет отладочный интерфейс SWD/JTAG, 7-канальный ПДП, два watchdog'а, 24-битный системный таймер, блок вычисления CRC и уникальный для каждого экземпляра МК 96-битный идентификатор.

На представленной плате расположны:

  • Две кнопки, Reset и User (PA0),
  • Два светодиода, Power и Stat (PC12),
  • USB-интерфейс с датчиком подключения (PC4) и управляемой подтяжкой D+ к Vcс (PC11),
  • 20-контактный разъем JTAG,
  • Два 26-контактных разъема с GPIO и питанием.

Детектор подключения USB и светодиод подключены через перемычки, разорвав которые можно соответствующие выводы МК использовать по своему усмотрению. Кроме того, на плате предусмотрена возможность подключить батарейку для резервного питания МК. Для выбора способа загрузки есть две перемычки BOOT0 и BOOT1, которые можно подключить к High или Low, по-умолчанию подключено к Low, т.е. Log0 (загрузка из flash-памяти). Для тактирования МК есть генератор с частотой 8МГц. В отличии от платы Discovery контакты разъемов не подписаны и под рукой надо держать распечатку из описания платы.

К программатору ST-Link плата подключатеся четыремя проводами: TMS, TCK, GND, 3.3V. Если плата подключена к USB или иному источнику питания, четвертый провод не нужен.

В целом, плата является неплохим вариантом, что бы попробовать подключение по USB. В библиотеке libopencm3 есть примеры реализации разных классов USB-устройств, которые можно запустить на этой отладочной плате.

На фотографии плата подключена к программатору, попробуем прошить в нее программу, которая будет мигать светодиодом и выдавать меандр на двух выводах GPIO. Makefile будет стандартный

BINARY = test
DEVICE = stm32f103rb

LIBDIR = $(HOME)/stm32/libopencm3
STLINK = $(HOME)/stm32/stlink
CC = arm-none-eabi-gcc
OBJCOPY = arm-none-eabi-objcopy

FLASH = $(STLINK)/st-flash

ifndef CFLAGS
	CFLAGS = -Os
endif
CFLAGS += -mthumb -I$(LIBDIR)/include/

LDFLAGS += -Wl,--gc-sections --static -nostartfiles -lc -lgcc -lnosys -lm
LDFLAGS += -Wl,-Map,$(BINARY).map
LDFLAGS += -L$(LIBDIR)/lib/

LDSCRIPT ?= $(BINARY).ld

SOURCES=$(wildcard *.c *.cpp)
HEADERS=$(wildcard *.h)

all: $(BINARY).bin

SRCLIBDIR = $(LIBDIR)
include $(LIBDIR)/ld/Makefile.linker
LDFLAGS += -T$(LDSCRIPT)

$(BINARY).bin: $(BINARY).elf
	$(OBJCOPY) -Obinary $(BINARY).elf $(BINARY).bin
$(BINARY).elf: $(SOURCES) $(HEADERS) $(LDSCRIPT)
	$(CC) -o $(BINARY).elf $(SOURCES) $(CFLAGS) $(LDFLAGS)
flash: $(BINARY).bin
	$(FLASH) --reset write $(BINARY).bin 0x08000000
clean:
	rm -fv $(LDSCRIPT) $(BINARY).elf $(BINARY).bin $(BINARY).map *.o
Хотя для проекта из одного файла можно было обойдись и без Makefile.
 
Теперь сам код, который по сравнению с подобным от F030 претерпел небольшие изменения, связанные с особенностями тактирования этого МК.
#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/gpio.h>
#include <libopencm3/cm3/nvic.h>
#include <libopencm3/cm3/systick.h>

int cnt = 0;

/* Called when systick fires */
void sys_tick_handler(void)
{
	if( cnt )
		gpio_toggle(GPIOC, GPIO0);
	else
		gpio_toggle(GPIOC, GPIO1);
	cnt = 1 - cnt;

	gpio_toggle(GPIOC, GPIO12);

}

/* Set up timer to fire freq times per second */
static void systick_setup(int freq)
{
	systick_set_clocksource(STK_CSR_CLKSOURCE_AHB);
	/* clear counter so it starts right away */
	STK_CVR = 0;

	systick_set_reload(rcc_ahb_frequency / freq);
	systick_counter_enable();
	systick_interrupt_enable();
}

/* set STM32 to clock by 48MHz from HSI oscillator */
static void clock_setup(void)
{
	rcc_clock_setup_in_hsi_out_48mhz();

	/* Enable clocks to the GPIO subsystems */
	rcc_periph_clock_enable(RCC_GPIOC);
//	rcc_periph_clock_enable(RCC_GPIOA);
}

static void gpio_setup(void)
{
	// STM 103
	gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_10_MHZ, GPIO_CNF_OUTPUT_PUSHPULL , GPIO0 | GPIO1 | GPIO12 );
}

static void mco_setup(void)
{
	/* Enable system clock output on pin PA8 (so it can be checked with a scope) */
	rcc_set_mco(RCC_CFGR_MCO_SYSCLK);
}

int main(void)
{
	clock_setup();
	gpio_setup();
	mco_setup();

	systick_setup(8);

	/* Do nothing in main loop */
	while (1);
}
Компилируем и прошиваем в МК. Если все правильно, то светодиод будет мигать 4 раза в секунду, а на выходах GPIOC0 и GPIOC1 будет меандр с частотой 2Гц, сдвинутый на 125мс друг относительно друга. На картинке ниже скриншот логического анализатора, каналы 0,1 и 2 подключены к GPIOC0, GPIOC1 и GPIO12 соответственно.


рубрика: электроника
Комментарии
Ваше имя:

Ваше мнение:

введите код:
Пользовательский поиск
 
RSS-канал
Подписка по эл.почте
 
Реклама
 
Рубрики
 
Популярные метки