Работаем с микроконтроллерами STM32F7. Тренинг по STM32F7 от компании STMicroelectronics. Впервые на русском языке

Данная серия публикаций основана на материалах цикла STM32F7 Online Training от компании STMicroelectronics. В статьях представлено описание функциональных блоков и инструментов разработки для семейства микроконтроллеров STM32F7.

Логически материал разбит на 4 главы, охватывающие тематику системной периферии, памяти, безопасности, аналоговой периферии, цифровой периферии, таймеров, экосистемы. Главы не связаны между собой, и читатель может ознакомиться с ними в произвольном порядке:

Часть 1. Системная периферия. Есть описание линейки семейства, с характеристиками каждого чипа. А также расписано устройство контроллера. Ядро, Матрица соединений, контроллеры DMA, прерываний, питания, сброса и тактирования, порты ввода вывода, отладки и прочие. Все очень кратко, в обзорном режиме, но дает наглядное понимание, что там вообще есть и как это использовать.

Часть 2. Память и функции безопасности. Во второй части довольно подробно расписано как общаться с внутренней Flash памятью, как подключить внешнюю память, как управляться с контроллером внешней памяти. Расписана работа Quad SPI контроллера, необходимого для подключения памяти по SPI шине, а также вспомогательных блоков, таких как блок вычисления CRC, Хэшпроцессор, ускоритель шифрования AES и генератор случайных чисел. Описаны способы защиты памяти и механизмы обеспечивающие безопасную работу.

Часть 3. Периферия и таймеры. Довольно подробно расписано про АЦП, ЦАП, CAN, DCMI (интерфейс цифровой камеры), Дельта сигма модулятор, интерфейс DSIHOST — для работы с TFT дисплеями и LTDC контроллер (управление дисплеем по RGB), JPEG-кодек, Ethernet, HDMI, I2C, SPI, USART, USB, SDMMC, SAI и SPDIFRX аудио интерфейсы. Очень жирная глава.

Часть 4. Экосистема. Тут про Cube и отладочные платы под этот процессор.

Таймеры и задержки: сборник рецептов

AVR
Увидел в статье DI HALT "Простой программный таймер для конечных автоматов" некий кусок кода и решил накатать статью…

bool MainTimerIsExpired(const uint32_t Timer)                      // ???
{                                                                  // ???
   if ((TimeMs - Timer) < (1UL << 31)) return (Timer <= TimeMs);   // ???
   return false;                                                   // ???
}                                                                  // ???

Сначала писал длинно, с приколами и разжевыванием, но мне не понравилось и в итоге убрал в черновики. Решил переоформить как краткий сборник рецептов.


Читать дальше

Машина времени для крошек.

AVR
При программировании микроконтроллеров часто требуется отслеживать временные промежутки. Даже банальное «помигать светодиодом» требует учета времени погашенного состояния и времени светимости.

В Си есть функция delay_ms(X), которая выполняет пустой цикл X ms, то есть по сути вешает проц на X*fcpu/1000 тактов, так как ничего иного в это время он делать не может.

Многие прогеры, намучившись с этой функцией (или ей подобными), переходят на использование прерываний и аппаратных таймеров, но тут другая засада — их всегда мало.

Каждый выкручивается как может, например навешивает на один таймер несколько функций, использует биты счетчика как флаги, впрягает в нарты сторожевую собаку… вариаций много, но всегда новый проект означает новые выеживания, поиски решения в ограниченном пространстве.

Пройдя все эти стадии, я наконец-то дорос до понимания, что «что-то тут не так». Нарисовалась необходимость диспетчеризации задач по таймеру.
Прочитав AVR. Учебный Курс. Архитектура Программ Часть 2 в очередной раз убедился, что изобрел велосипед… ну и пусть, это просто еще один вариант решения.


Читать дальше
  • +2
  • 24 января 2018, 13:02
  • iva
  • 1

Интересное (на мой взгляд) свойство ХОR - продолжение.

Интересное свойство операции XOR.
В предыдущий раз я не совсем удачно, видимо, задал задачку. Раскрываем свои краплёные карты.
Для затравки приведу несколько заполненных таблиц, и в каждой из них отмечу некоторые ячейки.


Читать дальше

Интересное (на мой взгляд) свойство ХОR

О некотором интересном свойстве операции XOR.
Хоть и не формат. Но, мне показалось это интересным.


Читать дальше

Быстрый парсер NMEA

GPS навигацией не занимается только ленивый. Вот и мне пришлось…
Задача — парсерить ответы от модуля. В результате получился вот такой алгоритм
Я имел доступ к большому числу разных модулей (EB500 EB800, вся линейка Ublox,Quectel L76, ML8088)
Парсер работает со всеми этими модулями без изменений
Сам парсер вызывается из прерывания по приему каждого байта,
в результате работы — необходимые данные разложены по полочка
понимает та же глонас модули.


Читать дальше

CRC32: на STM32 как на компе или на компе как на STM32.

Все знают, что в STM32F1xx, STM32F2xx, STM32F4xx есть аппаратный блок CRC32 с полиномом 0x04C11DB7.
И он, в общем-то, работает. Но только контрольная сумма почему-то не совпадает с таковой, рассчитанной софтварно.
В гугле обычно 2 типа вопросов:
  1. Как хардварно посчитать на STM32 побайтовую CRC
  2. Как посчитать софтово CRC так, чтоб она совпала с хардовой на STM32
Причём, на первый вопрос ответ везде отрицательный. Так ли это? Попробуем разобраться.


Читать дальше

Скользкая дорожка для поклонников volatile



Прошло уже практически 30 лет с тех пор, как в стандарте языка C появился модификатор volatile, но в наши дни это ключевое слово вызывает лишь больше вопросов и непонимания даже среди программистов, общающихся с железом на “ты”. Сейчас уже никого не удивишь многоядерным мобильным телефоном или компьютером, умещающимся в одном чипе. Прогресс не стоит на месте, компиляторы умнеют, задачи программистов усложняются, вынуждая помнить о барьерах компиляции и барьерах памяти работая на многопроцессорных системах, только volatile по-прежнему остается темным уголком стандарта, в котором лишь сказано, что доступ к такой изменчивой переменной “implementation-defined” (Стандарт C, 6.7.3/7), т.е. как решат ребята, разрабатывающие компилятор, так и будет.



Читать дальше

Используем libc (newlib) для stm32

Многие тулчейны для ARM на GCC (Code Sourcery Lite в том числе) поставляются вместе с newlib — стандартной библиотекой языка C. С помощью неё можно использовать множество удобных стандартных функций (printf/scanf/malloc и т.д.).
Для того чтобы использовать эту библиотеку от нас требуется реализация некоторых системных вызовов.


Читать дальше
  • +4
  • 15 августа 2011, 14:32
  • Kosyak
  • 1