Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кармин Новиелло - Освоение STM32.pdf
Скачиваний:
2700
Добавлен:
23.09.2021
Размер:
47.68 Mб
Скачать

Освоение STM32

Пошаговое руководство по самой полной платформе ARM Cortex-M, использующей бесплатную и мощную среду разработки на основе Eclipse и GCC

Кармин Новиелло

Данная книга продается на http://leanpub.com/mastering-stm32

Данная версия была опубликована 17.08.2018

Книга переведена на русский язык Дмитрием Карасёвым. Перевод от 03.03.2021

Это книга Leanpub. Leanpub расширяет возможности авторов и издателей в процессе Lean Publishing. Lean Publishing – это процесс публикации находящейся в разработке электронной книги с использованием простых инструментов и множества итераций по получению обратной связи от читателя, осуществляющийся до тех пор, пока не появится готовая книга, и набор оборотов после ее написания.

© 2015 – 2018 Carmine Noviello

Напишите твит об этой книге!

Пожалуйста, помогите Кармину Новиелло, распространяя информацию об этой книге в

Twitter!

Предлагаемый хештег для данной книги #MasteringSTM32.

Чтобы узнать, что другие люди говорят о книге, нажмите на эту ссылку, чтобы найти представленный хештег в Twitter:

#MasteringSTM32

Оглавление

Предисловие ......................................................................................................................................

i

Почему я написал книгу?................................................................................................

i

Для кого эта книга?...........................................................................................................

ii

Как использовать эту книгу?........................................................................................

iv

Как организована книга?...............................................................................................

iv

Об авторе ............................................................................................................................................

viii

Ошибки и предложения ................................................................................................................

ix

Поддержка книги..............................................................................................................................

ix

Как помочь автору............................................................................................................................

ix

Отказ от авторского права ..............................................................................................................

x

Благодарность за участие ...............................................................................................................

x

Перевод ..................................................................................................................................................

x

Благодарности ................................................................................................................................

xi

I

Введение ...................................................................................................

 

1

1. Введение в ассортимент микроконтроллеров STM32...............................................

2

 

1.1.

Введение в процессоры на базе ARM..........................................................................

2

 

 

1.1.1. Cortex и процессоры на базе Cortex-M .......................................................

4

 

 

1.1.1.1.

Регистры ядра....................................................................................

5

 

 

1.1.1.2.

Карта памяти .....................................................................................

6

 

 

1.1.1.3.

Технология битовых лент (bit-banding) ...................................

8

 

 

1.1.1.4.

Thumb-2 и выравнивание памяти ..........................................

11

 

 

1.1.1.5.

Конвейер ..........................................................................................

13

 

 

1.1.1.6.

Обработка прерываний и исключений................................

15

 

 

1.1.1.7.

Системный таймер SysTick........................................................

17

 

 

1.1.1.8.

Режимы питания ..........................................................................

17

 

 

1.1.1.9.

CMSIS.................................................................................................

19

 

 

1.1.1.10.

Внедренные функции Cortex-M в ассортименте STM32 20

 

1.2.

Введение в микроконтроллеры STM32....................................................................

21

1.2.1.Преимущества ассортимента STM32…. ................................................... 21

 

1.2.2.

….И его недостатки..........................................................................................

22

1.3.

Краткий обзор подсемейств STM32 ..........................................................................

24

 

1.3.1.

Серия F0...............................................................................................................

27

 

1.3.2.

Серия F1...............................................................................................................

28

 

1.3.3.

Серия F2...............................................................................................................

29

 

1.3.4.

Серия F3...............................................................................................................

30

 

1.3.5.

Серия F4...............................................................................................................

32

 

1.3.6.

Серия F7...............................................................................................................

33

 

1.3.7.

Серия H7..............................................................................................................

34

ОГЛАВЛЕНИЕ

 

 

 

 

1.3.8.

Серия L0 ..............................................................................................................

35

 

1.3.9.

Серия L1 ..............................................................................................................

36

 

1.3.10.

Серия L4 ..............................................................................................................

37

 

1.3.11.

Серия L4+............................................................................................................

38

 

1.3.12.

Серия STM32WB...............................................................................................

40

 

1.3.13.

Как правильно выбрать для себя микроконтроллер? ........................

42

1.4.

Отладочная плата Nucleo ..............................................................................................

45

2. Установка инструментария .............................................................................................

50

2.1.

Почему выбирают Eclipse/GCC в качестве инструментария для STM32.....

51

 

2.1.1.

Два слова о Eclipse…........................................................................................

52

 

2.1.2.

… и о GCC ...........................................................................................................

53

2.2.

Windows – Установка инструментария ...................................................................

54

 

2.2.1.

Windows – Установка Eclipse .......................................................................

54

 

2.2.2.

Windows – Установка плагинов Eclipse ...................................................

56

 

2.2.3.

Windows – Установка GCC ARM Embedded ............................................

59

 

2.2.4.

Windows – Установка инструментов сборки.........................................

61

 

2.2.5.

Windows – Установка OpenOCD.................................................................

61

 

2.2.6.

Windows – Установка инструментов ST и драйверов........................

62

 

 

2.2.6.1. Windows – Обновление микропрограммного

 

 

 

обеспечения ST-LINK...................................................................

62

2.3.

Linux – Установка инструментария ..........................................................................

63

 

2.3.1.

Linux – Установка библиотек среды выполнения i386 на 64-

 

 

 

разрядную ОС Ubuntu ....................................................................................

63

 

2.3.2.

Linux – Установка Java....................................................................................

64

 

2.3.3.

Linux – Установка Eclipse ..............................................................................

64

 

2.3.4.

Linux – Установка плагинов Eclipse ..........................................................

65

 

2.3.5.

Linux – Установка GCC ARM Embedded ...................................................

70

 

2.3.6.

Linux – Установка драйверов Nucleo.........................................................

70

2.3.6.1.Linux – Обновление микропрограммного обеспечения

 

ST-LINK .............................................................................................

70

 

