Работаем с labview на примере stm32

Работаем с labview на примере stm32

Сообщение Rogers » 16 окт 2014, 15:02

#include «stm32f4xx.h»
#include «stm32f4xx_gpio.h»
#include «stm32f4xx_rcc.h»
#include «stm32f4xx_usart.h»

char uart2_rx_buf[128];
uint8_t uart2_rx_bit;

void send_to_uart(uint8_t data)
<
while(!(USART2->SR & USART_SR_TC));
USART2->DR=data;
>

//
void send_str(char * string)
<
uint8_t i=0;
while(string[i])
<
send_to_uart(string[i]);
i++;
>
>

//USART2
void usart_init(void)
<
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2); //PA3 k TX USART2
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2); // PA2 k RX USART2

//TX UART
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

// RX UART
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_Init(GPIOA, &GPIO_InitStructure);

int my_atoi(char a[]) <
int c, sign, offset, n;

for (c = offset; a[c] != ‘’; c++) <
n = n * 10 + a[c] — ‘0’;
>

return n;
>
typedef enum <
TM_DAC1,
TM_DAC2
> TM_DAC_Channel_t;

/**
* Initialize DAC channel and it’s pin
*
* — Parameters:
* — TM_DAC_Channel_t DACx:
* — TM_DAC1, TM_DAC2
*/
extern void TM_DAC_Init(TM_DAC_Channel_t DACx);

/**
* Set analog value to ADCx
*
* — Parameters:
* — TM_DAC_Channel_t DACx:
* — TM_DAC1, TM_DAC2
* — uint16_t value
* 12Bit unsigned value for 12bit DAC value
*/
extern void TM_DAC_SetValue(TM_DAC_Channel_t DACx, uint16_t value);

void TM_DAC_Init(TM_DAC_Channel_t DACx) <
GPIO_InitTypeDef GPIO_InitDef;
DAC_InitTypeDef DAC_InitDef;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

if (DACx == TM_DAC1) <
GPIO_InitDef.GPIO_Pin = GPIO_Pin_4;
> else <
GPIO_InitDef.GPIO_Pin = GPIO_Pin_5;
>
GPIO_InitDef.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitDef.GPIO_OType = GPIO_OType_PP;
GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitDef.GPIO_Speed = GPIO_Speed_2MHz;

DAC_InitDef.DAC_Trigger = DAC_Trigger_None;
DAC_InitDef.DAC_WaveGeneration = DAC_WaveGeneration_None;
DAC_InitDef.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
if (DACx == TM_DAC1) <
DAC_Init(DAC_Channel_1, &DAC_InitDef);
DAC_Cmd(DAC_Channel_1, ENABLE);
> else <
DAC_Init(DAC_Channel_2, &DAC_InitDef);
DAC_Cmd(DAC_Channel_2, ENABLE);
>
>

void TM_DAC_SetValue(TM_DAC_Channel_t DACx, uint16_t value) <
if (value > 4095) <
value = 4095;
>
if (DACx == TM_DAC1) <
DAC_SetChannel1Data(DAC_Align_12b_R, value);
> else <
DAC_SetChannel2Data(DAC_Align_12b_R, value);
>

int main(void)
<
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12| GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Init(GPIOD, &GPIO_InitStructure);

__enable_irq();
NVIC_EnableIRQ(USART2_IRQn);
NVIC_SetPriority(USART2_IRQn, 0);
USART2->CR1 |= USART_CR1_RXNEIE;

void USART2_IRQHandler (void)
<
int device_num = 0;
//char digits[8] = «700»;
char uart_data;
if (USART2->SR & USART_SR_RXNE)
<
USART2->DR = USART2->DR;
uart_data=USART2->DR;

device_num = my_atoi(uart2_rx_buf);
// device_num = my_atoi(digits);

uart2_rx_buf[uart2_rx_bit]=USART2->DR;
uart2_rx_bit++;
USART2->DR=device_num;
SystemInit();

//Initialize DAC channel 1, pin PA4
TM_DAC_Init(TM_DAC1);
//Set 12bit analog value of 600/4096 * 3.3V
TM_DAC_SetValue(TM_DAC1, device_num);

Управление микроконтроллером ATmega32 через интерфейс USB

Прежде всего LabVIEW — среда программирования, но отличается она от большинства других принципом написания кода программы. Программа в этой среде является графическим представлением взаимосвязанных блоков, выполняющих определённые функции. Такой подход значительно упрощает написание приложений, т. к. нет необходимости вникать в тонкости синтаксиса текстовых языков программирования. По основным функциональным возможностям (работа с файлами, реестром, получением, обработкой данных, передачей их по сети и т.д.) LabVIEW не уступает другим языкам.

