Pull to refresh

Переход из online в offline IDE при программировании Nucleo-F401RE

Reading time4 min
Views23K
Понравилась мне платформа Nucleo и приобрел я плату Nucleo-F401RE.

Желания углубляться во внутреннее устройство микроконтроллера не было и мое внимание привлекла библиотека mbed. В этой библиотеке заявлена поддержка данной платы.

На Хабре уже есть публикации по быстрому старту Nucleo + mbed («Быстрый старт ST Nucleo-F401 + краткое руководство», «STM32 Nucleo. Подключаем TFT LCD на базе чипа ILI9341»). Но все примеры даются для online IDE. Но такой вариант мне не очень понравился и я стал искать настольную IDE.

Попробовал Eclipse по статье с сайта mbed.org. Но так как пример написан для другого контроллера, а адаптировать инструкцию для STM у меня не получилось, то этот вариант отпал.

Тогда стал смотреть в сторону CooCox CoIDE. К сожалению, CoIDE официально не поддерживает конроллер STM32F401RE. Но пробовать, так пробовать.

Итак, скачиваем CoIDE. Внизу страницы есть две ссылки: по первой загружается CoCenter. Это такой лаунчер, который позволяет управлять установкой и обновлением всех предлагаемых сайтом CooCox программ. Мне нужна была только CoIDE, поэтому я воспользовался второй ссылкой. Данная программа работает только в среде Windows, но меня это устроило.

В CoIDE интегрирован CoBuilder и CoDebugger. А вот компилятор отсутствует и его необходимо установить отдельно.
На этой же странице есть ссылка на инструкцию по настройке внешнего компилятора, где рекомендуется установка GCC ARM Embedded. Отсюда загружаем установочный пакет для Windows.

Далее переходим к установке. Устанавливаем CoIDE. Я выбрал путь для установки «c:\CooCox\CoIDE\» дабы избежать проблем с кириллицей в путях. Затем устанавливаем компилятор. Я не планирую использовать этот компилятор для других целей, поэтому путь установки выбрал «c:\CooCox\GNU Tools ARM Embedded\4.8 2014q3\».
Запускаем CoIDE, выбираем пункт меню «Project – Select Toolchain Path»:


и указываем путь к компилятору «C:\CooCox\GNU Tools ARM Embedded\4.8 2014q3\bin».


Все, можно писать программы.

Но мне хотелось использовать библиотеку mbed. Вот здесь нам и пригодятся предыдущие статьи по быстрому старту. Заходим на сайт и выбираем любой из имеющихся у вас проектов. Я буду работать с самым любимым проектом «Nucleo_blink_led».



Выбираем данный проект в дереве и, нажав правую кнопку мыши, в открывшемся меню выбираем пункт «Export Program…». Далее указываем целевую платформу («ST Nucleo F401RE») и нашу IDE («CooCox CoIDE»).



Нажимаем кнопку «Export» и получаем архив «Nucleo_blink_led_coide_nucleo_f401re.zip». В архиве будет папка с названием нашего проекта «Nucleo_blink_led», которую необходимо распаковать в папку с проектами CoIDE. В моем случае это «c:\CooCox\CoIDE\workspace\».
В запущенном нами CoIDE, выбираем пункт меню «File – Open File…» и в папке «C:\CooCox\CoIDE\workspace\Nucleo_blink_led» выбираем файл «Nucleo_blink_led.coproj».



Наш проект открылся и готов к компиляции.



Выбираем пункт меню «Project – Build» (кнопку Build на панели инструментов или клавишу F7). В появившейся консоли мы должны получить сообщение «BUILD SUCCESSFUL».



Далее есть несколько путей – мы можем, как и в случае с online IDE, скопировать получившийся файл «Nucleo_blink_led.bin» из папки «c:\CooCox\CoIDE\workspace\Nucleo_blink_led\Nucleo_blink_led\Debug\bin\» на нашу плату, либо можем запустить режим отладки, выбрав пункт меню «Debug — Debug» (кнопку «Start Debug» на панели инструментов или Ctrl+F5), либо просто прошить контроллер готовой программой, выбрав пункт меню «Flash – Program Download» (кнопку «Download Code to Flash» на панели инструментов).



В результате любого из указанных действий на нашей плате должен весело замигать зеленый светодиод LD2.

На этом можно было бы и остановиться, но мигать одним светодиодом скучно.