2.3.7. Linux – Установка OpenOCD ........................................................................

71

 

2.3.8. Linux – Установка инструментов ST.........................................................

73

2.4.

Mac – Установка инструментария .............................................................................

75

 

2.4.1. Mac – Установка Eclipse .................................................................................

75

 

2.4.2. Mac – Установка плагинов Eclipse .............................................................

77

 

2.4.3. Mac – Установка GCC ARM Embedded ......................................................

81

 

2.4.4. Mac – Установка драйверов Nucleo ...........................................................

81

2.4.4.1.Mac – Обновление микропрограммного обеспечения ST-

 

LINK....................................................................................................

81

 

2.4.5. Mac – Установка OpenOCD...........................................................................

82

 

2.4.6. Mac – Установка инструментов ST............................................................

84

3. Hello, Nucleo! ........................................................................................................................

86

3.1.

Прикоснитесь к Eclipse IDE ..........................................................................................

87

3.2.

Создание проекта ............................................................................................................

90

3.3.

Подключение Nucleo к ПК ............................................................................................

96

3.4.Перепрограммирование Nucleo с использованием STM32CubeProgrammer

 

................................................................................................................................................

97

3.5.

Изучение сгенерированного кода.............................................................................

98

ОГЛАВЛЕНИЕ

 

 

 

 

4. Инструмент STM32CubeMX ..........................................................................................

100

4.1.

Введение в инструмент CubeMX .............................................................................

100

 

4.1.1.

Представление Pinout...................................................................................

103

 

 

4.1.1.1.

Представление Chip ...................................................................

104

 

 

4.1.1.2.

IP tree pane .....................................................................................

105

 

4.1.2.

Представление Clock Configuration .........................................................

107

 

4.1.3.

Представление Configuration.....................................................................

108

 

4.1.4. Представление Power Consumption Calculator.....................................

108

4.2.

Генерация проекта.........................................................................................................

109

 

4.2.1. Генерация проекта Си при помощи CubeMX.....................................

109

 

 

4.2.1.1.

Изучение сгенерированного кода ........................................

111

 

4.2.2.

Создание проекта Eclipse............................................................................

113

4.2.3.Ручное импортирование сгенерированных файлов в проект

Eclipse .................................................................................................................

115

4.2.4.Автоматический импорт файлов, созданных с помощью CubeMX,

 

 

в проект Eclipse ...............................................................................................

120

4.3.

Изучение сгенерированного кода приложения ................................................

121

 

4.3.1. Добавим что-нибудь полезное в микропрограмму .........................

126

4.4.

Загрузка исходного кода примеров книги..........................................................

127

5. Введение в отладку...........................................................................................................

130

5.1.

Начало работы с OpenOCD.........................................................................................

130

 

5.1.1.

Запуск OpenOCD............................................................................................

132

 

 

5.1.1.1. Запуск OpenOCD на Windows ................................................

132

 

 

5.1.1.2. Запуск OpenOCD на Linux и на MacOS X...........................

133

 

5.1.2. Подключение к OpenOCD Telnet Console..............................................

135

 

5.1.3.

Настройка Eclipse...........................................................................................

136

 

5.1.4.

Отладка в Eclipse ............................................................................................

142

5.2.

Полухостинг ARM..........................................................................................................

146

 

5.2.1. Включение полухостинга в новом проекте.........................................

147

 

 

5.2.1.1. Использование полухостинга со Стандартной

 

 

 

библиотекой Си...........................................................................

149

 

5.2.2. Включение полуохостинга в существующем проекте ....................

152

 

5.2.3.

Недостатки полухостинга ..........................................................................

152

 

5.2.4.

Как работает полухостинг ..........................................................................

153

II

Погружение в HAL ...................................................................

157

6.

Управление GPIO ..............................................................................................................

158

 

6.1.

Отображение периферийных устройств STM32 и дескрипторы HAL........

158

 

6.2.

Конфигурация GPIO .....................................................................................................

163

 

 

6.2.1.

Режимы работы GPIO...................................................................................

165

 

 

6.2.2. Режим альтернативной функции GPIO ................................................

167

 

 

6.2.3.

Понятие скорости GPIO ...............................................................................

168

 

6.3.

Управление GPIO ...........................................................................................................

172

 

6.4.

Деинициализация GPIO..............................................................................................

172

7.

Обработка прерываний ...................................................................................................

174

 

7.1.

Контроллер NVIC ...........................................................................................................

174

 

 

7.1.1. Таблица векторов в STM32 .........................................................................

175

ОГЛАВЛЕНИЕ

 

 

 

7.2.

Разрешение прерываний............................................................................................

179

 

7.2.1. Линии запроса внешних прерываний и контроллер NVIC..........

180

 

7.2.2. Разрешение прерываний в CubeMX.......................................................

184

7.3.

Жизненный цикл прерываний................................................................................

185

7.4.

Уровни приоритета прерываний ............................................................................

189

 

7.4.1.

Cortex-M0/0+ ....................................................................................................

189

 

7.4.2.

Cortex-M3/4/7...................................................................................................

193

 

7.4.3. Установка уровня прерываний в CubeMX............................................

200

7.5.

Реентерабельность прерываний...............................................................................

201

7.6.Разовое маскирование всех прерываний или на приоритетной основе.. 202

8. Универсальные асинхронные последовательные средства связи ....................

205

8.1.

Введение в UART и USART.........................................................................................

205

8.2.

Инициализация UART.................................................................................................

209

 

8.2.1. Конфигурация UART с использованием CubeMX.............................

216

8.3.

UART-связь в режиме опроса ......................................................................................

216

 

8.3.1. Установка консоли последовательного порта в Windows ..............

220

 

8.3.2. Установка консоли последовательного порта в Linux и MacOS X222

8.4.

UART-связь в режиме прерываний............................................................................

223

 

8.4.1.

Прерывания, относящиеся к UART .........................................................

224

8.5.

Обработка ошибок.........................................................................................................

231

8.6.

Перенаправление ввода-вывода...............................................................................