Также среда разработки LabVIEW очень удобна для радиоинженеров и научных работников, потому что имеет в своем составе множество готовых инструментов (для создания ПИД-регуляторов, обработки звука, изображений и множества других приложений), да и в целом работа в LabVIEW для людей, не посвящённых в тонкости программирования, намного проще, чем в том же Delphi или Visual Studio.

Изучая управление микроконтроллерами по шине USB на основе библиотек V-USB и LibUSB, у меня возник вопрос – как управлять разрабатываемым USB-устройством из LabVIEW, и возможно ли это вообще?

Выяснилось, что в LabVIEW можно просмотреть все доступные функции libusb0.dll (основная DLL библиотеки LibUSB). Чтобы начать использовать функции библиотеки libusb, нужно научиться работать с типом данных handle в LabVIEW. Довольно простое решение нашлось на одном англоязычном форуме – оно заключалось в преобразовании handle в числовой тип, см. [1]. Читая статью [2] об управлении макетной платой из программы на Delphi, я подумал, что наверно можно сделать такую dll-ку в Delphi, которую потом использовать в LabVIEW для управления устройством USB. Эта DLL (назовем её V-USB-LabVIEW.dll) будет обращаться к libusb0.dll и управлять микроконтроллером ATmega32 по протоколу USB. Все манипуляции с handl-ами, PID, VID, адресами, байтами и т. д. будут происходить внутри V-USB-LabVIEW.dll. Получается следующая схема взаимодействия:

За основу для создания V-USB-LabVIEW.dll взял почти без изменений пример программы useport от Vanoid-а [2], и готовую прошивку для контроллера от Сергея Кухтецкого [3]. Скомпилированную DLL, её исходный код и пример программы LabVIEW можно скачать по ссылке [4]. Теперь коротко о содержимом исходного кода DLL. Работу программ испытывал на макетной плате AVR-USB-MEGA16, на которой установлен микроконтроллер ATmega32A (в память микроконтроллера через USB-бутлоадер была залита прошивка Сергея Кухтецкого).

В начале кода V-USB-LabVIEW.dll объявлены используемые константы, функции и процедуры из проекта useport: usbGetStringAscii, usbOpenDevice, SendUSBControlMessage. Они нужны, чтобы обратиться к нужному устройству USB. В процедуре SendUSBControlMessage объявлены также PID и VID устройства USB в виде строковых констант. Я добавил функцию PortX_Write, которая будет вызываться в LabVIEW. На примере обращения к порту PB0, к которому подключен светодиод на макетной плате AVR-USB-MEGA16, эта дополнительная функция в проекте DLL на Delphi выглядит так:

function PortX_Write (Address:integer;on_off:integer): integer; stdcall;
var data: array [0..2] of char ; //AVR отправляет обратно max 3 байта
bit: byte ;
begin
// Порт PB0 со светодиодом
if Address = 0 then
begin
// Читаем состояние ножек порта В
SendUSBControlMessage(USB2PC,RQ_IO_READ, 0, aPORTB, 0, data);
bit := bit0;
if on_off = 1 then
data[0]:= char ( byte (data[0]) or bit)
else
data[0]:= char ( byte (data[0]) and ($FF-bit));
SendUSBControlMessage(PC2USB, RQ_IO_WRITE,
byte (data[0]), aPORTB, 0, data);
end;
result := 1;
end;

// Далее идет экспорт функций dll для последующего
// использования в LabVIEW
exports PortX_Write;

Функция PortX_Write имеет два аргумента: первый Address – определяет порт, которым нужно управлять. Светодиод на макетной плате подключен к порту PB0, и для него используется адрес 0. Для всех остальных портов P1..P22 макетной платы (которые подключены к разрядам портов A, B, C, D микроконтроллера ATmega32) используются значения от 1 до 22 соответствуют портам макетки P1..P22). Второй аргумент on_off – состояние, в которое порт нужно перевести. Например, чтобы подать питание на светодиод (зажечь его), в параметре on_off нужно передать 1, и чтобы погасить светодиод, надо передать 0. В параметре Address соответственно должен быть 0 (адрес порта светодиода).

Работаем с labview на примере stm32







Техническая информация.

STM32 hardware .
STM32 software .
LabVIEW.
MAX11210.
MAX 607 0.
BreadBoards.

STM32 hardware .

Переход на новую серию микроконтроллеров – STM32F103 .

Конкретный микроконтроллер – STM32F103TBU6 .

STMпроизводитель ST Microelectronics .

32семейство 32-битных ARM .

F1ARM Cortex M3 .

03микроконтроллер с конкретным набором периферии, частота до 72 МГц .

T36 выводов .

Bпамять 128 кБ .

Uтип корпуса.

6температурный диапазон -40 .. +85 °C .

Внешний вид и назначение выводов сборки:

STM32 software .

Прошивка загрузчика в микроконтроллер:

