Разработка электронных устройств

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

Прототипы и серийное производство

Разработка и изготовление корпусов и передних панелей. Разработка и изготовление печатных платы любой сложности. Монтаж печатных плат.

Написание программного обеспечения

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

Разработка механизмов различной степени сложности

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

Создание, продвижение и обслуживание сайтов

Написание php/perl/c кода или использование cms. Собственный сервер для размещения Ваших проектов под любые нагрузки. Поддержание сайта в актуальности и продвижение в поисковых системах.

 
 

STM32F4Discovery и .NET MicroFramework, установка и использование

Автор: от 26 Январь 2013 года, просмотров 5034

Google

Начну с того, что попалась мне в руки отладочная плата STM32F4Discovery, и попробовав что то на ней сделать, хотя бы просто помигать светодиодом, я ударился о громадную стену. В примерах, которые предлагались на сайте всё что необходимо конечно же было, но объём необходимого кода не много пугал.

Затем на Хабре наткнулся на статью посвященую .Net MicroFramework, так же не много погуглив заметил статью об установке данного чуда программной мысли на отладочную плату (просто для тестов). Но как оказалось вполне себе не плохо работает эта новая штука. В сети уже можно найти подобный проект - Netduino.

Теперь подробнее о том как всё это реализовать. Забегая вперёд я расскажу, как написать маленькую программку, как считать данные с порта, как их вывести, как пользоваться АЦП, а так же написание многопоточных приложений, а так же обработку прерываний. Для начала расскажу о том, что нам понадобится.

  1. Отладочная плата STM32F4Discovery.
  2. Два кабеля Mini USB и Micro USB (первый для загрузки бутлоадера и питания платы).
  3. STM32 ST-LINK Utility - необходима для заливка бутлоадера. Программу можно взять о официальном сайте STMicroelectronics.
  4. Образы бутлоатеда и CLR (stm32f4discovery.zip), а так же драйвер, которые необходимо скачать здесь https://netmf4stm32.codeplex.com
  5. .NET MicroFramework SDK - качаем здесь https://netmf.codeplex.com/ (версия 4.2 - VS 2010 или 4.3 для 2012 студии)
  6. Netduino SDK - можно скачать здесь http://netduino.com/downloads/ (в ней уже многое реализовано, чего нет в стандартном Фреймворке, а так же некоторые вещи сделаны удобнее)
  7. Visual C# Express или же Visual Studio в зависимости от версии Фреймворка, я себе скачать 4.3, так как студия 2012 для меня роднее.

 

Устанавливаем .NET MicroFramework SDK

 

Для начала необходимо установить STM32 ST-LINK Utility, запускаем её и подключаемся к устройству. В плату воткнут mini USB кабель. Идём в меню "Target" и нажимаем пункт "Erease Chip"

Очистка содержимого платы

 

а затем "Erease Sectors..." и выбрать все сектора и применить.

Очистка содержимого секторов

 

Затем из архива stm32f4discovery.zip загружаем в проц прошивку бутлоадера, файл Tinybooter.hex, для этого в том же пункте меню нажимаем "Programm..."

После того как всё залили либо сбрасываем плату нажатием чёрной кнопки, либо отключаем питание, а затем снова включаем, и подключаем micro USB кабель. Далее определится новое устройство и необходимо будет установить драйвер из архива STM32_WinUSB_drivers_(for_evaluation_purposes_only).zip и в последствии у нас появится новое устройство STM32.Net TestПоясняю если у вас система x64 - необходимо перезагрузится в тестовом режиме или же отключить проверку подписи драйверов, а затем уже установить драйвер, затем снова перезагрузиться в нормальном режиме, об этом можете поискать в интернете, так как данная статья посвящена непосредственно .NET MicroFramework, а ни как не настройке Windows.

После установки драйвера необходимо будет установить Visual Studio или же Visual C# Express, если уже есть, то идём далее - устанавливаем .NET MicroFramework SDK. В пуске появилась новая иконка .NET Micro Framework Deploy Tool (MFDeploy), запускаем и видим окно, в котором необходимо выбрать метод подключения USB и убедится, что в соседнем поле отобразилось наше устройство, будет что то вроде STM32F4 Test_a7e70ea2 или же другие буквы и числа после слова тест.