232

9. Управление DMA...............................................................................................................

236

9.1.

Введение в DMA.............................................................................................................

237

 

9.1.1. Необходимость DMA и роль внутренних шин ..................................

237

 

9.1.2.

Контроллер DMA ...........................................................................................

240

 

 

9.1.2.1. Реализация DMA в микроконтроллерах F0/F1/F3/L1.....

241

 

 

9.1.2.2. Реализация DMA в микроконтроллерах F2/F4/F7...........

244

 

 

9.1.2.3. Реализация DMA в микроконтроллерах L0/L4 ................

247

9.2.

Модуль HAL_DMA ...............................................................................................................

248

 

9.2.1. DMA_HandleTypeDef в HAL для F0/F1/F3/L0/L1/L4...................................

249

 

9.2.2. DMA_HandleTypeDef в HAL для F2/F4/F7.....................................................

251

 

9.2.3. DMA_HandleTypeDef в HAL для L0/L4 ..........................................................

255

 

9.2.4. Как выполнять передачи в режиме опроса .........................................

255

 

9.2.5. Как выполнять передачи в режиме прерываний..............................

257

 

9.2.6. Как выполнять передачи типа периферия-в-периферию...................

259

 

9.2.7. Использование модуля HAL_UART для передачи в режиме DMA ..

260

 

9.2.8. Разнообразные функции модулей HAL_DMA и HAL_DMA_Ex ................

263

9.3.

Использование CubeMX для конфигурации запросов к DMA .....................

264

9.4.

Правильное выделение памяти буферам DMA..................................................

264

9.5.Пример из практики: анализ производительности передачи типа

 

память-в-память модулем DMA.............................................................................

265

10. Схема тактирования ........................................................................................................

271

10.1.

Распределение тактового сигнала...........................................................................

271

 

10.1.1. Обзор схемы тактирования STM32 .........................................................

273

 

10.1.1.1. Многочастотный внутренний RC-генератор в семействах

 

STM32L ............................................................................................

276

 

10.1.2. Конфигурирование схемы тактирования с помощью CubeMX...

278

ОГЛАВЛЕНИЕ

 

 

 

 

10.1.3. Варианты источников тактового сигнала в платах Nucleo............

280

 

 

10.1.3.1. Подача тактового сигнала от высокочастотного

 

 

 

генератора......................................................................................

280

 

 

10.1.3.2. Подача тактового сигнала от 32кГц генератора...............

281

10.2.

Обзор модуля HAL_RCC...................................................................................................

282

 

10.2.1. Вычисление тактовой частоты во время выполнения ....................

284

 

10.2.2.

Разрешение Выхода синхронизации .........................................................

285

 

10.2.3. Разрешение Системы защиты тактирования...................................

285

10.3.

Калибровка HSI-генератора........................................................................................

286

11. Таймеры ...............................................................................................................................

 

288

11.1.

Введение в таймеры .....................................................................................................

288

 

11.1.1. Категории таймеров в микроконтроллере STM32 ............................

289

 

11.1.2. Доступность таймеров в ассортименте STM32...................................

291

11.2.

Базовые таймеры...........................................................................................................

293

 

11.2.1. Использование таймеров в режиме прерываний ................................

296

 

 

11.2.1.1. Генерация временного отсчета в таймерах расширенного

 

 

управления......................................................................................

299

 

11.2.2. Использование таймеров в режиме опроса...........................................

299

 

11.2.3. Использование таймеров в режиме DMA..............................................

300

 

11.2.4.

Остановка таймера........................................................................................

302

 

11.2.5. Использование CubeMX для конфигурации базового таймера ....

302

11.3.

Таймеры общего назначения....................................................................................

303

 

11.3.1. Генератор временного отсчета с внешними источниками

 

 

 

тактового сигнала..........................................................................................

303

 

 

11.3.1.1. Режим внешнего тактирования 2.........................................

305

 

 

11.3.1.2. Режим внешнего тактирования 1.........................................

309

 

 

11.3.1.3. Использование CubeMX для конфигурации источника

 

 

тактового сигнала таймера общего назначения ................

313

 

11.3.2. Режимы синхронизации ведущего/ведомого таймеров................

315

 

 

11.3.2.1. Разрешение прерываний, относящихся к триггерной

 

 

 

цепи .................................................................................................

320

 

 

11.3.2.2. Использование CubeMX для конфигурации

 

 

 

синхронизации ведущего/ведомого устройств..............

320

 

11.3.3. Программная генерация связанных с таймером событий ............

321

 

11.3.4.

Режимы отсчета .............................................................................................

323

 

11.3.5. Режим захвата входного сигнала ............................................................

324

 

 

11.3.5.1. Использование CubeMX для конфигурации режима

 

 

 

захвата входного сигнала ........................................................

330

 

11.3.6. Режим сравнения выходного сигнала...................................................

331

 

 

11.3.6.1. Использование CubeMX для конфигурации режима

 

 

 

сравнения выходного сигнала...............................................

336

 

11.3.7.

Генерация широтно-импульсного сигнала.........................................

336

 

 

11.3.7.1. Генерация синусоидального сигнала при помощи ШИМ

 

 

............................................................................................................

340

 

 

11.3.7.2. Использование CubeMX для конфигурации режима

 

 

 

ШИМ................................................................................................

345

 

11.3.8.

Одноимпульсный режим...........................................................................

345

ОГЛАВЛЕНИЕ

 

11.3.8.1.

Использование CubeMX для конфигурации

 

 

 

одноимпульсного режима ......................................................

347

11.3.9.

Режим энкодера .............................................................................................

348

 

11.3.9.1.

Использование CubeMX для конфигурации режима

 

 

 

энкодера...........................................................................................

353

11.3.10.

Другие функции, доступные в таймерах общего назначения и

 

 

расширенного управления.............................................................................

353

 

11.3.10.1. Режим датчика Холла ...............................................................

354

 

11.3.10.2. Комбинированный режим трехфазной ШИМ и другие

 

 

