LDM-BB_K1986BE92QI + ST-LINK v2 + Keil5.22 – мигаем светодиодом по нажатию кнопки

16.12.2016
By

LDM – Systems разработали отличную плату на базе РОССИЙСКОГО K1986ВЕ92 микропроцессора от Миландра (Ядро ARM Cortex M3). К сожалению, несмотря на весьма почтенный возраст микроконтроллера (около 7 лет) – не очень много материалов в сети с информацией, как его можно использовать. На форумах производитель пишет, что не до популяризации, «все ушли на фронт» :) Вероятно в том числе в самом прямом смысле. :)

Тем не менее разработчики процессора и партнеры из «LDM Системс» сделали очень немало для того, чтобы данное решение могло стать популярным.

Вот их плата:

При цене в районе пары тысяч и наличии на борту возможности загрузки откомпилированой прошивки через USB порт через популярный драйвер СР2102, решение становится конкурентным предложением для использования не только в серьезных взрослых приложениях, но и в хоббийных разработках – с удовольствием можно шепнуть комунить – СДЕЛАНО В СССР (России)!

При поиске в сети также нашлось несколько книг (ссылки в конце статьи) по программированию данного процессора (правда на более серьезных отладочных платах и недешевых программаторах), поэтому постараемся двинуть технику еще ближе к народу – показать, как можно начать мигать светодиодом на совсем недорогом железе и программаторе на базе китайских клонов ST-LINK v2.

Итак поехали:

Ставим бесплатную оценочную версию Keil для ARM (MDK-ARM) (версия для винды к сожалению).

После установки качаем поддержку для процессора K1986ВЕ9х (файл Milandr.MDR1986BExx.1.4.2.pack) и простым нажатием устанавливаем ее в Keil.

По прекрасному тексту, написанному Васильевым, Лашмановым и Пантюшиным ( страница 20-27)  создаем новый проект в Keil.

В книге описано подключение другого программатора, поэтому для ST-Link v2 будут следующие небольшие изменения в настройках:

 

Как подключаем ST-Link v2 к плате:

в качестве программатора выступает клон ST-Link v2 от недорогой отладочной платы XNucleo-F302R8

по выводам он имеет стандартные выводы для SW(Serial Wire) интерфейса

Схема подключения ниже:

 

Почему надо подключить 10,11,12 ножки платы к GND,GND, 3,3V соотвественно:

читаем документацию к микроконтроллеру:

 

на странице 35 написано, что необходимо выставить уровни напряжения для программирования через JTAG/A в 001 (строка 2 таблицы 9). что мы и делаем, пользуясь схемой платы и документацией:

 

Если все сделали правильно, то  Keil видит Вашу плату через ST-Link V2

Теперь начинаем формировать main.c для того, чтобы по нажатию клавиши SA4 получили свечение светодиода VD7 на плате ( пример переделан из примера 4.1 книги Васильева, Лашманова, Пантюшина (гран рахмат коллегам за непростой труд написания серьезной книги еще раз!)

#include "MDR32Fx.h"
#include "core_cm3.h"
#include "MDR32F9Qx_config.h"
#include "system_MDR32F9Qx.h"
#include "MDR32F9Qx_rst_clk.h"
#include "MDR32F9Qx_port.h"

#define VD7 PORT_Pin_2//define pin 2  to LED VD7
#define SA4 PORT_Pin_5//define pin 5 to Button SA4

static PORT_InitTypeDef PortInit; //init structure PortInit

int main(){
	RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTD, ENABLE);//switch on port d clocking
	RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTC, ENABLE);//switch on port c clocking
	//init port D like input
	PortInit.PORT_OE = PORT_OE_IN; // port mode -> input
	PortInit.PORT_FUNC = PORT_FUNC_PORT; // port mode
	PortInit.PORT_MODE = PORT_MODE_DIGITAL; // digital port mode
	PortInit.PORT_SPEED = PORT_SPEED_SLOW;  // choose slow mode for front
	PortInit.PORT_Pin = (SA4); // pin number 5 (PD5) which is connected to SA4 button
	PORT_Init(MDR_PORTD, &PortInit); // init port
	// init port C like output
	PortInit.PORT_OE = PORT_OE_OUT; // port mode -> output
	PortInit.PORT_FUNC = PORT_FUNC_PORT; // port mode
	PortInit.PORT_MODE = PORT_MODE_DIGITAL; // digital port mode
	PortInit.PORT_SPEED = PORT_SPEED_SLOW; // choose slow mode for front
	PortInit.PORT_Pin = (VD7); // pin number 2 (PC2) which is connected to VD7 LED
	PORT_Init(MDR_PORTC, &PortInit); // port C init with defined parameters
	PORT_ResetBits(MDR_PORTC, VD7); //switch off VD7 on start
		while(1){ // endless cycle
			if (PORT_ReadInputDataBit(MDR_PORTD, SA4) == 0) // if button pressed
				{
				PORT_SetBits(MDR_PORTC, VD7); // LED on
				}
			else
				{
				PORT_ResetBits(MDR_PORTC, VD7); // LED off
				}
		}
}

Почему так подключаем порты D и C – смотрим на схеме платы:

результат – видео свечения светодиода по нажатию кнопки.

VID_20161216_101331

 

Книги:

Благодаров А.В. Программирование микроконтролеров 1986ВЕ9х , группа ВК , ссылки на тексты программ – примеров для книги на сайте Рязанского Государственного Радиотехнического Университета

А.С. Васильев, О.Ю.Лашманов, А.В.Пантюшин Основы программирования микроконтроллеров, Университет ИТМО

 

Большое спасибо за материалы форумчанам Миландра:

и особенно ruslan.h и strannic 

 

 

 

Добавить комментарий