Освоение STM32 самостоятельно #2
Год издания: 2025
Автор: Русин Николай
Издательство: Издательские решения
ISBN: 978-5-0065-9034-2
Язык: Русский
Формат: PDF
Качество: Отсканированные страницы + слой распознанного текста
Количество страниц: 548
Описание: Эта вторая книга из серии «Освоение STM32 самостоятельно», а именно продолжение первой части с дополненной периферией, которой не было в первой части с глубоким рассмотрением как она работает.
Она адресована прежде всего тем, кто начинает знакомиться с микроконтроллерами (далее сокращенно МК) серии STM32, заинтересованными в том, чтобы научиться программировать эти МК как можно быстрее и эффективнее. Но, безусловно, книга будет полезна и тем кто уже имеет некоторый опыт в работе с МК и хочет быть в курсе тонких настроек программирования разной периферии МК.
Читатель может и не иметь базовых навыков и понятий языка программирования Си, на котором написаны примеры кода. Примеры в свою очередь разобраны достаточно подробно, а также необязательно быть профессиональным разработчиком цифровой электроники. Хорошим подспорьем будут умения работать на платформе Arduino. Особенно для тех, кто хочет изучить архитектуру от ARM STM32 на более на высоком уровне,уметь производить отладку системы на МК и стать полноценным профессионалом в направлении программирования Embedded Systems.
Примеры страниц (скриншоты)
Оглавление
ВВЕДЕНИЕ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Почему написаны книги .................................. . 11
Список сокращений ....................................... . 12
Использование отладочной платы NR Devetopment Btue Кit .. 13
Характеристики ......................................... . 13
ГЛАВА 1. Руководство использования ARM KEIL IDE ...... . 16
Соглашения по экосистеме принятые в книге . . . . . . . . . . . . 16
Включение скрытых меню режима отладки . . . . . . . . . . . . . . 21
Выбор и правильная настройка ST-Link программатора
в KEIL IDE .. .. .. .. . .. .. .. .. .. .. .. .. .. . . .. .. .. .. .. .. .. .. .. . 23
Подключение библиотек или файлов в проект на Keit IDE.. 30
Глава 2. Библиотека CMSIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Различные макросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Макрос SET BIT подробнее . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Макрос CLEAR_BIT подробнее .. . . .. .. .. .. .. . . . .. . .. .. . .. 38
Макрос READ_BIT подробнее .. .. .. .. . .. .. . .. .. . .. .. .. .. . 41
Макрос MODIFY_REG подробнее . . . . . . . . . . . . . . . . . . . . . . . . . 43
Частый вопрос: Каким способом правильно присваивать
значение бита регистра: "=" или "1="? . . . . . . . . . . . . . . . . . . . . 45
ГЛАВА 3. Аналогово-цифровой преобразователь: ADC . . . . . 47
Выводы АЦП (Pins) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Управление включением и выключением АЦП . . . . . . . . . . 50
Выбор канала АЦП .. .. .. .. . .. .. .. . .. .. .. . .. .. . .. .. .. . .. .. 51
Внутренние каналы АЦП: Датчик температуры МК . . . . . . 52
Режим однократного преобразования . . . . . . . . . . . . . . . . . . . 52
Режим непрерывного преобразования . . . . . . . . . . . . . . . . . . 53
Временная диаграмма работы АЦП: . . . . . . . . . . . . . . . . . . . . . 54
Аналоговый сторожевой таймер . . . . . . . . . . . . . . . . . . . . . . . . . 54
Режим сканирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Управление инжектируемым каналом . . . . . . . . . . . . . . . . . . . 56
Прерывистый режим (Discontinuous mode) . . . . . . . . . . . . . . 58
Калибровка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Выравнивание данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Программируемое время выборки от канала к каналу . . . 61
Преобразование по внешнему триггеру . . . . . . . . . . . . . . . . . 62
Запрос DMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Режим двойного АЦП . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Датчик температуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Прерывания АЦП . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Регистры АЦП . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Карта регистров АЦП . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
ПРИМЕРЫ РАБОТЫ с АЦП . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Проект по оцифровки датчика температуры LM35DZ
платы ВШЕ KIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Проект по оцифровки 4-х потенциометров или любых 4-
х аналоговых сигналов одновременно . . . . . . . . . . . . . . . . . . . 95
Рекомендации по видеоматериалам . . . . . . . . . . . . . . . . . . . . . 101
ГЛАВА 4. Система питания и энергосбережение: PWR . . . . . . 102
Домен резервного питания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Супервизор источника питания . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Программируемый детектор напряжения (PVD) . . . . . . . . . . 106
Режимы с низким энергопотреблением . . . . . . . . . . . . . . . . . . 107
Замедление работы системных часов . . . . . . . . . . . . . . . . . . . . 108
Периферийные тактовые генераторы . . . . . . . . . . . . . . . . . . . . 108
Режим сна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Выход из спящего режима . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Режим остановки (Stop mode) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Режим ожидания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Регистры управления питанием . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Карта регистров PWR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
ГЛАВА 5. Интерфейс передачи данных 12С . . . . . . . . . . . . . . . . . 121
12С ведомый режим . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
12С режим ведущего устройства . . . . . . . . . . . . . . . . . . . . . . . . . 129
Управление линиями SDNSCL . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Запросы DMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
12С прерывания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
12С режим отладки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Регистры управления 12С . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Карта регистров 12( . . . .. .. .. . .. .. .. . .. .. .. .. . .. . .. . .. .. . 165
ПРИМЕРЫ РАБОТЫ с I2С . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Проект по выводу информации на дисплей L(D1602
через интерфейс 12( . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
ГЛАВА 6. Интерфейс передачи данных: SPI . . . . . . . . . . . . . . . . 178
Основные характеристики SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Управление выводом Slave seLect (NSS) . . . . . . . . . . . . . . . . . . 182
Конфигурирование SPI в режиме ведомого устройства . . 185
Конфигурирование SPI в режиме ведущего устройства . . 186
Конфигурирование SPI для полудуплексной связи . . . . . . . 188
Процедуры передачи и приема данных . . . . . . . . . . . . . . . . . . 189
Последовательность запуска в режиме ведомого . . . . . . . . 191
Расчет CRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Связь по SPI с использованием DMA (прямая адресация
памяти) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Флаги ошибок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Прерывания SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Регистры SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
Карта регистров SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
ПРИМЕРЫ РАБОТЫ с SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Проект по выводу информации на дисплей SТ7789V3
через интерфейс SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Проект управлению RGB WS2812B светодиодами через
интерфейс SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
ГЛАВА 7. Таймер общего назначения: TIM . . . . . . . . . . . . . . . . . . 245
Функциональное описание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Режимы работы счетчика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Режим пониженного счета . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Режим выравнивания по центру (счет вверх/вниз) . . . . . . . 257
Выбор часов (CLock seLection) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Режим захвата входного сигнала . . . . . . . . . . . . . . . . . . . . . . . . 269
Режим ШИМ-входа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Режим сравнения выходов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Режим ШИМ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Одноимпульсный режим . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Режим интерфейса энкодера . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Ведомый режим: Режим Gated . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Ведомый режим: Режим триггера . . . . . . . . . . . . . . . . . . . . . . . . 289
Ведомый режим: Режим внешней синхронизации 2 +
режим триггера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Синхронизация по таймеру . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Использование одного таймера для запуска другого
таймера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Синхронный запуск 2 таймеров в ответ на внешний
триггер . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Регистры TIMx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Карта регистров TIMx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
ПРИМЕРЫ РАБОТЫ с ТIМх . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Проект по запуску PWM на таймерах TIM2 и TIM3 для
запуска и регулирования подсветки платы ВШЕ PILL,
а также регулирования яркости дисплея ST7789V3 . . . . . . 335
Проект по применению и TIM2 для работы
прецезионного датчик температуры NSТ1001 . . . . . . . . . . . 345
Проект по применению ОМА и TIM2 для работы PWM
на WS2812B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Проект по применению TIM2 для работы
с семисегментным индикатором . . . . . . . . . . . . . . . . . . . . . . . . . 363
ГЛАВА 8.1 Интерфейс устройства универсальной
последовательной шины USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Функциональное описание USB . . . . . . . . . . . . . . . . . . . . . . . . . 373
Описание блоков USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Система и сброс при включении питания . . . . . . . . . . . . . . . . 378
Регистры USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
Регистры, специфичные для конечных точек . . . . . . . . . . . . 410
Таблица дескрипторов буферов . . . . . . . . . . . . . . . . . . . . . . . . . 417
Адрес буфера передачи п (USB_ADDRn_ ТХ) . . . . . . . . . . . . . . 418
Счетчик байтов передачи n (USB_COUNTn_ТX) . . . . . . . . . . . 419
Адрес буфера приема (USB_ADDRn_RX) . . . . . . . . . . . . . . . . . . 420
Счетчик байтов приема n (USB_COUNTn_RX) . . . . . . . . . . . . . 421
Карта регистров USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
ПРИМЕР РАБОТЫ с USB-CDC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Проект по выводу информации через UART
интерфейса USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
ГЛАВА 8.2 Полноскоростной USB-nopт (OTG_FS) . . . . . . . . . . . 427
Основные возможности OTG_FS . . . . . . . . . . . . . . . . . . . . . . . . . 427
Общие характеристики . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Функции режима хоста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Возможности периферийного режима . . . . . . . . . . . . . . . . . . . 429
Функциональное описание OTG_FS . . . . . . . . . . . . . . . . . . . . . . 430
Полноскоростное ядро OTG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
Полноскоростной OTG РНУ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
Обнаружение линии идентификации . . . . . . . . . . . . . . . . . . . . 433
Устройство двойной роли HNP . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
Устройство двойной роли SRP . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
Периферийное устройство USB . . . . . . . . . . . . . . . . . . . . . . . . . . 435
Периферийное устройство с поддержкой SRP . . . . . . . . . . . 436
Периферийные состояния . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
Периферические конечные точки . . . . . . . . . . . . . . . . . . . . . . . . 438
Управление конечными точками . . . . . . . . . . . . . . . . . . . . . . . . . 440
Передача конечных точек . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Состояние конечной точки/прерывание . . . . . . . . . . . . . . . . . 441
USB-xocт . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Хаете поддержкой SRP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 444
Состояния USB-xocтa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
Обнаружение хостом периферийного соединения . . . . . . . 445
Обнаружение хостом отключения периферийного
устройства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Приостановка работы хоста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Ведущие каналы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
Планировщик хоста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Динамическое обновление регистра OTG_FS_HFIR . . . . . . . 456
FIFO данных USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
Архитектура периферийного FIFO . . . . . . . . . . . . . . . . . . . . . . . 457
Периферийный Rx FIFO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
Периферийные Тх FIFO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Распределение оперативной памяти FIFO . . . . . . . . . . . . . . . 461
Режим хоста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Производительность системы USB . . . . . . . . . . . . . . . . . . . . . . . 463
Прерывания OTG_FS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
Регистры управления и состояния OTG_FS . . . . . . . . . . . . . . . 466
ГЛАВА 9. Интерфейс передачи данных: CAN . . . . . . . . . . . . . . . 467
Введение bxCAN . . . . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . .. .. 467
Основные характеристики bxCAN . . . . . . . . . . . . . . . . . . . . . . . . 467
Три почтовых ящика для передачи данных . . . . . . . . . . . . . . 467
Общее описание bxCAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Режимы работы bxCAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
Режим инициализации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
Нормальный режим . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
Спящий режим (низкое энергопотребление) . . . . . . . . . . . . . 473
Режим тестирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
Бесшумный режим . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
Обратный ход в сочетании с бесшумным режимом . . . . . . 476
Режим отладки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
Функциональное описание bxCAN . . . . . . . . . . . . . . . . . . . . . . . 477
Приоритет передачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
Режим связи по времени . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Управление ошибками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Регистры CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496
Регистры почтового ящика CAN . . . . . . . . . . . . . . . . . . . . . . . . . . 512
Регистры фильтров CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
БОНУСЫ ................................................... 530
Проект по увеличению числа подключеннык кнопок
с применением сдвигового регистра 74HC165D . . . . . . . . . 530
Проект по увеличению числа подключеннык
светодиодов с применением 74HC595D . . . . . . . . . . . . . . . . . 538
Список литературы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
Заключение. Получение доступа к комьюнити изучения
STM32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545