Поэтому соберем не сложную схему с семисегментным индикатором CA56-12SRWA. Ноги индикатора с номерами 12, 9, 8, 6 управляют включением разрядов индикатора 1, 2, 3, 4 при подаче на них высокого напряжения. Остальные ноги отвечают за отдельные сегменты каждого знакоместа и точки и должны подключаться через токоограничивающий резистор к выходам с низким уровнем напряжения. Сегменты управляются одновременно во всех разрядах, поэтому будем делать динамическую индикацию.
Код main.c для динамической индикации.
#include "mbed.h"

#define pause 0.005

void disp(char n);

DigitalOut seg1(D8);
DigitalOut seg2(D3);
DigitalOut seg3(D5);
DigitalOut seg4(D7);
DigitalOut seg5(D9);
DigitalOut seg6(D2);
DigitalOut seg7(D4);
DigitalOut seg8(D6); //dp

DigitalOut dig1(D10);
DigitalOut dig2(D11);
DigitalOut dig3(D12);
DigitalOut dig4(D13);

int main() {
	dig1=0; // Выключаем разряд 1 индикатора
	dig2=0; // Выключаем разряд 2 индикатора
	dig3=0; // Выключаем разряд 3 индикатора
	dig4=0; // Выключаем разряд 4 индикатора
	seg8=1; // Выключаем точку во всех разрядах
	
	// Основной цикл
    while(1) {
    	disp('0');		// Формируем цифру '0'
    	dig1=1;			// Подаем высокий уровень на первый разряд
    	wait(pause);	// ждем
    	dig1=0;			// выключаем первый разряд

    	disp('1');		// Формируем цифру '1'
		dig2=1;         // Подаем высокий уровень на второй разряд
		wait(pause);    // ждем
		dig2=0;         // выключаем второй разряд

		disp('2');		// Формируем цифру '2'
		dig3=1;         // Подаем высокий уровень на третий разряд
		wait(pause);    // ждем
		dig3=0;         // выключаем третий разряд

		disp('3');		// Формируем цифру '3'
		dig4=1;         // Подаем высокий уровень на четвертый разряд
		wait(pause);    // ждем
		dig4=0;         // выключаем четвертый разряд
    }
}

// Подпрограмма формирования цифр на разрядаз индикатора
void disp(char n)
{
	switch (n) {
		case '0':	// Для отображения цифры '0'
			seg1=0;	// Сегмент a подтягиваем к низкому уровню (будет светиться)
			seg2=0;	// Сегмент b подтягиваем к низкому уровню (будет светиться)
			seg3=0;	// Сегмент c подтягиваем к низкому уровню (будет светиться)
			seg4=0;	// Сегмент d подтягиваем к низкому уровню (будет светиться)
			seg5=0;	// Сегмент e подтягиваем к низкому уровню (будет светиться)
			seg6=0;	// Сегмент f подтягиваем к низкому уровню (будет светиться)
			seg7=1;	// Сегмент g подтягиваем к высокому уровню (будет потушен)
			break;
		case '1':
			seg1=1;
			seg2=0;
			seg3=0;
			seg4=1;
			seg5=1;
			seg6=1;
			seg7=1;
			break;
		case '2':
			seg1=0;
			seg2=0;
			seg3=1;
			seg4=0;
			seg5=0;
			seg6=1;
			seg7=0;
			break;
		case '3':
			seg1=0;
			seg2=0;
			seg3=0;
			seg4=0;
			seg5=1;
			seg6=1;
			seg7=0;
			break;
		default:
			seg1=1;
			seg2=1;
			seg3=1;
			seg4=1;
			seg5=1;
			seg6=1;
			seg7=1;
			break;
	}
}

Все комментарии есть в тексте программы.

Прошиваем контроллер и наш индикатор отображает текст «0123».

Программа не претендует на совершенство и, при необходимости, на сайте mbed.org можно найти готовые библиотеки для управления такими индикаторами.

В результате я получил IDE для работы с Nucleo и библиотекой mbed без использования сети интернет.
В моем проекте использовалась библиотека mbed ревизии 91. При обновлении библиотеки, мы можем обновить наш проект «Nucleo_blink_led» на сайте developer.mbed.org/compiler и повторно экспортировать его к себе на компьютер. Затем нам нужно просто обновить папку «mbed» в нашем проекте на новую и перекомпилировать проект.
Tags:
Hubs:
Total votes 8: ↑8 and ↓0+8
Comments13

Articles