web семинар stm32cubemx• «hello world», создание и конфигурация...
TRANSCRIPT
Web – семинар STM32CubeMX
10 ноября
Попов Роман (Компэл)
Александр Квашин (ST)
• Введение
• Ядро Cortex-M7, архитектура STM32F7
• Обзор семейства STM32F7
• Бесплатные среды разработки
• Графический генератор кода STM32CubeMX
• Примеры:
• «Hello World», создание и конфигурация проекта
• USB. Виртуальный COM – порт (CDC)
• Ethernet. Web-Server
• Ответы на вопросы
• Розыгрыш призов
Программа 2
Ядро
ARM CORTEX-M7
3
DSP
Ядро Cortex-M4 • Архитектура ARMv7E-M
• Гарвардская архитектура, конвейер 3 - уровня
• Поддержка деления, инструкций SIMD
• Модуль защиты памяти (MPU)
• Модуль плавающей точки (FPU)
• Включен во все STM32 на ядрах ARM Cortex-M4
4
12-тактов задержки ISR
• Архитектура ARMv7E-M
• Гарвардская архитектура, конвейер 6 - уровней
• Супер скалярная архитектура!
• Поддержка деления, инструкций SIMD
• Модуль защиты памяти (MPU)
• Модуль плавающей точки (FPU)
• Включен во все STM32 на ядрах ARM Cortex-M4 и Cortex-M7
Ядро Cortex-M7 5
На один шаг ближе к DSP На один шаг ближе к процессорам
реального времени
Выполнение операций загрузки/выгрузки
параллельно с арифметическими операциями
Прямой доступ ядра к 2 областям оперативной
памяти
Операции ветвления без задержек Кеш память для внешней памяти ( шина AXI-M)
12-тактов задержки ISR
Cortex-M7 → параллельное выполнение 6
1
Fetch Decode Issue Prefetch
DATA PROCESSING UNIT
(+ FPU)
LOAD/STORE
UNIT
PREFETCH
UNIT
#1 DECODE #2 DECODE
64-бит за 1 такт
Load/Store 1
Load/Store 2
ALU 1 (Main)
ALU 2
MAC (32b x 32b + 64b)
FPU
2 3 4
32-бит
32-бит
Execute
BTAC 64-entry
X 64 bits
BRANCH
(2x 32b)
Память данных
NVIC
DPU
Операции математики и load/store
• Cortex-M4
• Единичные операции load/store занимают 2 такта
• N последовательных операций load/store занимают N+1 тактов
• Cortex-M7
• Операции load/store выполняются параллельно
• с арифметическими
• Доступ к памяти без задержек!
7
Работа компилятора!
Выборка Декодиро
вание
Результат
#1 DECODE #2 DECODE
Load/Store 1
Load/Store 2
ALU 1 (Main)
ALU 2
32-бит (2x 32b)
32-бит
Выполнение
Группировка команд
Параллельное
выполнение команд
Архитектура STM32F7
8
DSP
DMA1 DMA2 ETH
DMA
USB
HS
DMA L1-Cache
4KB I/D
AXI to Multi-
AHB
LCD-
TFT
DMA
Chrom-
ART
SRAM
240 KB
SRAM
16 KB
AHB1
Peripheral
AHB2
Peripheral
FMC
QuadSPI
ITCM RAM
16 KB
DTCM RAM
64 KB
AX
IM
AH
BS
ITC
M
DT
CM
APB1
Peripheral
APB2
Peripheral
FLASH
1MB
AH
BP
DM
A_M
EM
1
DM
A_M
EM
2
DM
A_P
1
DM
A_P
2
ART
Шина ITCM
Шина DTCM
Шина AXIM
Шина AHBS
Гибкая архитектура STM32F7x6 9
64-b
it
Bu
sM
atr
ix 32-бит матрица шин
Cortex-M7
Выполнение кода возможно из:
Flash ITCM с ART Accelerator
или
Flash AXI с L1-cache
или
Внешняя память с L1-cache
Архитектура ядра 10
DATA PROCESSING
UNIT
(+ FPU)
NVIC
LOAD/STORE
UNIT
STORE
BUFFER
BUS INTERFACE
UNIT
MPU
AXI-M
AHBS
for DMAs
AHBP (периферия)
Прерывания
TIGHTLY COUPLED MEMORY UNIT SQ
ARM® Cortex®-M7
ITCM DTCM
DEBUG ETM/ITM trace
Отладка
AHBD
PREFETCH
UNIT
AXI to Multi-AHB
Внешняя память Внутренняя память
I-Cache D-Cache
ART
FLASH
64-бит
64-бит
256-бит
Резюме
1. Супер скалярная архитектура
→ 2 инструкции за 1 такт
2. Ветвление за 1 такт
3. Система кэш менеджмента для
работы с медленной памятью
4. Развитая архитектура для
работы с большими объемами
данных
11
1000 CoreMark
Семейство STM32F7
Портфолио семейства STM32 13
09/12/2015 Presentation Title
75 93 106 177 245 398 608 1000 273 CoreMark
14 Портфолио STM32F7 (1/2) 3/7
Co
rte
x®
-M7
– 2
16
MH
z
Acceleration
• ART Accelerator™
• L1 cache: 4K+4K data
and instruction cache
• Chrom-ART
Accelerator™
• Single Precision FPU
Connectivity
• 2 x USB2.0 OTG FS/HS
• SDIO
• USART, UART, SPI, I²C
• 2 x CAN
• HDMI-CEC
Audio
• I²S + audio PLL
• 2 x SAI
• 2 x 12-bit DAC
• SPDIF-RX
Others
• 16 and 32-bit timers
• 3 x 12-bit ADC
(2.4Msps)
• Low voltage 1.7 to 3.6V
• 85°C and 105°C range
Product
line
FCPU
(MHz)
FLASH
(bytes)
RAM
(KB)
Quad -
SPI
Ethernet
I/F
IEEE
1588
Camera
I/F FMC
TFT
controller
Hardware
Crypto /
hash
STM32F756 216 512 K
to 1 M
320K (incl.64K
DTCM) + 16K
ITCM + 4K
backup
STM32F746 216 512 K
to 1 M
320K (incl.64K
DTCM) + 16K
ITCM + 4K
backup
STM32F745 216 512 K
to 1 M
320K (incl.64K
DTCM) + 16K
ITCM + 4K
backup
Портфолио STM32 F7 (2/2) 15
LQFP100 LQFP144
WLCSP143
LQFP176
UFBGA176 LQFP208 TFBGA216
512 K
1 M
Размер FLASH
(байт)
STM32F746VG STM32F746ZG STM32F746IG STM32F746BG STM32F746NG
STM32F746VE STM32F746ZE STM32F746IE STM32F746BE STM32F746NE
STM32F756VG STM32F756ZG STM32F756IG STM32F756BG STM32F756NG
STM32F756VE STM32F756ZE STM32F756IE STM32F756BE STM32F756NE
С крипто/hash сопроцессором
Количество
ножек
Без крипто/hash сопроцессора
Отладочные платы 16
STM32746G-EVAL
STM32756G-EVAL
STM32F746G-DISCO
• 216 МГц STM32F756NGH6 или STM32F746NGH6
• SAI аудио ЦАП, стерео audio jack, микрофон
• SDRAM 8Mx32 SDRAM, 1Mx16 бит SRAM, 8Mx16
бит NOR FLASH и 512 Mбит QuadSPI NOR FLASH
• Цветной 5.7’ 640 x 480 TFT LCD сенсорный экран
• Ethernet EEE-802.3-2002
• USB OTG HS/FS, разъем micro-AB
• CAN 2.0A/B
• Модуль камеры
• 216 МГц STM32F746NGH6, 1 Mб Flash, 340 Kб RAM
• Цветной 4.3’ 480x272 LCD-TFT сенсорный экран
• 128-Mбит Quad-SPI Flash, 128-Mбит SDRAM
• Ethernet IEEE-802.3-2002
• USB OTG HS/FS, разъем micro-AB
• SAI аудио кодек, стерео выход
• Два МЭМС микрофона
• Модуль камеры
• Поддержка VCP, MS и отладочного порта
Среды разработки, ПО
ПО для разработки
• Генерация готового кода и проекта.
Возможность фокусировки на
собственном приложении
• Свойства:
• HAL
• RTOS, USB, TCP/IP, файловая
система, графическая библиотека
• Использование максимальных
возможностей STM32 с
минимальной избыточностью
кода. Простые функции с прямым
доступом к регистрам.
STM32CubeMX:
Совместимость
STM32Snippets:
Оптимизация
Hardware Abstraction Layer API
HAL
ST boards
TCP/IP FAT
File
System
Graphics USB
Host &
Device
Библиотеки, стеки, ОС
RTOS
Приложение
18
Мастер портов в/в
Мастер
тактирования
Wizard периферии и ПО
Мастер
энергопотребления
STM32CubeMX 19
Бесплатные среды IDE для разработки
Среда разработки
System Workbench for STM32
STM32 Community
• Среда основана на бесплатных кодах
• Графическая оболочка – Eclipse
• Компилятор – GCC
22
Основные моменты
• Поддерживаемый функционал:
• Аппаратная отладка на ST-LINK
• Мастер создания проектов с HAL или SPL
• Совместимость с STM32CubeMX
• Поддержка
• Компания AC6 является партнером ST
• Техническая поддержка осуществляется через
форум http://www.openstm32.org/forum7
23
Установка среды разработки
• Воможны 2 варианта установки
• Из дистрибутива
• Путем установки плагина к уже установленному
ранее Eclipse
24
Генератор кода STM32CubeMX
Философия CubeMX
• STM32CubeMX – это конфигуратор, который позволяет удобное
управлениями драйверами и всеми библиотеками кода от ST и
партнеров для микроконтллеров STM32
• Программа бесплатная
• Драйвера и другой код - бесплатные
• На выходе STM32CubeMX выдает проект, который можно открыть в
среде программированя
• Исходные файлы
• В среде программирования можно добавлять свой код и иметь
возможность изменять проект в STM32 CubeMX.
26
Установка STM32CubeMX • Скачиваем STM32CubeMX
• http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/P
F259242?s_searchtype=partnumber
• STM32CubeMX треубет для своей работы java
• Если пакет java не установлен, то установите его под свою версию
Windows (32/64 бит)
• После чего можно вручную заказать пакеты драйверов под то или
иное подсемейство STM32
• STM32CubeL0
• STM32CubeL1
• STM32CubeF0
• STM32CubeF1
• STM32CubeF2
• STM32CubeF3
• STM32CubeF4
27
Установка STM32CubeMX • Установите STM32CubeMX
• Запустите STM32CubeMX
28
Репозиторий
CubeMX Project
Для генерации
проекта нужно
сконфигурировать
репозиторий STM32CubeMX
генерирует
проект
Настройка STM32CubeMX
• В случае, если вы вручную скачали пакеты, то их можно добавить в
репозиторий:
• MENU>Help>Updater Settings…
• Можете видеть и менять папку репозитория
• По умолчанию C:/User/Acc_name/STM32Cube/Repository/
• Лучше избегать кириллических символов в пути к репозиторию,
в идеале – его лучше разместить в корневой директории
• Можно загрузить репозиторий автоматически
29
CubeMX
repository
Путь к
репозиторию
Настройка STM32CubeMX
• Как выглядит репозиторий в файловой системе компьютера
• Для автоматической загрузки:
• MENU>Help>Install New Libraries
• Выбираете нужный пакет
• Нажимаете кнопку Install Now
30
Пример того,
как выглядит
репозиторий Автоматическая загрузка
в STM32CubeMX
Настройка STM32CubeMX
Для ручной установки войдите:
• MENU>Help>Install New Libraries
• Нажмите кнопку “From Local…”
• Выберите скаченный zip
\HAL\STM32Cube_FW_F7_V1.0.0.zip
31
Возможности STM32CubeMX • CubeMX выдает проектные файлы под следующие среды
разработки:
• Keil
• IAR
• Atollic
• System Workbench (БЕСПЛАТНЫЙ)
• Для работы с отладочными платами потребуется так же драйвер
ST-Link
• STSW-LINK003 driver for Win XP/Vista/7
• STSW-LINK006 driver for Win 8
• Для установки требуется иметь Права администратора
32
STM32CubeMX: Выбор микроконтроллера 33
• Фильтрация по:
• Cерии
• Семейству
• Типу корпуса
• Перифериии
• и т. д.
STM32CubeMX: Конфигуратор выводов 34
• Конфигурирование
портов в/в
• Автоматический
перенос функций
портов (ремап)
• Автоматическая
привязка
периферии к
библиотекам
(FatFS, LWIP, …)
STM32CubeMX: Настройка периферии 35
• Цветовые подсказки:
• Если пункт затенен, то
следует выбрать
соответствующую
периферию
• Зеленый цвет –
периферийный модуль
доступен без ограничений
• Желтый цвет –
периферийный модуль с
ограниченным
функционалом
• Красный цвет –
периферийный модуль не
доступен в данной
конфигурации
микроконтроллера
Серый
Нужно включить
периферию
Зеленый
периферия
активна
Желтый:
функционал
ограничен
Красный:
функционал не
доступен
STM32CubeMX: Распределение выводов 36
Выводы периферийных модулей автоматически
переходят на неиспользуемые выводы в случае
«пересечений»
1. Выбираем
I2C1
2. Назначение
выводов I2C1
3. Выбираем
SWD
4. Конфликт выводов I2C1
и SWD. Вывод I2C1_SDA
перемещен на
альтернативную позицию
STM32CubeMX: Распределение выводов 37
Можно отключить автоматическое
распределение периферии по выводам:
Установив данный
параметр
STM32CubeMX не
сможет
распределять
выводы на
альтернативные
I2C1 не может быть
переназначен на новые
выводы, поэтому модуль
SWD/JTAG невозможно
использовать
STM32CubeMX: Конфигурация выводов 38
• Выводы периферии можно переназначать на другие вручную
• Нажимаете Ctrl + Click мышкой на выводе и перетягиваете на другой пин
(Ctrl не отпускайте)
1. Ctrl + Click
мышкой на вывод
2. Подсвечивается
альтернативная
позиция
3. Перемещаем
вывод на новую
позицию
STM32CubeMX: Настройка тактирования 39
• Автоматический расчет частот • Подсветка ошибок • Визуальный конфигуратор
STM32CubeMX: Конфигурация периферии 40
• Настройка периферии в
графическом режиме
• Подсветка ошибок:
+ Не сконфигурировано
ⱱ Сконфигурировано
x Ошибка в
конфигурировании
STM32CubeMX: Конфигурация периферии
и библиотек 41
• Параметры привязаны к
системным настройкам
из документации
• Прерывания
• GPIO
• DMA
STM32CubeMX: Конфигурация периферии
и библиотек 42
• Активация и управление
прерываниями NVIC
• Управление параметрами GPIO
• Управление DMA
• Конфигурация запросов в
DMA
• Рабочие параметры ПО
(адрес буфера, …) не
задаются
STM32CubeMX: Настройка NVIC 43
• Управление всеми
прерываниями
• Работает сотировка
• Работает поиск
STM32CubeMX: Настройка DMA 44
• Настраиваются все DMA
каналы в одном месте
• Сортировка по каналам
• Установка параметров
обмена по DMA
STM32CubeMX: Панель настройки GPIO 45
• Большинство параметров
по умолчанию
устанавливаются в
правильное состояние
• Можно настроить время
нарастания фронтов
• Моржно изменять
параметры объединяя
пины группами
STM32CubeMX: Генерация кода 46
• Генерация всех файлов в Си
• Автоматическая подстройка под
среды разработки (IDE)
• Пользовательский код может
быть добавлен в специальные
вставки и не пропадет при
повторной регенерации проекта
• Все библиотеки копируются в
папку проекта (опционально)
STM32CubeMX: обновление библиотек 47
• Help -> Updater settings
• Можно устанавливать нахождение репозитория с
библиотеками
• Обновлять можно вручную и автоматически
• Поддерживает выход через прокси
• Help -> Install new libraries : управление
библиотеками
• Отметить мышкой нужные библиотеки
• Библиотеки бдут автоматом подкачаны и разархивированы
STM32CubeMX: Настройки проекта 48
• Project -> Settings
• Задаем имя проекта и
расположение
• Папка с именем проекта будет
создана автоматически.
• Следует выбрать среду(Keil, IAR,
Atollic, SW4STM32)
• Можно выбрать определенную
версию библиотек...
STM32CubeMX: генератор кода 49
• Опции генератора кода
• Копировать всю библиотеку или только
необходимое. Работать через репозиторий
• Сделать инициализацию в одном файле
stm32fYxx_hal_msp.c или для каждого модуля
создать свой файл
• Сохранять или не сохранять пользовательский
код
• Удалять или не удалять более не нужные файлы
проекта
• Неиспользуемые выводы переводить в
аналоговый режим(если SWD/JTAG не
активирован, эта опция отключит его)
• Включить «full assert» в проекте и код будет сам
себя тестировать на предмет некорректного
использования HAL
STM32CubeMX: Настройка проекта 50
Копирование всех библиотек в проект
Project Driver
Folder CubeMX
repository
Копирование всех
драйверов из
репозитория
STM32CubeMX
Файлы охраняются в папке
Ваша_Папка_Проекта/Drivers/STM32XXXX_HAL_Driver folder
В проект подключаются только
используемые файлы
STM32CubeMX: Настройка проекта 51
Копирование толко необходимых библиотек в проект
Project Driver
Folder
CubeMX
repository
Файлы только для
выбранной периферии
STM32CubeMX Сохраняются по пути
Ваша_Папка_Проекта/Drivers/STM32XXXX_HAL_Driver
STM32CubeMX: Настройка проекта 52
Нет копирования файлов. Только ссылка в репозиторий
Ссылка
В файлах проекта нет папки с
драйверами
Папка
драйверов в
проекте
STM32CubeMX
репозиторий
STM32CubeMX: Калькулятор потребления 53
• Настройка карты
потребления
контроллера
• Выбор батареи
• Создание графика
потребления
• Среднее потребление
• Средняя
производительность
ядра
• Время жизни от батареи
STM32CubeMX: Документация 54
Документ Описание
UM1718: STM32CubeMX for STM32
configuration and initialization C code
generation
Описание как использовать
STM32CubeMX
RN0094: STM32CubeMX release 4.11.0 Все изменения в версиях
библиотек
«Hello World»
Порты ввода - вывода
STM32F7 DISCOVERY 56
Разъем Arduino UNO
Встроенный ST-LINK
V2-1
Микроконтроллер STM32F7
Электропитание через
USB или внешний
источник напряжения
USB FS
Ethernet 100
Конфигурация GPIO
• Настраиваем тактирование
• Конфигурируем порт в/в
• Генерируем код
• Добавляем функцию HAL_Delay() и
HAL_GPIO_Toggle()
• Наблюдаем за миганием светодиода
57
Настройка GPIO
• Создаем проект в STM32CubeMX
• Menu -> File -> New Project
• Выбираем контроллер STM32F746NGH6
• Конфигурируем порт GPIOI, вывод 1 (PI1)
58
Настройка GPIO
• Включаем отладочный порт SWD/JTAG:
• Можно это сделать в дереве настройки портов в/в TAB -> Pinout ->SYS
• На отладочной плате выведен только SWD
• Если SWD/JTAG не активировать и выбрать Set all free pins as analog
(MENU -> Project -> Settings -> TAB -> Code Generator), процесс отладки
станет недоступен
59
Конфигурация тактирования
• Открываем вкладку Clock Configuration
• На поле HCLK вводим желаемую частоту и мастер настраивает все
блоки (PLL, делители) автоматически
60
Настройка GPIO • Заходим в закладку GPIO Configuration
TAB -> Configuration -> System -> GPIO
61
Настройка GPIO
• GPIO(Pin) Configuration
• Выбираем Push Pull mode
• No pull-up или pull-down
• Скорость HIGH обычно важна в
режиме работы порта SPI,
USART
• Нажимаем OK
62
Настройка GPIO • Максимальная скорость порта (maximum output speed)
• Влияет на наклон фронта при переключении порта из одного состояния в
другое
• Более высокая скорость GPIO увеличивает EMI и увеличивает
потребление STM32
• Поэтому не следует всем портам назначать максимальную скорость.
Т. е. мигание светодиодом с частотой 1Гц – это низкая скорость, но SPI на
45 МГц должен работать на максимальной скорости
63
LOW
HIGH
LOW
HIGH
LOW
HIGH
LOW
HIGH
GPIO output LOW speed GPIO output MEDIUM speed
GPIO output HIGH speed GPIO output FAST speed
• Menu -> Project -> Settings…
• Назовите проект
• Выберите SW4STM32
• Нажмите «OK»
• Генерируем код
• Menu -> Project -> Generate Code
64 Генерация кода проекта
Открываем System Workbench for STM32
• Открываем SW4STM32 (System workbench for STM32)
• Выбираем workspace path
• Удобнее всего генерировать код STM32CubeMX в ту же
папку, с которой работает программа
65
Первый запуск Eclipse 66
• Закройте начальное приглашение
• После этого Project Explorer и Code Browser
появятся на экране
Импорт проекта 67
• Menu -> File -> Import…
• Select Existing Project into
Workspace
• Next
Пишем свой код в Eclipse Modify 68
• Сейчас проект из STM32CubeMX находится
в System Workbench
• Добавляем мигание светодиодом в main()
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_GPIO_TogglePin(GPIOI,GPIO_PIN_1); HAL_Delay(500); } /* USER CODE END 3 */
Конфигурируем проект Eclipse 69
• Правой кнопкой мыши Project -> Properties
• Или нажимаем ALT+ENTER
Свойства проекта в Eclipse 70
• В ветке “C/C++ Build”
• Выбираем “Settings”
• Настройки проекта как в Keil, IAR…
(включая оптимизацию и т д)
Подготавливаем Eclipse Debug 71
• Открываем “Run/Debug
settings”
• Click “New…”
Подготавливаем Eclipse Debug 72
• Выбираем “Ac6 STM32 Debugging”
• Нажимаем “OK”
Подготавливаем Eclipse Debug 73
• Выбираем закладку Main
• Здесь можно выбрать ELF файл
• После этого мы может отлаживать
код, активировав отладку по F11
или через меню
Eclipse Run Вebug 74
• Отлаживаем!
• Остановить Debug можно нажав на
красный квадрат
• Переключатель между режимами
«С» и «Debug»
Конфигурация SPI
• Чтобы понять как исполдьзовать HAL для работы с
периферией так же активируем SPI
• Возвращаемся в CubeMX
• В классиеский режим Full Duplex
75
Конфигурация SPI
• Конфигурируем
основные
параметры
76
Конфигурация SPI
• Конфигурируем прерывания
• Активируем SPI прерывание
77
Конфигурация SPI
• Конфигурируем DMA каналы
78
Генерируем проект
• Меню Project Generate Code
• В System Workbench
• Правой кнопкой мыши по проекту
и выбираем “Refresh”
• Компилируем Ctrl + B
• Запускаем отладку
79
Использование HAL
• Каждое прерывание, которые выбрано
создается в среде. И в каждом прерывании –
обработчик:
• Писать свой код в перрываниях не следует
• Достаточно пользоваться CallBack функциями
HAL
80
Использование HAL
• Находим необходимую функцию в файле драйвера:
• И копируем в свой проект необходимый call back
81
USB. Виртуальный COM-порт (CDC)
Цели работы
• Необходимо создать приложение «Эхо»
• При подключении к USB-FSПК плата должна
обнаруживатьс как виртуальный ком-порт (CDC VCP)
• Изучить как подключиться к драйверу CDC из
приложения
83
Что нам необходимо
• Потребуется установить любую программу-терминал
• Putty, kitty, hyper terminal или подобную
• CDC драйвер встроен в Windows, но, возможно
потребуется доустановить inf файл
• inf файл – в установщике STSW-STM32102 на st.com
• Потребуется micro-USB кабель
84
Создаем проект?
• Мы будем использовать предыдущий проект
• Просто будем его донастраивать в STM32CubeMX и обновлять
в SW4STM32 (F5)
85
Активируем USB FS
• В дереве Pinout открываем ветку USB_OTG_FS
• Выбираем режим Device_Only
• В закладке MiddleWares
• Активируем CDC VCP драйвер
86
Конфигурируем тактирование
• Конфигурация тактирвоания
• Заходим в pinout
• Открываем ветку RCC («Reset and Clock Control»)
• Выводы на корпусе PH0 и PH1 должны окраситься в зеленый цвет
87
Конфигурируем тактирование
• По умолчанию кварцевый резонатор на 25 МГц – как и на плате
Discovery
• Далее так же в HCLK вводим желаемую частоту и мастер делает
остальное
88
Конфигурируем USB
• В закладке Configuration выбираем Connectivity USB_FS
• Выключаем VBUS sensing
• Нажимаем “OK”
89
Генерируем проект
• МенюProjectGenerate Code
• В System Workbench
• Нажимаем правой кнопкой мыши по проекту
и выбираем “Refresh”
• Компилируем Ctrl+B
• Запускаем отладку
90
Отладчик Eclipse
• Запускаем приложение
• Подключаем кабель micro-USB
• В ближний разъем к ST-LINK (USB
FS)
• Открываем диспетчер устройств
Windows
• В списке COM портов должен
появиться новый порт
91
Добавляем нужный код
• Перезапускаем прием новых пакетов каждый раз при приеме
• Для этого открываем файл usb_cdc_if.c и редактируем функцию
CDC_Receive_FS
92
void CDC_Receive_FS (uint8_t* Buf, uint32_t *Len) { /* USER CODE BEGIN 6 */ USBD_CDC_ReceivePacket(hUsbDevice_0); return (USBD_OK);
/* USER CODE END 6 */ } … uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len) { uint8_t result = USBD_OK; /* USER CODE BEGIN 7 */ USBD_CDC_SetTxBuffer(hUsbDevice_0, Buf, Len); result = USBD_CDC_TransmitPacket(hUsbDevice_0); /* USER CODE END 7 */ return result; }
Добавляем нужный код 93
void CDC_Receive_FS (uint8_t* Buf, uint32_t *Len) { /* USER CODE BEGIN 6 */ USBD_CDC_CDC_Transmit_FS(Buf, *Len); ReceivePacket(hUsbDevice_0); return (USBD_OK);
/* USER CODE END 6 */ } … uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len) { uint8_t result = USBD_OK; /* USER CODE BEGIN 7 */ USBD_CDC_SetTxBuffer(hUsbDevice_0, Buf, Len); result = USBD_CDC_TransmitPacket(hUsbDevice_0); /* USER CODE END 7 */ return result; }
• Сделаем приложение - эхо
• Продолжаем редактировать usb_cdc_if.c, добавляем функцию
USBD_CDC_CDC_Transmit_FS
Проверка работоспособности
• Открываем терминальную программу
• Подключаемся к Виртуальному COM порту
• И передаем любой текст, на экране должно
появиться эхо этого текста
94
Ethernet. Web-Server (lwIP)
Цели проекта
• Ведь в репозитории находится пример lwIP/http – не проще
ли его взять за основу?:
• К сожалению пример не основан на STM32CubeMX
• Не понятно как сделать проект в STM32CubeMX
• В примере из репозитория простой HTTP сервер.
Зачастую HTTP во встраиваемых приложениях редко
актуален
96
Возможности lwIP
• lwIP - популярный TCP/IP стек для микроконтроллеров:
• Оптимизирован под маленькие FLASH/RAM
• Оптимизирован под малую производительность контроллера
• Поддерживает RTOS
• В исходных кодах
• Бесплатный!
• Специальный API, опциональный Berkeley-like socket API
• Дополнения: HTTP, SNTP, SSL
97
Основы lwIP/TCP 98
• FreeRTOS и lwIP
• Использовать или не использовать FreeRTOS?
• Что такое socket?
• Сколько сокетов может существовать на одном
соединении TCP?
• Несколько уровней доступа (API):
• Сокеты
• Netconn
• Буферизация
Проект в STM32CubeMX 99
• Продолжаем редактировать наш
проект
• В периферийной ветке
• Активировать Eth в режим RMII
• В MiddleWares
• Активировать FreeRTOS
• Активировать lwIP
• Переходим в Clock configuration
Конфигурируем тактирование
• Никаких изменений здесь делать не трубется, переходим в
Configuration
100
Конфигурация Ethernet 101
• Конфигурируем Connectivity ETH
• Установить PHY адрес 0
• Активируем прерывание в NVIC
Конфигурируем lwIP 102
• В поле Configuration Middlewares
нажимаем кнопку LWIP
• Будем подклчюать F7-DISCO напрямую
в Ethуктуе порт ПК. Но ПК не раздает IP
адреса, потому выключаем сервис
DHCP
• Устанавливаем вручную IP 192.168.0.10
• И subnet mask 255.255.255.0
Конфигурация
FreeRTOS 103
• Увеличить кучу (heap) ОС
• Потому что lwIP будет использовать
кучу RTOS
• Создадим «задачу» для ETH
Генерируем проект 104
• Генерируем проект
• В Eclipse обновляем проект
Добавляем код 105
void StartTaskEth(void const * argument)
{
/* USER CODE BEGIN StartTaskEth */
struct netconn *conn, *newconn;
err_t err, accept_err;
/* Create a new TCP connection handle */
conn = netconn_new(NETCONN_TCP);
if (conn!= NULL)
{
/* Bind to port 80 (HTTP) with default IP address */
err = netconn_bind(conn, NULL, 80);
if (err == ERR_OK)
{
/* Put the connection into LISTEN state */
netconn_listen(conn);
• В нашу задачу ETH добавляем
код работы с TCP
• Файл freertos.c
• Очистить содержимое задачи и
добавить свое между
• /* USER CODE BEGIN
StartTaskEth */
• /* USER CODE END
StartTaskEth */
Добавляем код 106
/* accept any icoming connection */
accept_err = netconn_accept(conn, &newconn);
if(accept_err == ERR_OK)
{
/* serve connection */
while (1)
{
netconn_write(newconn, (const unsigned
char*)("test\r\n"), (size_t)6, NETCONN_COPY);
vTaskDelay(1000);
}
}
}
}
/* USER CODE END StartTaskEth */
}
• Не забываем
подключить хидеры в
freertos.c
/* USER CODE BEGIN Includes */
#include "stm32f7xx_hal.h"
#include "lwip/opt.h"
#include "lwip/arch.h"
#include "lwip/api.h"
/* USER CODE END Includes */
Тестирование 107
• Соедините плату с
компьютером проводом
Ethernet
• Запустите приложение
• Откройте установки
проводного сетевого
соединения:
• Введдите IP 192.168.0.1
• Нажмите ОК и немного
подождите (порядка минуты)
Настраиваем терминал 108
• Открываем HyperTerminal (или любую
другую программу)
• Создаем новое соединение
• Выбераем TCP/IP (вместо COM порта)
• Задаем IP адрес
• 192.168.0.10
• 80
• OK
Приложение ЭХО 109
• Создать такое приложение очень просто –
используем функцию приема:
• struct *inbuf;
• netconn_recv(conn, &inbuf);
Спасибо за внимание!