функции управления двигателем........................................

354

11.3.10.3.Вход сброса таймера и блокировка регистров таймера355

11.3.10.4.Предварительная загрузка регистра автоперезагрузки355

11.3.11. Отладка и таймеры .......................................................................................

356

11.4. Системный таймер SysTick ........................................................................................

357

11.4.1.Использование другого таймера в качестве источника системного

временного отсчета.......................................................................................

358

11.5.Пример из практики: как точно измерить микросекунды с помощью

 

микроконтроллеров STM32........................................................................................

359

12. Аналого-цифровое преобразование............................................................................

365

12.1.

Введение в АЦП последовательного приближения .........................................

365

12.2.

Модуль HAL_ADC ...............................................................................................................

370

 

12.2.1. Режимы преобразования............................................................................

372

12.2.1.1.Режим однократного преобразования одного канала.. 373

12.2.1.2.Режим сканирования с однократным преобразованием

 

 

............................................................................................................

373

 

12.2.1.3. Режим непрерывного преобразования одного канала. 374

 

12.2.1.4.

Режим сканирования с непрерывным преобразованием

 

 

............................................................................................................

374

 

12.2.1.5. Режим преобразования инжектированных каналов.....

375

 

12.2.1.6.

Парный режим.............................................................................

375

12.2.2.

Выбор канала...................................................................................................

376

12.2.3.

Разрядность АЦП и скорость преобразования....................................

377

12.2.4.

Аналого-цифровые преобразования в режиме опроса ...................

377

12.2.5.

Аналого-цифровые преобразования в режиме прерываний .......

381

12.2.6.

Аналого-цифровые преобразования в режиме DMA.......................

382

 

12.2.6.1.

Многократное преобразование одного канала в режиме

 

 

DMA .................................................................................................

386

 

12.2.6.2.

Многократные и не непрерывные преобразования в

 

 

 

режиме DMA.................................................................................

386

 

12.2.6.3. Непрерывные преобразования в режиме DMA ..............

386

12.2.7.

Обработка ошибок.........................................................................................

386

12.2.8.

Преобразования, управляемые таймером............................................

387

12.2.9.

Преобразования, управляемые внешними событиями..................

390

12.2.10. Калибровка АЦП.............................................................................................

390

12.3. Использование CubeMX для конфигурации АЦП.............................................

391

13. Цифро-аналоговое преобразование ............................................................................

393

13.1. Введение в периферийное устройство ЦАП........................................................

393

13.2. Модуль HAL_DAC

...............................................................................................................

396

ОГЛАВЛЕНИЕ

 

 

 

 

 

13.2.1.

Управление ЦАП вручную .........................................................................

397

 

13.2.2. Управление ЦАП в режиме DMA с использованием таймера .....

399

 

13.2.3.

Генерация треугольного сигнала.............................................................

402

 

13.2.4.

Генерация шумового сигнала...................................................................

404

14. I2C ...........................................................................................................................................

 

 

 

405

14.1.

Введение в спецификацию I²C .................................................................................

405

 

14.1.1.

Протокол I²C.....................................................................................................

407

 

 

14.1.1.1.

START- и STOP-условия ...........................................................

408

 

 

14.1.1.2.

Формат байта ................................................................................

408

 

 

14.1.1.3.

Кадр адреса....................................................................................

409

 

 

14.1.1.4. Биты «Подтверждено» (ACK) и «Не подтверждено»

 

 

 

 

(NACK).............................................................................................

409

 

 

14.1.1.5.

Кадры данных..............................................................................

410

 

 

14.1.1.6.

Комбинированные транзакции ............................................

411

 

 

14.1.1.7.

Удержание синхросигнала......................................................

412

14.1.2.Наличие периферийных устройств I²C в микроконтроллерах

 

STM32 .................................................................................................................

 

412

14.2.

Модуль HAL_I2C ...............................................................................................................

 

413

 

14.2.1. Использование периферийного устройства I²C в режиме ведущего

 

..............................................................................................................................

 

417

 

14.2.1.1.

Операции I/O MEM.....................................................................

425

 

14.2.1.2.

Комбинированные транзакции ............................................

426

 

14.2.1.3. Замечание о конфигурации тактирования в семействах

 

 

STM32F0/L0/L4 ..............................................................................

428

14.2.2.Использование периферийного устройства I²C в режиме ведомого

.............................................................................................................................. 428

14.3.Использование CubeMX для конфигурации периферийного устройства

 

I²C.........................................................................................................................................

434

15. SPI ...........................................................................................................................................

 

436

15.1.

Введение в спецификацию SPI.................................................................................

436

 

15.1.1. Полярность и фаза тактового сигнала ...................................................

438

 

15.1.2. Управление сигналом Slave Select...........................................................

440

 

15.1.3. Режим TI периферийного устройства SPI .............................................

440

 

15.1.4. Наличие периферийных устройств SPI в микроконтроллерах

 

 

STM32 .................................................................................................................

440

15.2.

Модуль HAL_SPI ...............................................................................................................

442

 

15.2.1. Обмен сообщениями с использованием периферийного

 

 

устройства SPI .................................................................................................

444

 

15.2.2. Максимальная частота передачи, достижимая при использовании

 

CubeHAL............................................................................................................

446

15.3.Использование CubeMX для конфигурации периферийного устройства

SPI ........................................................................................................................................

446

16. Циклический контроль избыточности ......................................................................

447

16.1. Введение в расчет CRC.................................................................................................

448

16.1.1. Расчет CRC в микроконтроллерах STM32F1/F2/F4/L1.......................

450

16.1.2. Периферийное устройство CRC в микроконтроллерах

 

STM32F0/F3/F7/L0/L4......................................................................................

452

ОГЛАВЛЕНИЕ

 

 

 

16.2.

Модуль HAL_CRC ...............................................................................................................

453

17. Независимый и оконный сторожевые таймеры ....................................................

456

17.1.

Независимый сторожевой таймер..........................................................................

456

 

17.1.1.

