Посты

STM32 → CRC (подсчёт контрольной суммы)

Во всех микроконтроллерах STM32 есть модуль CRC, с помощью которого можно вычислить контрольную сумму любого набора данных.

Внутри модуля реализован аппаратный калькулятор контрольной суммы по алгоритму CRC-32, который применяется в том числе в Ethernet, MPEG-2, PNG и POSIX.

Любой CRC-калькулятор устроен как сдвиговый регистр из N штук триггеров, охваченный несколькими цепями обратной связи, и его можно описать как двоичное число длиной N, в котором каждый единичный бит говорит, что перед этим регистром стоит XOR с обратной связью. Точно так же можно составить и полином со степенями X.

Конкретно в STM32 значение N = 32, и применяется полином вида X%$@~*!G4;:%#`32 + X%$@~*!G4;:%#`26 + X%$@~*!G4;:%#`23 + X%$@~*!G4;:%#`22 + X%$@~*!G4;:%#`16 + X%$@~*!G4;:%#`12 + X%$@~*!G4;:%#`11 + X%$@~*!G4;:%#`10 + X%$@~*!G4;:%#`8 + X%$@~*!G4;:%#`7 + X%$@~*!G4;:%#`5 + X%$@~*!G4;:%#`4 + X%$@~*!G4;:%#`2 + X + 1, который можно записать в виде 0x4C11DB7.

Использование модуля CRC

Модуль CRC в STM32 для программиста — это главным образом один регистр DR, в который вы кладёте входные данные (словами по 32 бита), и в конце забираете вычисленное значение контрольной суммы. В любой момент, читая этот регистр — вы читаете текущее значение CRC, вычисленное для уже поступивших данных.

Регистр данных по умолчанию (после включения) инициализирован значением 0xFFFFFFFF. Модуль можно полностью сбросить записью 1 в регистр CRC->CR, эта единица сбросится сама, а во внутреннее состояние конвеера вновь запишется 0xFFFFFFFF — можно вычислять контрольную сумму новой порции данных.

Анбоксинг и обзор STM32F746G-Discovery — новой отладочной платы от ST

Итак, у меня есть самая топовая плата STM32F746G-Discovery с процессором новой серии F7, и это — первый в России обзор этой платы. Её пока нет ни у кого больше.

packed

Плата приехала в обычном пластмассовом кейсе, как и все другие платы Дискавери. Сбоку есть краткий перечень её фич:

  • Процессор STM32F746NGH6 — TFBGA-216, 216 мегагерц и 462 DMIPS.
  • Самый новый программатор/отладчик ST-Link/V2.1, которого раньше не было ни в одной Дискавери.
  • WQVGA TFT ЖК-дисплей диагональю 4.3 дюйма и ёмкостным тач-скрином
  • 128 Мбит SDRAM (из них доступно только 64) и 128 Мбит Flash, подключенная по Quad-SPI
  • Поддержка S/PDIF, стоит крутой аудиокодек и два MEMS-микрофона
  • 3 USB-порта (порт программатора, USB-FS и USB-HS)
  • Гнездо microSD карты
  • Аудио вход и выход
  • Колодка пинов, совместимая с Ардуино
  • MIPI-порт камеры
  • RJ-45 Ethernet

Блог наладил контакты с ST Microelectronics

SONY DSC

28 июля я побывал в московском офисе ST Microelectronics.

 

В первую очередь, конечно, меня интересовали микроконтроллеры STM32, но ещё мы затронули тему MEMS, силовых транзисторов и радиомодулей.

Консольный программатор ST-Link_Utility-CLI

В комплекте поставки программатора ST-Link есть не только графическая утилита ST-Link Utility, но и консольная программа ST-LINK_CLI.exe. Она даёт возможность автоматизировать процесс прошивки МК, что крайне полезно если плат много (десятки или сотни).

Я написал простейший скрипт. Он принимает путь к файлу прошивки (в параметрах командной строки) и прошивает его в микроконтроллер STM32. После этого он ждёт нажатия любой клавиши чтобы запустить процесс заново — нажимаете любую клавишу чтобы прошить следующий девайс, либо закрываете консоль чтобы закончить.

:start
"C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ST-LINK_CLI.exe" -P %1 0x08000000
pause
goto start

Только проверьте правильность пути до вашего ST-Link Utility.

  1. Подключаете первую плату с STM32 к программатору ST-Link.
  2. Копируете текст в любой текстовый редактор (лучше в Блокнот), сохраняете его как файл с расширением .bat (например programmer.bat), перетаскиваете на этот файл свой файл прошивки (.bin), и всё — он записывается внутрь микроконтроллера.
  3. После завершения записи подключаете следующую плату, нажимаете любую клавишу — она тоже прошивается, и так далее.

programmer

Это простейший вариант, но его можно расширить, например, до полностью автоматического программатора с обратной связью — с «железной» кнопкой начала программирования и светодиодами статуса.

При желании можно добавить команду подключения к STM32 с определёнными параметрами:

"C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ST-LINK_CLI.exe" -c SWD SWCLK=0 UR LPM -p %1 0x08000000

В этом примере я увеличил скорость SWD до 4МГц, но эффективность этого способа мала — очень много времени (несколько секунд) уходит на подключение. Первый вариант был быстрее — около 1-2 секунд на плату.

RFID-ридер с экранчиком на STM32

Мы уже умеем использовать знакосинтезирующий ЖК-экран WH1602 и RFID-ридер SL-030. Настало время соединить их вместе, и сделать простую и полезную штуку — ридер RFID-карт с экранчиком.

У ридера есть специальный выход OUT, на котором появляется ноль всякий раз, когда он обнаруживает карту. Сразу после этого можно послать ему запрос на чтение номера — сделаем это в EXTI прерывании.

wh1602-rfid

В остальном код очень прост и по сути является суммой тех двух примеров.