web семинар stm32cubemx• «hello world», создание и конфигурация...

Post on 27-Sep-2020

35 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

-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);

Спасибо за внимание!

top related