Используем USB to Serial адаптер:
3 V 3 ( Red ) – 3 V 3 ,
GND ( Brown ) – GND ,
RXD ( Orange ) – PA9 ,
TXD ( Yellow ) – PA10 .

Переводим микроконтроллер в режим программирования.

LabVIEW .

Минимальная среда разработки – LabVIEW 5.0 .
+ полностью переносимая версия.
+ крайне малые размеры.
+ высочайшая скорость реакции интерфейса.
+ полная работоспособность вплоть до Windows 10 .
— слабый функционал.
— отсутствие автовыбора инструментов.
— ограниченный набор визуального оформления.

Lvserial – интерфейс между LabVIEW и последовательным портом (автор Martin Henz ) .
Не нужно устанавливать никакие драйверы (например, NI-VISA ), достаточно одной библиотеки lvserial.dll и стандартного набора виртуальных инструментов для работы с последовательным портом.
Виртуальные инструменты (ВИ) создавались в LabVIEW 6.1 , версии для LabVIEW 5.0 у автора нет (ответ автора от 15.10.2015: » No sorry. The oldest avialable lvserial is for LabVIEW 6.1″ ).
В связи с этим основные ВИ ( «Open», «Read», «Write», «TermChar» ) были переписаны для LabVIEW 5.0 и полностью функциональны.

В 2015 году компания National Instruments создала новую лицензию для своего программного продукта LabVIEW – Home Bundle.
Это полнофункциональная версия LabVIEW 2014 для личного некоммерческого использования. Теперь каждый желающий может купить сертификат с серийным номером на лицензионную некоммерческую версию LabVIEW в российском представительстве National Instruments за 75 $ .
После этого нужно загрузить и активировать программу – и Вы приобретете мощный инструмент для анализа и управления всеми этапами физического эксперимента.

Интерфейс между MAX11210 и LabVIEW 5.0 .

Интерфейс между 24-битным АЦП MAX11210 , STM32F103TBU6 и LabVIEW 5.0 .

MAX11210 .

MAX11210 – 24-битный одноканальный АЦП с последовательным выходом и низкой потребляемой мощностью. Данное устройство оптимизировано для приложений, требующих широкого динамического диапазона при низкой потребляемой мощности, к которым относятся, например, датчики с рабочим током от 4мА до 20мА для промышленных систем контроля. Дополнительные входные буферы обеспечивают изоляцию входных сигналов от изменяющейся емкости переключающегося тракта преобразования, что дает возможность использовать этот АЦП вместе с высокоимпедансными источниками без ущерба для характеристик динамического диапазона и линейности. Данное устройство имеет встроенный высокоточный генератор, который не требует использования внешних компонентов. При работе на стандартных скоростях встроенный цифровой фильтр обеспечивает подавление более чем на 144dB шумов 50Гц и 60Гц. Управление устройством осуществляется через интерфейс SPI и включает также управление четырьмя входами-выходами общего назначения, предназначенными для подключения внешних схем коммутации.
MAX11210 имеет программируемый усилитель с коэффициентами усиления 1, 2, 4, 8, или 16.
MAX11210 выпускается в 16-выводном корпусе QSOP и работает в расширенном температурном диапазоне от -40°С до +85°С.

Читайте также  Провод силовой для проводки

24.0-Bit ENOB at 5sps
20.9-Bit Noise-Free Resolution at 10sps
19-Bit Noise-Free Resolution at 120sps
570nVRMS Noise at 10sps, ± 3.6VFS Input
1ppm INL (typ), 10ppm (max)
No Missing Codes
Ultra-Low Power Dissipation
Operating-Mode Current Drain Sleep-Mode Current Drain Control
2.7V to 3.6V Analog Supply Voltage Range
1.7V to 3.6V Digital and I/O Supply Voltage Range
Fully Differential Signal and Reference Inputs
High-Impedance Inputs
Optional Input Buffers on Both Signal and Reference Inputs
Programmable Internal Clock or External Clock Mode
> 100dB (min) 50Hz/60Hz Rejection
SPI, QSPI™, MICROWIRE™-Compatible Serial Interface
On-Demand Offset and Gain Self-Calibration and System Calibration
User-Programmable Offset and Gain Registers
-40°C to +85°C Operating Temperature Range
± 2kV ESD Protection
Lead(Pb)-Free and RoHS-Compliant QSOP Package .

MAX6070 .

Что самое важное в аналого-цифровом преобразователе (АЦП)? В дополнении к высокому разрешению, существенной частью измерительной схемы является высококачественный источник опорного напряжения (ИОН).

MAX6070A – прецизионный ИОН с низким уровнем шума.