Следующим этапом у нас загрузка CLR в наш контроллер, для этого необходимо в Image File нажать кнопку "Browse..." и выбрать два оставшихся файла - ER_Config.hex и ER_Flash.hex и спокойно заливаем их в плату. Теперь снова отключаем питание платы и включаем. Плата готова к работе. Кстати если у вас этот пункт никак не получается и плата в MFDeploy не хочет находится залейте файлы на компе с 32 разрядной системой - мне это помогло.

 

"Код в студию"

 

Открываем студию и видим новый пунк меню, а так же новые шаблоны проектов (окошка с микросхемой), создаём Comsole Application, называем так как нам нравится

Создаём проект для нашей платы

 

Открываем свойства проекта и идём в самый последний пункт, где выбираем вместо эмулятора USB и видим, что ниже отобразилась наша плата. Сохраняем.

Настройка устройства для отладки

 

Далее рассмотрим как же нам использовать разные возможности. Но для начала предлагаю вам ознакомиться с картой пинов контроллера вот в этом файле

 [ Файл: CPU.cs.rar ]

 

Теперь о главном.

 

Вывести единичку в порт.

1
2
OutputPort testport = new OutputPort(Pins.GPIO_PIN_D_13, false);
testport.Write(true);

подробнее объяснять не буду, конструкция очень простая, назначаем порт и назначаем начальное состояние, а затем пишем в него необходимые данные.

Так же дела обстоят и с чтением, за тем исключение что указываются параметры для порта, такие как дребезг контактов и подтяжка вывода, в данном случае через резистор на землю

1
2
InputPort testport = new InputPort(Pins.GPIO_PIN_A_0, true, Port.ResistorMode.PullDown);
bool resultat = testport.Read();

 Теперь разберёмся с простейшим прерыванием.

1
2
3
4
5
6
7
8
9
10
11
public static void Main()
{
   InputPort ButtonPin = new InterruptPort(Pins.GPIO_PIN_A_0, true, Port.ResistorMode.PullDown, Port.InterruptMode.InterruptEdgeHigh);
   // назначаем обработчик прерывания 
   ButtonPin.OnInterrupt += new NativeEventHandler(ButtonCkick);
}
 
static void ButtonCkick(uint PinId, uint Value, DateTime Time)
{
   // Обработчик
}

Здесь думаю разобраться тоже труда не составит: создали, назначили обработчик, обработали прерывание, всё как в обычном .Net в плане назначения событий, ну например кнопки.

Аналогичным образом можно создать второй, третий, ..., n потоков для какой либо части кода.

1
2
Thread myHandler = new Thread(My_Thread);
myHandler.Start();

My_Thread - имя процедуры которая будет работать в данном потоке.

Для цтения данных из АЦП необходимо объявить аналоговый вход и выбрать канал для чтения и читать таким же образом как и цифровой вывод, за тем исключением что результатом будет int число вместо bool

1
2
AnalogInput analogpin1 = new AnalogInput(Cpu.AnalogChannel.ANALOG_1);
int resultat = analogpin1.ReadRaw();

C ШИМ мне пришлось попотеть, стандартными средствами реализовать всё ни как не получалось, именно здесь и пригодилась библиотека от Netduino.

1
2
PWM portPWM1 = new PWM(Pins.GPIO_PIN_E_9);
portPWM1.SetPulse(1000, 100);

Здесь не много поясню: 1000 - это период в микросекундах, 100 это период заполнения сигнала, то есть при данных настройках частота 1 кГц с заполнением 100/1000 = 1/10

Для более подробного изучения можно почитать вот эту книжку: 

[ Файл: Beginners guide to NETMF.pdf ]

Если есть желание можете скачать мой пробный проект и опробовать его уже на железе, в нём как раз-таки и представлены все выше изложенные функции.

[ Файл: Test_Project.rar ]

Используйте и не забывайте ставить положительные оценки

Категория: