Понравилась мне платформа 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:CooCoxCoIDE» дабы избежать проблем с кириллицей в путях. Затем устанавливаем компилятор. Я не планирую использовать этот компилятор для других целей, поэтому путь установки выбрал «c:CooCoxGNU Tools ARM Embedded4.8 2014q3».
Запускаем CoIDE, выбираем пункт меню «Project – Select Toolchain Path»:
и указываем путь к компилятору «C:CooCoxGNU Tools ARM Embedded4.8 2014q3bin».
Все, можно писать программы.
Но мне хотелось использовать библиотеку 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:CooCoxCoIDEworkspace».
В запущенном нами CoIDE, выбираем пункт меню «File – Open File…» и в папке «C:CooCoxCoIDEworkspaceNucleo_blink_led» выбираем файл «Nucleo_blink_led.coproj».
Наш проект открылся и готов к компиляции.
Выбираем пункт меню «Project – Build» (кнопку Build на панели инструментов или клавишу F7). В появившейся консоли мы должны получить сообщение «BUILD SUCCESSFUL».
Далее есть несколько путей – мы можем, как и в случае с online IDE, скопировать получившийся файл «Nucleo_blink_led.bin» из папки «c:CooCoxCoIDEworkspaceNucleo_blink_ledNucleo_blink_ledDebugbin» на нашу плату, либо можем запустить режим отладки, выбрав пункт меню «Debug — Debug» (кнопку «Start Debug» на панели инструментов или Ctrl+F5), либо просто прошить контроллер готовой программой, выбрав пункт меню «Flash – Program Download» (кнопку «Download Code to Flash» на панели инструментов).
В результате любого из указанных действий на нашей плате должен весело замигать зеленый светодиод LD2.
На этом можно было бы и остановиться, но мигать одним светодиодом скучно.
Поэтому соберем не сложную схему с семисегментным индикатором CA56-12SRWA. Ноги индикатора с номерами 12, 9, 8, 6 управляют включением разрядов индикатора 1, 2, 3, 4 при подаче на них высокого напряжения. Остальные ноги отвечают за отдельные сегменты каждого знакоместа и точки и должны подключаться через токоограничивающий резистор к выходам с низким уровнем напряжения. Сегменты управляются одновременно во всех разрядах, поэтому будем делать динамическую индикацию.
#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» в нашем проекте на новую и перекомпилировать проект.
Автор: ragman