High ± 0.04% Initial Accuracy
Low 1.5ppm/°C (typ) Temperature Drift
Low 4.8μVP-P Noise (0.1Hz to 10Hz) at 2.5V
Low 150μA Supply Current
10mA Source/Sink Load Current
Noise Filter Option
Low 200mV Dropout Voltage
High 85dB Ripple Rejection
Small 6-Pin SOT23 Package
Voltage Output Options: 1.25V, 1.8V, 2.048V, 2.5V, 3.0V, 3.3V, 4.096V, and 5.0V .

MAX6070AAUT12 1.25V ACPF красные контакты.
MAX6070AAUT25 2.5V ACPL желтые контакты.
MAX6070AAUT30 3.0V ACPN черные контакты.
MAX6070AAUT41 4.096V ACPR синие контакты.

BreadBoards .

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

В настоящее время лучшими из тестированных беспаечных макетных плат являются изделия фирмы WISHER ENTERPRISE .

Основание: алюминиевая пластина толщиной 1,2 мм .
Материал плат: ABS-пластик.
Материал разъемов: фосфористая бронза с покрытием никелем.
Толщина подключаемых проводников: 0,3-0,7 мм.
Расстояние между отверстиями: 2,54 мм.
Количество циклов подключения/отключения: 10 тысяч.
Максимальные напряжение и ток: 48 В, 5 А.

ADC Accuracy on STM32F1 Board .

The value you see depends on:
1. on the voltage at your voltage regulator (it serves as the adc reference voltage)
2. on the formula you use for the conversion of adc output to float
3. on the error of the adc converter (see datasheet)
4. on the adc clock frequency
5. on the impedance of the voltage source
6. on the temperature
7. on the level of noise.

Стенд для измерения магнитного поля – 2017.

Сейчас мы расскажем Вам, как самостоятельно создать стенд для измерения магнитного поля с минимальными затратами труда и денег.

Прошивка загрузчика в микроконтроллер:

Используем USB to Serial адаптер:
3 V 3 ( Red ) – 3 V 3 ,
GND ( Brown ) – GND ,
RXD ( Orange ) – PA9 ,
TXD ( Yellow ) – PA10 .

Переводим микроконтроллер в режим программирования.

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

  • Вычислительная техника
    • Микроконтроллеры микропроцессоры
    • ПЛИС
    • Мини-ПК
  • Силовая электроника
  • Датчики
  • Интерфейсы
  • Теория
    • Программирование
    • ТАУ и ЦОС
  • Перспективные технологии
    • 3D печать
    • Робототехника
    • Искусственный интеллект
    • Криптовалюты

Чтение RSS

Как работать в LabVIEW: пример управления светодиодом по кнопке

Что такое LabVIEW?

LabVIEW является аббревиатурой от Laboratory Virtual Instrumentation Engineering Workbench (рабочее место виртуальной лаборатории для инженеров). Внешний вид и операции элементов LabVIEW напоминают приборы реального мира, такие как кнопки, вольтметры, осциллографы и т. д. и, следовательно, они называются виртуальными инструментами (VI). LabVIEW предлагает подход графического программирования и помогает моделировать устройства реального мира.

Таким образом, для программирования требуется только логика, а сам процесс не зависит от синтаксиса. LabVIEW – инструмент проектирования высокого уровня. Это программирование с интерпретацией, то есть нам не нужно ничего компилировать. После подготовки проекта нужно будет только запустить его.

Чем LabVIEW отличается от других программ проектирования и моделирования схем?

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

Методы программирования могут быть двух типов. Они основаны на текстовом и графическом программировании. C, C ++, Java и т. д. (все текстовые языки программирования) относятся к текстовому программированию (MATLAB – язык промежуточного уровня), тогда как LabVIEW – язык программирования на графической основе.

Почему стоит отдать предпочтение LabVIEW?

Тот, кто не имеет никаких базовых знаний о программировании, может использовать LabVIEW. Чтобы заниматься программированием на LabVIEW, нужно обладать практическими знаниями и умением логического мышления. Программисту LabVIEW не нужно знать какой-либо синтаксис программирования или какую-либо структуру программирования, такую как языки программирования C, C ++, Java.

Можно использовать LabVIEW, когда программа слишком велика. Здесь так же просто подключить аппаратные компоненты для вашего проекта. На рисунке ниже показана разница между текстовым и графическим программированием. С левой стороны есть программа Arduino, которая мигает светодиодом с задержкой в 1 секунду, а с правой стороны ее графическая копия была сделана с использованием программного обеспечения LabVIEW. Всякий раз, когда вы нажимаете кнопку ОК, светодиод будет мигать с задержкой в 1 секунду.

Запуск LabVIEW