Использование CubeHAL для программирования таймера IWDG

 

 

..............................................................................................................................

457

17.2. Системный оконный сторожевой таймер ...........................................................

458

 

17.2.1.

Использование CubeHAL для программирования таймера WWDG

 

 

..............................................................................................................................

460

17.3.Отслеживание системного сброса, вызванного сторожевым таймером .. 461

17.4.

Заморозка сторожевых таймеров во время сеанса отладки ..........................

462

17.5.

Выбор сторожевого таймера, подходящего для вашего приложения .......

462

18. Часы реального времени ................................................................................................

463

18.1.

Введение в периферийное устройство RTC ........................................................

463

18.2.

Модуль HAL_RTC

...............................................................................................................

465

 

18.2.1.

Установка ...............................и получение текущей даты/времени

466

 

18.2.1.1.

Правильный .....................способ чтения значений даты/времени

468

 

18.2.2.

Конфигурирование ...........................................................будильников

469

 

18.2.3.

Блок периодического .......................................................пробуждения

471

 

18.2.4.

Генерация временной отметки и обнаружение

 

 

 

несанкционированного ..............................................................доступа

473

 

18.2.5.

Калибровка .............................................................................................RTC

474

 

 

18.2.5.1. .............................................................

Грубая калибровка RTC

474

 

 

18.2.5.2. ............................................................

Тонкая калибровка RTC

475

 

 

18.2.5.3. ......................Обнаружение опорного тактового сигнала

476

18.3.

Использование .............................................................................резервной SRAM

477

III

Дополнительные темы........................................................

478

19.

Управление питанием

....................................................................................................

479

 

19.1. Управление питанием в микроконтроллерах на базе Cortex-M..................

479

 

19.2. Как микроконтроллеры Cortex-M управляют рабочим и спящим режимами

 

..............................................................................................................................................

 

 

481

 

19.2.1. Переход ...................................................в/выход из спящих режимов

483

 

 

19.2.1.1. .................................................«Спящий режим по выходу»

486

 

19.2.2. Спящие .............режимы в микроконтроллерах на базе Cortex-M

486

 

19.3. Управление питанием ....................................в микроконтроллерах STM32F

487

 

19.3.1.

Источники ......................................................................................питания

487

 

19.3.2.

Режимы ...........................................................................................питания

488

 

 

19.3.2.1. ............................................................................

Рабочий режим

489

 

 

 

19.3.2.1.1. Динамическое изменение напряжения в

 

 

 

.....................

микроконтроллерах STM32F4/F7

490

 

 

 

19.3.2.1.2. Режим высоко - / малоинтенсивной работы в

 

 

.....................

микроконтроллерах STM32F4/F7

490

 

 

19.3.2.2. ............................................................................

Спящий режим

491

 

 

19.3.2.3. ...........................................................................

Режим останова

492

 

 

19.3.2.4. ........................................................................

Режим ожидания

493

 

 

19.3.2.5. Пример работы в режимах пониженного

 

 

 

.....................................................................

энергопотребления

493

ОГЛАВЛЕНИЕ

 

 

 

19.3.3. Важное предупреждение о микроконтроллерах STM32F1.............

497

19.4. Управление питанием в микроконтроллерах STM32L....................................

499

19.4.1.

Источники питания......................................................................................

499

19.4.2.

Режимы питания ...........................................................................................

500

 

19.4.2.1.

Рабочие режимы .........................................................................

501

 

19.4.2.2.

Спящие режимы .........................................................................

503

 

 

19.4.2.2.1. Режим пакетного сбора данных ......................

504

 

19.4.2.3.

Режимы останова........................................................................

504

 

19.4.2.4.

Режимы ожидания .....................................................................

505

 

19.4.2.5.

Режим выключенного состояния..........................................

506

19.4.3.

Переходы между режимами питания ...................................................

506

19.4.4.Периферийные устройства с пониженным энергопотреблением

 

..............................................................................................................................

 

507

 

19.4.4.1.

LPUART ...........................................................................................

507

 

19.4.4.2.

LPTIM...............................................................................................

508

19.5.

Инспекторы источников питания...........................................................................

508

19.6.

Отладка в режимах пониженного энергопотребления...................................

509

19.7.

Использование калькулятора энергопотребления CubeMX..........................

510

19.8.Пример из практики: использование сторожевых таймеров в режимах

 

пониженного энергопотребления...........................................................................

511

20. Организация памяти........................................................................................................

512

20.1.

Модель организации памяти в STM32 ..................................................................

512

 

20.1.1. Основы процессов компиляции и компоновки ................................

514

20.2.

Действительно минимальное приложение STM32 ..........................................

517

 

20.2.1.

Исследование бинарного ELF-файла......................................................

521

 

20.2.2. Инициализация секций .data и .bss .....................................................

523

 

 

20.2.2.1. Пара слов о секции COMMON .......................................................

529

 

20.2.3.

Секция .rodata ................................................................................................

530

 

20.2.4. Области Стека и Кучи..................................................................................

532

 

20.2.5. Проверка размера Кучи и Стека на этапе компиляции .................

535

 

20.2.6. Различия с файлами скриптов инструментария...............................

536

20.3.

Как использовать CCM-память.................................................................................

537

 

20.3.1.

Перемещение таблицы векторов в CCM-память...............................

539

20.4.Как использовать модуль MPU в микроконтроллерах STM32 на базе

 

Cortex-M0+/3/4/7 .............................................................................................................

543

 

20.4.1. Программирование MPU с использованием CubeHAL...................

546

21. Управление Flash-памятью............................................................................................

550

21.1.

Введение во Flash-память STM32 .............................................................................

550

21.2.

Модуль HAL_FLASH ...........................................................................................................

554

 

21.2.1.

Разблокировка Flash-памяти .....................................................................

554

 

21.2.2.

Стирание Flash-памяти ...............................................................................

554

 

21.2.3.

Программирование Flash-памяти ...........................................................

556

 

21.2.4. Доступ к чтению Flash-памяти во время программирования и

 

 

 

