Upload
others
View
40
Download
0
Embed Size (px)
Citation preview
Тренинг STM32F0
ST-LINK
FS USB-DEVICE
LD3
LD5
LD6
LD4
B1
USART1
PC8
PC9
PC6
PC7
PA0
PA9-TX PA10-RX
План GPIO и прерывания DMA и последовательный интерфейс Реализация USB-Device
1. Установлен ли софт? 2. Есть ли USB-кабель?
USART3 PC4-TX
PC11-RX
Подготовка
Установка библиотек для STM32F0 в STM32CubeMX
Скопировать файлы
Подготовка Установка библиотек для STM32F0 в STM32CubeMX
Управление GPIO и прерывания
Тренинг STM32F0
GPIO и прерывания
ST-LINK
LD3
LD6
B1
PC8
PC9
PC6
PC7
PA0
Устройство GPIO
Основы обработки прерываний
Практическая работа
LD5
LD4
Порты ввода-вывода (GPIO)
OUTPUT
Push-Pull
Open drain (Pull-up, Pull-down)
INPUT
Floating (Pull-up, Pull-down)
Analog
2MHz
10MHz
50MHz
................... .....
к / от ПЕРИФЕРИИ
PIN
Без конфликтов
АЦП / ЦАП Touch
IDR ODR
BSRR
до 16
стандартные / 5V-устойчивость
ESD (5VT)
Гибкость
Быстрое переключение каждые два такта
Механизм блокировки состояний выводов
Битовая запись ЧТЕНИЕ/ЗАПИСЬ GPIO
25mA max
Особенности GPIO До 55 многофунциональных двунаправленных линий доступно в 64-выводном корпусе (86%, в STM32F1 – 80%)
Практически все выводы толерантны к 5В (кроме входов АЦП)
Все стандартные выводы доступны на 5 портах : GPIOA [0..15], GPIOB[0..15], GPIOC[0..15], GPIOD[2], GPIOF[0,1,4..7]
Атомарная установка и сброс через регистры BSRR и BRR
Подключены к шине AHB - макс. частота переключения – 12 МГц
Блокировка состояния выводов на портах A и B (GPIOx_LCKR)
Настраиваемая скорость нарастания – до 50 МГц
55 выводов могут быть источником внешнего прерывания для вывода МК из сна
Управление GPIO
Регистры настройки
GPIOx_MODER
GPIOx_OTYPER
GPIOx_OSPEEDR
GPIOx_PUPDR
Регистры данных
GPIOx_IDR
GPIOx_ODR
Регистр установки/сброса
GPIOx_BSRR
У всех портов
Дополнительно у портов А и В
Регистр блокировки
GPIOx_LCKR
Выбор альтернативного режима
GPIOx_AFRH
GPIOx_AFRL
У STM32F07x и STM32F09x есть на портах C, D, E
Порт Е доступен только у STM32F07x и STM32F09x
Структура вывода GPIO
MODER(i) [1:0]
OTYPER(i) [1:0]
Режим работы PUPDR(i)
[1:0]
11 Analog
x Analog mode x
01 Output
0
0 0 0 1 1 0
1
Output Push Pull Output Push Pull with Pull-up Output Push Pull with Pull-down
10 Alternate
0
1 0 0 0 1 1 0
0 0 0 1 1 0
Alternate Function Open Drain Alternate Function OD Pull-up Alternate Function OD Pull-down
00 Input
x 0 0 0 1 1 0
* В режиме выхода скорость I/O настраивается регистром OSPEEDR: 2МГц, 10МГц или 50МГц
Режим работы GPIO
0 0 0 1 1 0
Output Open Drain Output Open Drain with Pull-up Output Open Drain with Pull-down
Input floating Input with Pull-up Input with Pull-down
Alternate Function Push Pull Alternate Function PP Pull-up Alternate Function PP Pull-down
Режим I/O: General Purpose Сброс и сразу после сброса: I/O настроены на вход в режиме floating.
Отладочные выводы после сброса находятся в альтернативном режиме с подтяжкой:
PA14: SWCLK – pull-down PA13: SWDIO – pull-up
При настройке порта на выход: - регистр GPIOx_ODR – на выходные пины - выходной буфер включен - тригер Шмитта включен - состояние выходных пинов доступно для чтения в GPIOx_IDR
При настройке порта на вход: - данные в регистр GPIOx_IDR защелкиваются на каждый такт шины AHB - тригер Шмитта включен - выходной буфер отключен
Регистр GPIOx_PUPDR: подключение подтягивающего резистора (up/down)
I/O: Альтернативный режим Через мультиплексор к каждому выводу I/O vможет быть подключено до 16 периферийных сигналов (AF0..AF15)
Настройка: выводы 0…7 - GPIOx_AFRL выводы 8…15 - GPIOx_AFRH
По умолчанию после сброса: все выводы I/O подключены к AF0 выводы DEBUG – настроены на режим отладки
Детальная карта подключений AF0…15 – в документации
При настройке порта на альтернативный режим: - выходной буфер управляется сигналами от периферийного модуля - выходной буфер может работать в режиме open-drain или push-pull - тригер Шмитта включен - могут быть подключены подтягивающие резисторы - состояние выходных пинов доступно для чтения в GPIOx_IDR
AF0 (SPI1_MISO)
AF1 (TIM3_CH1)
AF2 (TIM1_BKIN)
AF7 (COMP1_OUT)
Pin x (0…7)
I/O: Аналоговый режим
При настройке порта в аналоговый режим: - выходной буфер выключен - тригер Шмитта выключен, что приводит к нулевому потреблению энергии - выход тригера Шмитта переведен в состояние «0»
- подтягивающие резисторы запрещены - чтение регистра GPIOx_IDR возвращает нули
I/O: внешние прерывания
Все порты могут быть источником внешнего прерывания
GPIO НЕ должен быть в аналоговом режиме (АЦП, ЦАП) или тактирующим входом
Особые режимы GPIO
• Использование выводов генераторов HSE или LSE как GPIO – Когда HSE или LSE отключены ( состояние по умолчанию после сброса),
соответствующие выводы могут использоваться как GPIO.
– Когда генератор работает в режиме внешнего тактирующего сигнала, только OSC_IN или OSC32_IN зарезервированы, а OSC_OUT или OSC32_OUT могут использоваться как GPIO.
• Использование выводов GPIO блока RTC – GPIO функционал выводов PC13/PC14/PC15 сбрасывается в режиме
Standby. В случае если настройка данных выводов не выполнена модулем RTC, эти выводы устанавливаются в режим аналогового входа.
Прерывания
NVIC: прерывания и события
Основные характеристики: - 32 канала прерываний (не считая 16 прерываний ядра Cortex-M0) - 4 уровня приоритета прерываний - низкая задержка обработки прерываний и исключений - управление питанием
CPU Cortex-M0
NVIC
EXTI
DMA
ADC
I2C
SPI …
GPIO
Nested vectored interrupt controller
Одновременные прерывания
PUSH POP ISR 1 PUSH POP ISR 2
PUSH ISR 1 POP ISR 2
26 16 26 16
16
IRQ1
IRQ2
ARM7 Ассемблерный код обработки прерываний
Cortex-M0 Аппаратная обработка
16
42 ТАКТА
Приоритет
Tail-chaining
ARM7 • 26 тактов на переход от IRQ1 к ISR1
•до 42 тактов в худшем случае •42 такта на переход от ISR1 к ISR2 •16 тактов для возврата из ISR2
Cortex-M0 • 16 тактов на переход от IRQ1 к ISR1 • 6 тактов на переход от ISR1 к ISR2 •16 тактов на выход из ISR2
6
Обработка одновременных прерываний
Позднее прерывание
ISR 2
IRQ1
IRQ2
ISR 2
Tail-Chaining
ISR 1 PUSH PUSH POP POP
PUSH POP
ARM7
Cortex-M0
Cortex-M0 • Сохранение стека перед ISR 2 прерывается • Сохранение продолжается, но для нового вектора • Задержка перед ISR1 зависит от этапа PUSH, для чтения таблицы векторов нужно 4 цикла • Переход к ISR 2
ARM7 • 26 тактов на вход ISR2 • Запрос IRQ1 требует еще 26 тактов для входа в ISR 1 • 16 тактов на возврат из SR 1 к ISR 2
26 16 16 26
16 6
ISR 1
16
Обработка смещенных прерываний
Приоритет
EXTI: прерывания и события
Основные характеристики: - разрешение и настройка внешних прерываний - генерация до 32 запросов прерываний/событий в NVIC - маскирование на каждой линии прерывания/события - независимый триггер для линии внешнего прерывания/события - выделенный статусный бит для линии внешнего прерывания - эмуляция всех запросов внешних событий
CPU Cortex-M0
NVIC
EXTI
DMA
ADC
I2C
SPI …
GPIO
Extended interrupts and events controller
Обслуживает внутренние и внешние асинхронные события/прерывания
Формирует запросы в NVIC, CPU и Power Manager
Структура EXTI
EXTI: структура
• Управляет внешними и внутренними асинхронными событиями/прерываниями, формирует запросы к CPU/NVIC и wake-up-запросы менеджеру питания
• Некоторая периферия (UART, I2C, CEC, comparators) может формировать события не только в режиме run/sleep, а также в режиме stop для вывода МК из сна.
• Эти модули могут формировать как асинхронные так и синхронизированные с (APB clock) версии события.
• Другие функции такие же или похожие на STM32F1x
До 32 запросов Прерываний / Событий : До 55 выводов GPIO могут быть подключены к EXTI (0..15) EXTI 16 - PVD output EXTI 17 - RTC Alarm event EXTI 18 – USB wake up EXTI 19 - RTC tamper and Timestamps EXTI 20 - RTC tamper and Timestamps . . . . . . . . .
EXTI
[15
:0]
Interrupt Mask Register
Pending Request Register
Software Interrupt Event Register
Rising Trigger Selection Register
To NVIC
Edge Detect Circuit
Pulse Generator
Falling Trigger Selection Register
Event Mask Register
EXTI: расширенный контроллер прерываний и событий
Подключение GPIO к EXTI
EXTI: подключение GPIO Все входы GPIO подключены к 16 линиям EXTI следующим образом
Работа
Практическая работа №1 GPIO и прерывания
ST-LINK
LD5
LD4
B1
PC9
PC6
PA0
External Interrupt
RUN_Status
Interrupt_Status
Практическая работа №1 Создание проекта в CubeMX
Практическая работа №1 Создание проекта в CubeMX
Практическая работа №1 Ключевые моменты: настройка выводов
Практическая работа №1 Ключевые моменты: тактирование – Clock Configuration
Практическая работа №1 Ключевые моменты: настройка PA0 как внешнего прерывания
Практическая работа №1 Ключевые моменты: настройка PA0 как внешнего прерывания
Практическая работа №1 Ключевые моменты: настройка PA0 как внешнего прерывания
Практическая работа №1 Ключевые моменты: настройка PA0 как внешнего прерывания
Практическая работа №1 Сохранение проекта
1
2
3
4
Практическая работа №1 Открытие проекта
Практическая работа №1 Главный файл программы main.c
Инициализация
Практическая работа №1 Главный файл программы main.c
Светодиод Run_Status
Практическая работа №1 Файл описания прерываний stm32f0xx_it.c
Обработчик прерывания EXTI0_1
Практическая работа №1 Файл описания прерываний stm32f0xx_it.c
Переход к функции обработчика прерывания
Практическая работа №1 Файл описания прерываний stm32f0xx_it.c
Переход к функции CallBack прерывания
Практическая работа №1 Файл stm32f0xx_hal_gpio
Копируем объявление CallBack прерывания
Практическая работа №1 Главный файл программы main.c
Вставляем объявление функции CallBack. Добавляем управление светодиодом InterruptStatus.
Практическая работа №1 Компилируем и запускаем отладку.
Проверяем работу программы.
Периферия передачи данных USART и DMA
46
Тренинг STM32F0
Последовательный интерфейс и DMA
ST-LINK
LD3
LD5
LD6
LD4
B1
USART1
PC8
PC9
PC6
PC7
PA0
PA9-TX PA10-RX
Устройство USART
Организация DMA
Практическая работа
Устройство USART
Синхронный и асинхронный режимы
Программируемый генератор - скорость до 6 Мбит/c
LIN, IrDA, SmartCard, Modbus
Поддержка CTS/RTS для RS-485
Два домена тактирования: - работа и пробуждение по USART из режима STOP - удобная настройка скорости независимо от перестройки PCLK
Автоопределение скорости
Потоковый обмен данными с использованием DMA
Возможность перестановки выводов TX/RX – однопроводный интерфейс
14 прерываний
Режим оверсэмплинга 8x и 16x
Кадр • 8, 9 бит данных • 1, 1.5, 2 стоповых бит • Четность (Even, odd, none) • Oversampling /8 и /16 (по умолч.)
Режимы • Асинхронный LIN SmartCard (T=0, T=1) IrDA Базовый MODBUS Multiprocessor communication Полудуплекс
• Синхронный ( вывод CLK line)
Прочее • Поддержка DMA • Аппаратное управление потоком (RTS, CTS) • Автоопределение скорости • Выбор порядка данных (MSB/LSB) • Переключаемые выводы Tx/RX • Пробуждение из STOP (!!! Без потерь !!!)
NO data loss on wakeup
6Mbps
Устройство USART
50
Tx
Rx
SCLK
nRTS /DE
nCTS
Transmit Data Register
Receive Data Register
Transmit. Receiver
IrDA SIR Encoder / Decoder
Апапаратное управление
потоком
Запросы DMA
Запросы IRQ Пробуждение из STOP
Управление DMA
Прерывания Управление/
Статус
Baud Rate
Generator
SCLK Control
Адрес узла
Модуль пробуждения
Управление приемом
Управление передачей
USART peripheral
Такт PCLK SYSCLK HSI LSE
USART – Блок-схема
51
Типовое пробуждение из режима STOP:
После пробуждения, бит WUF = 1
Переход в режим STOP
Выбор «пробуждающего» события
RXNE Start bit Address Match
Установка бита UESM
Выбор тактирования USART HSI LSE
bit
WUSTOP
TM
tDWU
10
Дополнительная девиация, из-за
времени пробуждения:
M = 0 для 8 бит, 1 для 9 бит
tWUSTOP время на выход из STOP ( 4.2 мкс
тип.)
Первый байт корректно принимается,
если эта задержка учитывается в общем
отклонении
Выход из режима STOP
USART: передатчик
Прием слова 7/8/9 бит
Разрешение передачи: бит TE в регистре USARTx_CR1
Разрешение DMA: бит DMAT в регистре USARTx_CR3
Регистр передачи: USARTx_TDR
USART: приемник
Передача слова 7/8/9 бит
Разрешение приема: бит RE в регистре USARTx_CR1
Разрешение DMA: бит DMAR в регистре USARTx_CR3
Регистр передачи: USARTx_RDR
4 режима автоматического определения скорости
USART: прерывания
USART: использование DMA
Запросы для Rx и Tx буфера формируются независимо
Передача
Адрес регистра USARTx_TDR записывается как приемник DMA
Адрес RAM-области записывается как источник DMA
Данные из RAM в USARTx_TDR переносятся автоматом при каждом событии TXE
Указывается количество байт для пересылки через DMA
Прерывание DMA устанавливается на полную/половинную передачу
Прием
Адрес регистра USARTx_RDR записывается как источник DMA
Адрес RAM-области записывается как приемник DMA
Данные из USARTx_RDR переносятся в RAM автоматом при каждом событии RXNE
Указывается количество байт для пересылки через DMA
Прерывание DMA устанавливается на полную/половинную передачу
По прерыванию DMA новые данные для передачи помещаются в RAM
По прерыванию DMA принятые данные извлекаются из RAM
DMA: блок-схема
DMA: основные свойства
До 7 независимых настраиваемых каналов передачи (на STM32F09x + еще 5)
4 уровня ручного приоритета + приоритет по номеру запроса
Независимые размеры источника и приемника данных
Поддержка цикличного режима работы
3 флага: передача половины буфера, передача окончена, ошибка передачи
Передача данных: память-память, память <-> периферия и периферия-периферия
Количество пересылок – до 65535
Доступ к FLASH, SRAM, периферии AHB и APB как к источнику и приемнику
DMA: прерывания
Передача данных память-память, память <-> периферия и периферия-периферия
DMA: мультиплексор
59
D
MA
SW TRIGGER
DMA REQUEST
OR
SW TRIGGER
OR
SW TRIGGER
OR
SW TRIGGER
OR
Высокий приоритет Низкий приоритет
Channel3 Channel1 Channel2 Channel5
SW TRIGGER
OR
Channel4
ADC TIM2_CH3 TIM17_CH1 TIM17_UP
ADC SPI1_RX USART1_TX I2C1_TX TIM1_CH1 TIM2_UP TIM3_CH3 TIM17_CH1 TIM17_UP
SPI1_TX USART1_RX I2C1_RX TIM1_CH2 TIM2_CH2 TIM3_CH4 TIM3_UP TIM6_UP DAC TIM16_CH1 TIM16_UP
SPI2_RX USART1_TX I2C2_TX USART2_TX TIM1_CH4 TIM1_TRIG TIM1_COM TIM2_CH4 TIM3_CH1 TIM3_TRIG TIM16_CH1 TIM16_UP
SPI2_TX USART1_RX I2C2_RX USART2_RX TIM1_CH3 TIM1_UP TIM2_CH1 TIM15_CH1 TIM15_UP TIM15_TRIG TIM15_COM
Прим: Запросы, выделенные синим привязываются к каналу в зависимости от значения бита настройки в регистре SYSCFG_CFGR1
DMA: мультиплексор
Передача одного запроса
60
Request1 sample &
arbitration phase
Bus access Address computation Acknowledgement phase
1 такт 1 такт 2 такта 1 такт
Запрос 1
5 тактов на каждый запрос в лучшем случае
(источник и приемник находятся на шине AHB, CPU остановлен)
Request2 sample &
arbitration phase
Запрос 2
• Различные параметры могут влиять на время доступа к шине:
If the CPU is running
If source or destination is an APB Peripheral, it introduce a bridge latency. If CPU is competing with DMA to
access the APB Peripheral. (AHB frequency bigger than APB)
AHB and APB are same frequency
APB frequency is the half of AHB frequency
+ 2 cycles +3 cycles +5-6 cycles +4 cycles
STM32F0xx Training Day 1
DMA: 1 канал
Передача двух запросов
61
DMA: 2 канала
Для увеличения производительности новый запрос обслуживается во время
выполнения первого
• if source or destination is on APB, the transfer will take more cycles (+ 2 cycles for APB:AHB = 1:1)
HCLK
Ch. 1
Request
sample
& arb.
phase
Addr.
compu
tation
Ch. 2
Bus access Bus access Ack. phase
Bus access
Request
sample
& arb.
phase
Addr.
compu
tation
Ack. phase
Request
sample
& arb.
phase
Addr.
compu
tation
STM32F0xx Training Day 1
Практическая работа №2 – USART+DMA (30 мин)
ST-LINK
B1
USART1
PA0
PA9-TX PA10-RX
USART3 PC4-TX
PC11-RX
Буфер_TX
Буфер_RX
Байт 1
Байт 2
Байт 3
Байт 4 Байт 1
Байт 2 Байт 5
Байт 6
Байт 7
Байт 8
Практическая работа №2 – USART+DMA Разрешение UART
Практическая работа №2 – USART+DMA Настройка USART1
Практическая работа №2 – USART+DMA Параметры передачи USART1
Практическая работа №2 – USART+DMA Доавление DMA: USART1-TX
Практическая работа №2 – USART+DMA Настройка USART3
Практическая работа №2 – USART+DMA Параметры приема USART3
Практическая работа №2 – USART+DMA Доавление DMA: USART3-RX
Практическая работа №2 – USART+DMA Генерация проекта из Cube32MX
Практическая работа №2 – USART+DMA Объявление приемного (char RX) и передающего (char TX) буферов в памяти
Практическая работа №2 – USART+DMA Запуск DMA передачи и приема. Индикация выполнения программы.
Практическая работа №2 – USART+DMA Проверка аппаратного подключения
ST-LINK
USART3 PC11-RX
USART1 PA9-TX
Практическая работа №2 – USART+DMA Загрузка программы в МК и запуск отладки
Практическая работа №2 – USART+DMA Вывод переменных RX и TX в окно для наблюдения
Практическая работа №2 – USART+DMA Проверка содержимого буферов перед запуском программы
Практическая работа №2 – USART+DMA Запуск программы на выполнение
Практическая работа №2 – USART+DMA Остановка выполнения программы и проверка буферов
Интерфейсы USB и виртуальный COM-порт
81
Тренинг STM32F0
Практическая работа №3 – USB за 5 минут (40 мин)
STM32F04x, STM32F072 и STM32F078 – имеют одинаковый модуль USB
Периферия USB реализует интерфейс между full-speed USB 2.0 и шиной APB
Поддержка режимов suspend/resume, что позволяет отключать тактирование МК для меньшего потребления
Настраиваемое количество Endpoint (получатель пакетов): 1…8
До 1024 байт выделенной памяти SRAM для буфера
Генерация/проверка CRC
Поддержка двойного буфера для endpoint типа bulk/isochronous
Поддержка двойного буфера для endpoint типа bulk/isochronous
Поддержка управления питанием USB 2.0 Link
Поддержка заряда батарей по спецификации ревизии 1.2
Встроенный управляемый резистор подтяжки DP (connect/disconnect)
USB: основные характеристики
USB: блок-схема
• Crystal-less* USB 2.0 FS interface (12Mbit/s) with D+/D- resistors * Встроенный 48 MHz генератор с восстановлением сигнала. Не нужен внешний резонатор/кварц (экономия порядка 0.10$).
• Совместимость со спецификациями Link Power Management и Battery Charger Detection 1.2
• Библтотека USB FS Device интуитивно понятными API драйверами
– Примеры на базе 6 классов(Audio, CCID, CDC, HID, VCP, MSC). – Простая разработка приложений с использованием full-speed типов передачи данных (control, interrupt, bulk и
isochronous).
• Обновление прошивки в готовом устройстве «в поле» через USB (boot loader)
• Бесплатное лицензирование USB VID/PID от ST
USB: периферия
USB Battery Charging Detection (USB BCD)
• Позволяет определить тип источника питания на порта USB для максимально быстрой зарядки портативных устройств
У STM32Fxx2 есть специальные регистры, информирующие о линиях данных USB, возможности заряда батарей и типа порта SDP, CDP или DCP
USB Link Power Management (LPM)
• С LPM вводится новое энергосберегающее состояние “Sleep”, с более быстрым временем входа и выхода по сравнению со стандартным режимом “Suspend”.
• Режим LPM позволяет оптимизировать энергопотребление как хоста так и устройства, а также продлить жизнь батареи портативных устройств.
Практическая работа №3 – USB – Virtual COM-Port
USB-Device ST-Link
Практическая работа №3 – USB – Virtual COM-Port
Установка драйвера
Архив en.stsw-stm32102.zip
Практическая работа №3 – USB – Virtual COM-Port
Включение USB Device
Практическая работа №3 – USB – Virtual COM-Port
Выбор класса USB-устройства
Практическая работа №3 – USB – Virtual COM-Port
Функция приема данных по USB
Практическая работа №3 – USB – Virtual COM-Port
Добавление эха (передачи принятого символа)
Практическая работа №3 – USB – Virtual COM-Port
Подключение терминала