Сначала загрузите программное обеспечение LabVIEW от National Instruments (http://www.ni.com/ru-ru/shop/labview.html). После запуска этого программного обеспечения открывается окно Getting Started (Начало работы).

Нажмите Ctrl + N, чтобы открыть новый проект. Открыв новый проект, вы увидите лицевую панель и окно блок-схем.

Окно Getting Started исчезает, когда вы открываете новый или существующий проект. Оно появляется снова, когда вы закрываете все лицевые панели и блок-схемы. Вы также можете открыть это окно с лицевой панели или блок-схемы, выбрав View — Getting Started. Нажмите Ctrl + T, чтобы расположить лицевую панель и окно блок-схем рядом, как это показано ниже.

В LabVIEW вы будете создавать пользовательский интерфейс, то есть лицевую панель, с элементами управления и индикаторами. Элементы управления – это не что иное, как вводимые вами данные, такие как ручки, переключатели и т. д. Индикаторы – это не что иное, как создаваемые вами выходы, такие как светодиоды, графики и т. д. Сейчас объясним все на примере, чтобы вы поняли лучше.

Типы данных в LabVIEW

Типы данных – классификация переменных. Ниже приведены типы данных, используемые в LabVIEW, и их цветовое соответствие в окне блок-схем.

  • Floating point (с плавающей запятой) – оранжевый
  • Integer (целые) – синий
  • Boolean (булевы) – зеленый
  • String (строка) – розовый
  • Polymorphic (полиморфные) – черный

Полиморфный объект – тот, который может быть любым из этих выше перечисленных типов данных.

Пример LabVIEW: включение светодиода при нажатии кнопки

Для начала осуществим добавление элементов управления на лицевую панель. Элементы управления на лицевой панели имитируют механизм ввода на физическом инструменте и подают данные на блок-схему виртуальных инструментов (программы LabVIEW называются VI или Virtual Instruments). Выберите View — Controls Palette (Вид — Палитра элементов управления), чтобы палитра элементов управления или функций постоянно находилась на экране, или щелкните правой кнопкой мыши любое пустое место на лицевой панели или окно блок-схемы, чтобы временно отобразить ее.

Читайте также  Скрытая проводка в кирпичном доме

Наведите курсор на значки в палитре Modern, чтобы найти нужные элементы управления (Boolean Controls Palette или палитра логических элементов управления). Щелкните на значок Boolean controls, чтобы отобразить палитру логических элементов управления. Щелкните на button control на палитре логических элементов управления Boolean controls, чтобы прикрепить элемент управления, а затем добавьте кнопку на лицевую панель.

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

Таким образом, кнопка управления была добавлена на лицевую панель. Теперь добавим индикатор на лицевую панель. Аналогичным образом добавьте кнопку из палитры Boolean. Затем создайте соединение, как показано ниже.

Чтобы запустить виртуальный инструмент, выберете Select Operate — Run/Run Continuously. Или вы можете использовать значки, которые отображены на рисунке выше. Чтобы остановить выполнение, снова нажмите значок run continuously. Во время работы программы светодиод будет светиться при нажатии на кнопку. Если кнопка запуска не работает, значит, в программе LabVIEW произошла ошибка. Чтобы узнать, что это за ошибка, нажмите эту кнопку запуска, вы увидите диалоговое окно с описанием ошибки.

STM Урок 40. Знакомство с платой NUCLEO STM32F767ZI

Урок 40

Знакомство с платой NUCLEO STM32F767ZI

Очень рад вам сообщить, что у меня появилась очередная очень интересная отладочная плата – NUCLEO STM32F767ZI.

Данная плата является продуктом компании ST Microelectronics и представляет собой готовое решение для изучения вопросов программирования микроконтроллеров. Ценность плат Nucleo по сравнению с Discovery состоит в том, что данные платы не включают в себя массу различных компонентов кроме контроллера и на них практически ничего нет кроме контроллера и кварцевого резонатора, за исключением разве что некоторых мелочей. Смысл такой платы заклюается в том, что за счет вышеперечисленного у разработчика появляется возможность использовать практически все порты GPIO, так как они все свободны. Второй неоценимый плюс – это её цена. Она гораздо дешевле, чем у равноправных по контроллеру плат Discovery как раз засчёт того, что не приходится платить за отсутствующие дополнительные компоненты. Цена этой платы на данный момент в районе 40$.

Ну давайте посмотрим на данную плату (нажмите на картинку для увеличения)

Как мы видим, на плате присутствует очень много наружных конекторов, что позволяет нам активно пользоваться всеми функциями микроконтроллера, а также практически всем портами ввода-вывода, причем номера портов в данной плате в отличии от её предшественников, подписаны. Наружный конектор представляет собой свокупность выведенных наружу ножек контроллера, и на данные ножки по умолчанию не установлены разъёмы, то есть присутствуют пустые отверстия. Мы можем либо распаять удобные для нас любые конекторы с межпинным интервалом 2,54 мм, либо воспользоваться внутренними конекторами в виде разъёма типа ST Zio, который также включает полную поддержку разъёма Arduino-UNO V3 (A0-A5, D0-D15), а также дополнительных сигналов (A6-A8 и D16-D72). Микроконтроллер на плате установлен STM32F767ZIT6U, выполненный на новом ядре ARM Cortex-M7. Ну и также как на всех платах, здесь установлен программатор ST-Link/V2-1, который позволяет нам прошивать и отлаживать наш код в контроллере, а также, как у практически всех плат Nucleo, он позволяет без распайки дополнительной цепи кварцевого резонатора, пользоваться своим тактовым генератором основному микроконтроллеру.

Ну, про уникальные возможности контроллеров построенных на ядре M7 я уже неоднократно рассказывал и, думаю, повторять нет смысла, мы все прекрасно знаем о них. Также возможности или какие-то особенности данной платы мы увидим в будущих уроках в в процессе работы с данной платой, а работы предстоит немало. Это и Quad-SPI, и FMC, и прочие технологии. На Quad-SPI я немного остановлюсь. На данной плате он уникален тем, что мы к нему можем спокойно подключать уже внешние элементы, поддерживающие работу с ним. В плате Discovery F746 у нас такая возможность отсутствовала, так как там на ножки данной шины распаяна тестовая микросхема и использовать наружу мы их не могли. Пины, отвечающие за передачу данных ещё можно куда-то было ремапить, а пин такирования – нет. А без него никуда.

А теперь постепенно перейдём к практическому использованию. Для этого мы подключим данную плату посредством Data-кабеля типа USM Micro B. Так как мой персональный компьютер в своей практике повидал уже не мало плат на контроллерах STM32, то драйвер, соответственно установился автоматически. Если у вас это первая плата, то вам необходимо будет его скачать и установить. Об этом рассказано в предыдущих уроках и сложности никакой данный вопрос не представляет.

Теперь давайте узнаем, нет ли обновлений на прошивку программатора ST-Link. Порой могут приходить платы с немолодой прошивкой, вследствие чего могут быть всевозможные неполадки в программировании и работе платы. Поэтому запустим программу ST-LINK Utility и зайдём в пункт меню ST-LINK -> Firmare Update

Запустится следующий диалог, в котором мы нажимаем пока единственную активную кнопку Device Connect, в результате нажатия на который при удачном соединении с программатором мы получим версию уже присутствующей у нас в нём прошивке, а также чуть ниже версию доступной прошивки

Если у нас версия старее, чем предложенная, то нажимаем кнопку Yes и обновляемся. В нашем случае нам обновлять ничего не нужно. Поэтому просто закроем наш диалог. Также необходимо ни в коем случае не забывать о том, что версия ST-LINK Utility и версия ST-Link Upgrade тоже должна быть последняя. В противном случае её нужно скачать на сайте st.com и обновить. Именно так происходит в видеоуроке, который Вы можете посмотреть и ссылка на который есть в конце статьи.

Теперь давайте посмотрим прошивку самого контроллера, а не программатора. Для этого нажмем пункт меню Target -> Connect

Вот такая вот прошивка

Теперь непосредственно проверим плату в работе. Для этого запустим Cube MX.

Мы попробуем помигать двумя светодиодами, находящимися на плате. Но, прежде чем создавать проект, давайте посмотрим на схеме, к каким ножкам конроллера данные светодиоды разведены

А подключены они, как мы видим, к ножкам портов PB7 и PB14.

Теперь можно создавать проект и настраивать его. Только выберем мы сегодня не контроллер а плату. Для этого в диалоге создания нового проекта перейдём на закладку Board Selector и, отфильтровав там нашу отладочную плату, выберем её (нажмите на картинку для увеличения)

Нажмём ОК. У нас открылся проект и мы видим, что на визуальной схеме контроллера наши светодиоды уже включены на выход и обозначены

Так как тактирование платы осуществляется от генератора, который тактирует контроллер программатор, а в данном генераторе присутствует кварцевый резонатор на 8 МГц, то мы выберем вариант «Bypass Clock Source«, так как кварцевый резонатор подключен не к нашему контроллеру и мы пользуемся именно внешним генератором

Перейдём теперь в Clock Configuration и настроим там следующую конфигурацию (в видео сразу было неправильно, но мы поправимся уже на данном этапе, так как я тогда ещё не знал о существовании тактирования от генератора программатора)

Теперь зайдём в Project -> Settings и добавим там следующие настройки и пути

Нажмем ОК, затем сгенерируем и откроем проект в Keil, настроим программатор на авторезет и напишем в бесконечный цикл функции main() следующий исходный код

/* USER CODE BEGIN 3 */
HAL_GPIO_WritePin(GPIOB, LD3_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, LD2_Pin, GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOB, LD2_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, LD3_Pin, GPIO_PIN_SET);
HAL_Delay(500);

>
/* USER CODE END 3 */

Мы используем такие уникальные переменные для ножек портов, так как именно так они переопределены в Cube. Соберём код и прошьём контроллер платы.

Мы видим, что наши светодиоды попеременно мигают с частотой раз в секунду (суммарная задержка 500+500). Ура! Наша плата работает!

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

STM32 – микроконтроллер для начинающих после Arduino

Микроконтроллер STM32 – популярная и очень востребованная платформа, позволяющая создавать профессиональные решения для автоматизации в самых различных областях. В отличие от доступного Arduino, STM32 требует более глубокого погружения в детали, она сложнее для начинающих, для нее меньше учебников на русском. В этой статье мы постараемся дать базовую информацию о платформе, ее истории, подскажем, где можно скачать программы и библиотеки, как написать первый скетч.

Читайте также  Память данных eeprom

Что такое STM32

STM32 – это платформа, в основе которой лежат микроконтроллеры STMicroelectronics на базе ARM процессора, различные модули и периферия, а также программные решения (IDE) для работы с железом. Решения на базе stm активно используются благодаря производительности микроконтроллера, его удачной архитектуре, малом энергопотреблении, небольшой цене. В настоящее время STM32 состоит уже из нескольких линеек для самых разных предназначений.

История появления

Серия STM32 была выпущена в 2010 году. До этого компанией STMicroelectronics уже выпускались 4 семейства микроконтроллеров на базе ARM, но они были хуже по своим характеристикам. Контроллеры STM32 получились оптимальными по свойствам и цене. Изначально они выпускались в 14 вариантах, которые были разделены на 2 группы – с тактовой частотой до 2 МГц и с частотой до 36 МГц. Программное обеспечение у обеих групп одинаковое, как и расположение контактов. Первые изделия выпускались со встроенной флеш-памятью 128 кбайт и ОЗУ 20 кбайт. Сейчас линейка существенно расширилась, появились новые представители с повышенными значениями ОЗУ и Flash памяти.

Достоинства и недостатки STM32

  • Низкая стоимость;
  • Удобство использования;
  • Большой выбор сред разработки;
  • Чипы взаимозаменяемы – если не хватает ресурсов одного микроконтроллера, его можно заменить на более мощной, не меняя самой схемы и платы;
  • Высокая производительность;
  • Удобная отладка микроконтроллера.
  • Высокий порог вхождения;
  • На данный момент не так много литературы по STM32;
  • Большинство созданных библиотек уже устарели, проще создавать свои собственные.

Минусы STM32 не дают пока микроконтроллеру стать заменой Ардуино.

Сравнение STM32 с Arduino

По техническим характеристикам Ардуино проигрывает STM32. Тактовая частота микроконтроллеров Ардуино ниже – 16 МГц против 72 МГц STM32. Количество выводов GRIO у STM32 больше. Объем памяти у STM32 также выше. Нельзя не отметить pin-to-pin совместимость STM32 – для замены одного изделия на другое не нужно менять плату. Но полностью заменить ардуино конкуренты не могут. В первую очередь это связано с высоким порогом вхождения – для работы с STM32 нужно иметь базис. Платы Ардуино более распространены, и, если у пользователя возникает проблема, найти решение можно на форумах. Также для Ардуино созданы различные шилды и модули, расширяющие функционал. Несмотря на преимущества, по соотношению цена/качество выигрывает STM32.

Семейство микроконтроллеров STM32 отличается от своих конкурентов отличным поведением при температурах от -40С до +80 С. Высокая производительность не уменьшается, в отличие от Ардуино. Также можно найти изделия, работающие при температурах до 105С.

Обзор продуктовых линеек

Семейство STM32 имеет широкий ассортимент изделий, различающихся по объему памяти, производительности, потреблению энергии и другим характеристикам.

Серии STM32F-1, STM32F-2 и STM32L полностью совместимы. Каждая из серий имеет десятки микросхем, которые можно без труда поменять на другие изделия. STM32F-1 была первой линейкой, ее производительность была ограничена. Из-за этого по характеристикам контроллеры быстро догнали изделия семейства Stellaris и LPC17. Позднее была выпущена STM32F-2 с улучшенными характеристиками – тактовая частота достигала 120 МГц. Отличается высокой процессорной мощностью, которая достигнута благодаря новой технологии производства 90 нм. Линейка STM32L представлена моделями, которые изготовлены по специальному технологическому процессу. Утечки транзисторов минимальны, благодаря чему приборы показывают лучшие значения.

Важно отметить, что контроллеры линейки STM32W не имеют pin-to-pin совместимости с STM32F-1, STM32F-2 и STM32L. Причина заключается в том, что линейку разрабатывала компания, которая предоставила радиочастотную часть. Это наложило ограничения на разработку для компании ST.

STM32F100R4

Микросхема STM32F100R4 имеет минимальный набор функций. Объем флэш памяти составляет 16 Кбайт, ОЗУ – 4 Кбайт, тактовая частота составляет 12 МГц. Если требуется более быстрое устройство с увеличенным объемом флэш-памяти до 128 Кбайт, подойдет STM32F101RB. USB интерфейс имеется у изделия STM32F103RE. Существует аналогичное устройство, но с более низким потреблением – это STM32L151RB.

Программное обеспечение для работы с контроллером

Для ARM архитектуры разработано множество сред разработки. К самым известным и дорогостоящим относятся инструменты фирм Keil и IAR System. Программы этих компаний предлагают самые продвинутые инструментарии для оптимизации кода. Также дополнительно существуют различные системы – USB стеки, TCP/IP-стеки и прочие. Применяя системы Keil, пользователь получает хороший уровень технической поддержки.

Также для STM32 используется среда разработки Eclipse и построенные на ней системы Atollic TrueStudio (платная) и CooCox IDE (CoIDE) (бесплатная). Обычно используется последняя. Ее преимущества перед другими средами разработки:

  • Свободно распространяемое программное обеспечение;
  • Удобство использования;
  • Имеется много примеров, которые можно загрузить.

Единственный недостаток среды разработки CooCox IDE – сборка есть только под Windows.

STM32 Discovery

Начать изучение микроконтроллера STM32 лучше с платы Discovery. Это связано с тем, что на этой плате есть встроенный программатор. Его можно подключить к компьютеру через USB кабель и использовать как в качестве программируемого микроконтроллера, так и для внешних устройств. Плата Discovery имеет полную разводку пинов с контроллера на пины платы. На плату можно подключать различные сенсоры, микрофоны и другие периферийные устройства.

Что потребуется для подключения STM32 к компьютеру

Чтобы начать работу, потребуются следующие компоненты:

  • Сама плата STM32 Discovery;
  • Datasheet на выбранную модель;
  • Reference manual на микроконтроллер;
  • Установленная на компьютер среда разработки.

В качестве примера первая программа будет рассмотрена в среде CooCox IDE.

Первая программа

Обучение следует начинать с простейшего – с Hello World. Для начала нужно установить CooCox IDE на компьютер. Установка стандартная:

  • Скачивается программа с официального сайта;
  • Там нужно ввести адрес своей электронной почты и начать загрузку файла с расширением .exe;
  • Нужно открыть CooCox IDE вкладку Project, Select Toolchain Path;
  • Указать путь к файлу;
  • Снова открыть среду разработки и нажать View -> Configuration на вкладку Debugger;
  • Теперь можно записывать программу.

Когда программа установлена, ее нужно открыть. Следует перейти во вкладку Browse in Repository и выбрать ST – свой микроконтроллер.

Далее на экране появится список библиотек, которые можно подключить. Для первой программы потребуются системные CMSIS core и CMSIS Boot, библиотека для работы с системой тактирования RCC, GPIO для работами с пинами.

Сама программа пишется как и для Ардуино, нужно знать основы языка Си.

В окошке Project следует открыть main.c. В коде в самом начале следует подключить библиотеки кроме CMSIS (они уже автоматически подключены). Добавляются они следующим образом:

Затем добавляется тактирование порта в главной функции main. Какой контакт за что ответственен, можно просмотреть в даташите к микроконтроллеру.

Для настройки параметров выводов следует прописать ее название и поставить точку. Во всплывающем меню будут указаны все характеристики. Их можно исправлять.

После этого нужно сделать зацикливание в while, чтобы светодиод мигал, пока не отключится питание.

Когда программа написана, ее можно загружать в контроллер. Если есть отладочная плата, ее нужно подключить через USB кабель и нажать Download Code To Flash. Если плата отсутствует, потребуется переходник, который нужно подключить к порту компьютера. Контакт BOOT 0 подключается к плюсу питания контроллера, а затем включается само питание МК. После этого начнется прошивка.

Чтобы загрузить программу в микроконтроллер, нужно следовать указаниям от приложения. Сначала прописывается код порта, к которому подключен микроконтроллер. Также указывается скорость. Советуется брать небольшое значение, чтобы не было сбоев. Программа найдет микроконтроллер, и нужно будет нажать кнопку «далее». Во вкладке Download to device нужно в поле Download from file выбрать написанную программу и нажать «далее».

После этого нужно отключить питание контроллера STM32, закрыть Flash Loader Demonstrator, выключить переходник. Теперь можно снова включить микроконтроллер в обычном режиме. Когда программа будет загружена, светодиод начнет мигать.

Работа в других программах проходит подобным образом. Также выбираются нужные библиотеки, и прописывается код. У платных утилит функционал больше, и можно создавать более сложные проекты.