стирания............................................................................................................

557

21.3.

Байты конфигурации...................................................................................................

558

 

21.3.1. Защита от чтения Flash-памяти ...............................................................

560

21.4.

Дополнительные памяти OTP и EEPROM ............................................................

561

21.5.

Задержка чтения Flash-памяти и ускоритель ART™ Accelerator .................

563

ОГЛАВЛЕНИЕ

21.5.1. Роль TCM-памятей в микроконтроллерах STM32F7.........................

565

21.5.1.1.Как обратиться к Flash-памяти через интерфейс TCM . 571

21.5.1.2.Использование CubeMX для конфигурации интерфейса

 

 

Flash-памяти .................................................................................

572

22. Процесс начальной загрузки.........................................................................................

574

22.1.

Единая система памяти Cortex-M и процесс начальной загрузки.............

574

 

22.1.1.

Программное физическое перераспределение памяти .......................

576

 

22.1.2.

Перемещение таблицы векторов.............................................................

576

22.1.3.Запуск микропрограммы из SRAM с помощью инструментария

GNU MCU Eclipse............................................................................................

578

22.2. Встроенный загрузчик ................................................................................................

579

22.2.1.Запуск загрузчика из встроенного программного обеспечения 582

22.2.2.Последовательность начальной загрузки в инструментарии GNU

 

 

MCU Eclipse ......................................................................................................

583

22.3.

Разработка пользовательского загрузчика ..........................................................

587

 

22.3.1.

Перемещение таблицы векторов в микроконтроллерах STM32F0

 

 

..............................................................................................................................

 

597

 

22.3.2. Как использовать инструмент flasher.py ............................................

599

23. Запуск FreeRTOS................................................................................................................

 

601

23.1.

Введение в концепции, лежащие в основе ОСРВ..............................................

602

23.2.

Введение во FreeRTOS и в оболочку CMSIS-RTOS............................................

609

 

23.2.1. Структура файлов с исходным кодом FreeRTOS ...............................

609

 

 

23.2.1.1. Как импортировать FreeRTOS вручную .............................

610

 

 

23.2.1.2. Как импортировать FreeRTOS с использованием CubeMX

 

 

 

и CubeMXImporter.......................................................................

612

 

 

23.2.1.3. Как разрешить поддержку FPU в ядрах Cortex-M4F и

 

 

 

 

Cortex-M7 .......................................................................................

613

23.3.

Управление потоками..................................................................................................

613

 

23.3.1.

Состояния потоков........................................................................................

616

 

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

617

 

23.3.3. Добровольное освобождение от управления ......................................

620

 

23.3.4.

Холостой поток idle .......................................................................................

620

23.4.

Выделение памяти и управление ею.....................................................................

622

 

23.4.1. Модель динамического выделения памяти........................................

622

 

 

23.4.1.1.

heap_1.c ...........................................................................................

623

 

 

23.4.1.2.

heap_2.c ...........................................................................................

624

 

 

23.4.1.3.

heap_3.c ...........................................................................................

624

 

 

23.4.1.4.

heap_4.c ...........................................................................................

624

 

 

23.4.1.5.

heap_5.c ...........................................................................................

625

 

 

23.4.1.6. Как использовать malloc() и связанные с ней функции

 

 

 

Си с FreeRTOS...............................................................................

625

 

 

23.4.1.7.

Определение кучи FreeRTOS..................................................

626

 

23.4.2. Модель статического выделения памяти .............................................

626

 

 

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

 

 

 

 

модели статического выделения памяти ..........................

627

 

23.4.3.

Пулы памяти ...................................................................................................

627

 

23.4.4.

Обнаружение переполнения стека .........................................................

629

23.5.

Примитивы синхронизации.....................................................................................

631

ОГЛАВЛЕНИЕ

 

 

 

 

 

23.5.1.

Очереди сообщений .....................................................................................

631

 

23.5.2.

Cемафоры .........................................................................................................

635

 

23.5.3.

Сигналы потоков ...........................................................................................

638

23.6.

Управление ресурсами и взаимное исключение ..............................................

638

 

23.6.1.

Мьютексы..........................................................................................................

639

 

 

23.6.1.1.

Проблема инверсии приоритетов ........................................

640

 

 

23.6.1.2.

Рекурсивные мьютексы............................................................

641

 

23.6.2.

Критические секции.....................................................................................

641

 

23.6.3. Обработка прерываний совместно с ОСРВ ..........................................

642

 

 

23.6.3.1. Приоритеты прерываний и API-функций FreeRTOS ....

643

23.7.

Программные таймеры ...............................................................................................

644

 

23.7.1. Как FreeRTOS управляет таймерами ......................................................

646

23.8.

Пример из практики: Управление энергосбережением с ОСРВ..................

646

 

23.8.1. Перехват холостого потока idle .................................................................

647

 

23.8.2. Бестиковый режим во FreeRTOS ..............................................................

648

 

 

23.8.2.1. Схема для бестикового режима..............................................

650

 

 

23.8.2.2. Пользовательский алгоритм бестикового режима .........

653

23.9.

Возможности отладки..................................................................................................

661

 

23.9.1.

Макрос configASSERT() .................................................................................

661

23.9.2.Статистика среды выполнения и информация о состоянии

 

 

потоков

..............................................................................................................

662

23.10.

Альтернативы Fre .............................................................................................eRTOS

665

 

23.10.1. ChibiOS

............................................................................................................

 

665

 

23.10.2. ОС Contiki .........................................................................................................

666

 

23.10.3. OpenRTOS .........................................................................................................

666

24. Продвинутые методы .....................................................................................отладки

667

24.1.

Введение в исключения ...........................................................отказов Cortex-M

668

 

24.1.1.

Последовательность перехода в исключения Cortex-M и

 

 

 

Соглашение ......................................................................ARM о вызовах

669

 

 

24.1.1.1.

Как инструментарий GNU MCU Eclipse обрабатывает

 

 

 

 

..................................................................

исключения отказов

674

 

 

24.1.1.2.

Как интерпретировать содержимое регистра LR при

 

 

 

 

............................................................

переходе в исключение

675

 

24.1.2.

Исключения ............................................................отказов и их анализ

676

 

 

24.1.2.1.

..........................................

Исключение Memory Management

677

 

 

24.1.2.2.

................................................................

Исключение Bus Fault

678

 

 

24.1.2.3.

............................................................

Исключение Usage Fault

679

 

 

24.1.2.4.

..............................................................

Исключение Hard Fault

680

 

 

24.1.2.5. ...Разрешение дополнительных обработчиков отказов

681

 

 

24.1.2.6. ....Анализ отказов в процессорах на базе Cortex-M0/0+

681

24.2.

Продвинутые возможности ....................................................отладки в Eclipse

681

 

24.2.1.

Представление .........................................................................Expressions

681

 

24.2.1.1.

Мониторы .........................................................................................памяти

683

 

24.2.2.

Точки наблюдения........................................................................................

683

 

24.2.3.

Режим Instruction ..............................................................Stepping Mode

684

 

24.2.4.

Keil Packs ..................................и представление Peripheral Registers

685

 

24.2.5.

Представление ....................................................................Core Registers

688

24.3.

Средства отладки ..................................................................................от CubeHAL

688

ОГЛАВЛЕНИЕ

 

 

 

 

 

24.4.

Внешние отладчики.....................................................................................................

689

 

 

24.4.1.

Использование SEGGER J-Link для отладчика ST-LINK ..................

691

 

 

24.4.2.

Использование интерфейса ITM и трассировка SWV......................

694

 

24.5.

STM Studio.........................................................................................................................

 

695

 

24.6.

Одновременная отладка двух плат Nucleo...........................................................

697

25.

Файловая система FAT ....................................................................................................

 

699

 

25.1.

Введение в библиотеку FatFs.....................................................................................

699

 

 

25.1.1.

Использование CubeMX для включения в ваши проекты

 

 

 

 

библиотеки FatFs............................................................................................

702

 

 

 

25.1.1.1. API-интерфейс Generic Disk Interface.....................................

703

 

 

 

25.1.1.2. Реализация драйвера доступа к SD-картам по SPI.........

704

 

 

25.1.2.

Наиболее важные структуры и функции FatFs ..................................

705

 

 

 

25.1.2.1.

Монтирование файловой системы ......................................

705

 

 

 

25.1.2.2.

Открытие файлов........................................................................

705

 

 

 

25.1.2.3. Чтение и запись файла.............................................................

706

 

 

 

25.1.2.4. Создание и открытие каталога..............................................

707

 

 

25.1.3.

Как сконфигурировать библиотеку FatFs .............................................

710

26.

Разработка IoT-приложений .........................................................................................

712

 

26.1.

Решения, предлагаемые ST для разработки IoT-приложений.....................

713

 

26.2.

Ethernet контроллер W5500 ........................................................................................

716

 

 

26.2.1.

Как использовать шилд W5500 и модуль ioLibrary_Driver ..........

719

 

 

 

26.2.1.1.

Конфигурирование интерфейса SPI ....................................

720

 

 

 

26.2.1.2. Настройка буферов сокетов и сетевого интерфейса......

722

 

 

26.2.2.

API-интерфейсы сокетов.............................................................................

723

 

 

 

26.2.2.1. Управление сокетами в режиме TCP...................................

725

 

 

 

26.2.2.2. Управление сокетами в режиме UDP..................................

726

 

 

26.2.3.

Перенаправление ввода-вывода на сокет TCP/IP ..............................

726

 

 

26.2.4.

Настройка HTTP-сервера ............................................................................

728

 

 

 

26.2.4.1.

Веб-осциллограф.........................................................................

731

27. Начало работы над новым проектом.........................................................................

743

 

27.1.

Проектирование оборудования................................................................................

743

 

 

27.1.1.

Послойная разводка печатной платы ....................................................

744

 

 

27.1.2.

Корпус микроконтроллера.........................................................................

745

 

 

27.1.3.

Развязка выводов питания.........................................................................

746

 

 

27.1.4.

Тактирование..................................................................................................

747

 

 

27.1.5.

Фильтрация вывода сброса RESET...........................................................

749

 

 

27.1.6.

Отладочный порт ..........................................................................................

749

 

 

27.1.7.

Режим начальной загрузки .......................................................................

751

 

 

27.1.8.

Обратите внимание на совместимость с выводами… .....................

751

 

 

27.1.9.

…и на выбор подходящей периферии ..................................................

752

 

 

27.1.10. Роль CubeMX на этапе проектирования платы..................................

753

 

 

27.1.11. Стратегии разводки платы ........................................................................

755

 

27.2.

Разработка программного обеспечения................................................................

756

 

27.2.1.

Генерация бинарного образа для производства ................................................

757

Приложение ...............................................................................................

760

ОГЛАВЛЕНИЕ

 

A. Прочие функции HAL и особенности STM32..........................................................

761

Принудительный сброс микроконтроллера из микропрограммы ............................

761

96-битный уникальный идентификатор ЦПУ STM32......................................................

761

B. Руководство по поиску и устранению неисправностей ......................................

763

Проблемы с установкой GNU MCU Eclipse ...........................................................................

763

Проблемы, связанные с Eclipse .................................................................................................

764

Eclipse не может найти компилятор.......................................................................

764

Eclipse постоянно прерывается при выполнении каждой инструкции во

время сеанса отладки ...................................................................................

765

Пошаговая отладка очень медленная ....................................................................

765

Микропрограмма работает только в режиме отладки ....................................

766

Проблемы, связанные с STM32 .................................................................................................

766

Микроконтроллер не загружается корректно.....................................................

766

Невозможно загрузить микропрограмму или отладить микроконтроллер

..............................................................................................................................

768

C. Схема выводов Nucleo .....................................................................................................

769

Nucleo-F446RE ..................................................................................................................................

770

Разъемы, совместимые с Arduino............................................................................

770

Morpho-разъемы ............................................................................................................

770

Nucleo-F411RE ..................................................................................................................................

771

Разъемы, совместимые с Arduino............................................................................

771

Morpho-разъемы ............................................................................................................

771

Nucleo-F410RB ..................................................................................................................................

772

Разъемы, совместимые с Arduino............................................................................

772

Morpho-разъемы ............................................................................................................

772

Nucleo-F401RE ..................................................................................................................................

773

Разъемы, совместимые с Arduino............................................................................

773

Morpho-разъемы ............................................................................................................

773

Nucleo-F334R8...................................................................................................................................

774

Разъемы, совместимые с Arduino............................................................................

774

Morpho-разъемы ............................................................................................................

774

Nucleo-F303RE ..................................................................................................................................

775

Разъемы, совместимые с Arduino............................................................................

775

Morpho-разъемы ............................................................................................................

775

Nucleo-F302R8...................................................................................................................................

776

Разъемы, совместимые с Arduino............................................................................

776

Morpho-разъемы ............................................................................................................

776

Nucleo-F103RB ..................................................................................................................................

777

Разъемы, совместимые с Arduino............................................................................

777

Morpho-разъемы ............................................................................................................

777

Nucleo-F091RC..................................................................................................................................

778

Разъемы, совместимые с Arduino............................................................................

778

Morpho-разъемы ............................................................................................................

778

Nucleo-F072RB ..................................................................................................................................

779

Разъемы, совместимые с Arduino............................................................................

779

Morpho-разъемы ............................................................................................................

779

Nucleo-F070RB ..................................................................................................................................

780

Разъемы, совместимые с Arduino............................................................................

780

ОГЛАВЛЕНИЕ

 

 

Morpho-разъемы ............................................................................................................

780

 

Nucleo-F030R8...................................................................................................................................

781

 

Разъемы, совместимые с Arduino............................................................................

781

 

Morpho-разъемы ............................................................................................................

781

 

Nucleo-L476RG .................................................................................................................................

782

 

Разъемы, совместимые с Arduino............................................................................

782

 

Morpho-разъемы ............................................................................................................

782

 

Nucleo-L152RE ..................................................................................................................................

783

 

Разъемы, совместимые с Arduino............................................................................

783

 

Morpho-разъемы ............................................................................................................

783

 

Nucleo-L073R8 ..................................................................................................................................

784

 

Разъемы, совместимые с Arduino............................................................................

784

 

Morpho-разъемы ............................................................................................................

784

 

Nucleo-L053R8 ..................................................................................................................................

785

 

Разъемы, совместимые с Arduino............................................................................

785

 

Morpho-разъемы ............................................................................................................

785

D.

Корпусы STM32..................................................................................................................

786

 

LFBGA ..............................................................................................................................................

786

 

LQFP ..............................................................................................................................................

786

 

TFBGA ..............................................................................................................................................

787

 

TSSOP ..............................................................................................................................................

787

 

UFQFPN ..............................................................................................................................................

787

 

UFBGA ..............................................................................................................................................

787

 

VFQFP ..............................................................................................................................................

787

 

WLCSP ..............................................................................................................................................

787

E.

Изменения книги ..............................................................................................................

789

 

Выпуск 0.1 – Октябрь 2015 ..........................................................................................................

789

 

Выпуск 0.2 – 28 октября 2015......................................................................................................

789

 

Выпуск 0.2.1 – 31 октября 2015...................................................................................

789

 

Выпуск 0.2.2 – 1 ноября 2015 ......................................................................................

789

 

Выпуск 0.3 – 12 ноября 2015........................................................................................................

790

 

Выпуск 0.4 – 4 декабря 2015........................................................................................................

790

 

Выпуск 0.5 – 19 декабря 2015......................................................................................................

790

 

Выпуск 0.6 – 18 января 2016........................................................................................................

790

 

Выпуск 0.6.1 – 20 января 2016 ....................................................................................

790

 

Выпуск 0.6.2 – 30 января 2016 ....................................................................................

790

 

Выпуск 0.7 – 8 февраля 2016 .......................................................................................................

791

 

Выпуск 0.8 – 18 февраля 2016.....................................................................................................

791

 

Выпуск 0.8.1 – 23 февраля 2016..................................................................................

791

 

Выпуск 0.9 – 27 марта 2016..........................................................................................................

791

 

Выпуск 0.9.1 – 28 марта 2016 ......................................................................................

792

 

Выпуск 0.10 – 26 апреля 2016 .....................................................................................................

792

 

Выпуск 0.11 – 27 мая 2016............................................................................................................

792

 

Выпуск 0.11.1 – 3 июня 2016 .......................................................................................

793

 

Выпуск 0.11.2 – 24 июня 2016.....................................................................................

793

 

Выпуск 0.12 – 4 июля 2016...........................................................................................................

793

 

Выпуск 0.13 – 18 июля 2016.........................................................................................................

793

 

Выпуск 0.14 – 12 августа 2016.....................................................................................................

793

ОГЛАВЛЕНИЕ

 

 

 

 

Выпуск 0.15 – 13

сентября 2016..................................................................................................

793

Выпуск 0.16 – 3

октября 2016......................................................................................................

794

Выпуск 0.17 – 24

октября 2016....................................................................................................

794

Выпуск 0.18 – 15

ноября 2016 .....................................................................................................

794

Выпуск 0.19 – 29

ноября 2016 .....................................................................................................

795

Выпуск 0.20 – 28

декабря 2016....................................................................................................

795

Выпуск 0.21 – 29

января 2017......................................................................................................

795

Выпуск 0.22 – 2

мая 2017..............................................................................................................

795

Выпуск 0.23 – 20

июля 2017.........................................................................................................

795

Выпуск 0.24

– 11

декабря 2017....................................................................................................

796

Выпуск 0.25

– 3

января 2018........................................................................................................

796

Выпуск 0.26

– 7

мая 2018..............................................................................................................

796