Рейтинг
28.46
голосов: 30

О блоге

Работа с ядром CortexM3 и периферией STM

Администраторы (1)

Модераторы (0)

Модераторов здесь не замечено

Читатели (271)

ploop _YS_ m3hc Krieger Tabke marvin_yorke Ultrin WildCat hexanaft Vga Alatar mzw Reverb grand1987 dievgen woogle PahanMenski anper citizen ZiB

Все читатели блога

Странности АЦП STM32G030K6

Всем здравия.
Постепенно осваиваю новые серии STM. Сначала была G474, сейчас G030.
В G474 с косяками практически не встречался, не считая не работающий встроенный ИОН. В errata указано, что он не работает при использовании определенных пинов, по факту у меня на G474VE не работал совсем. Ну я на него особо не рассчитывал, жили без него и дальше проживем.

А вот с G030 повеселее.
Первый баг во времени старта регулятора. Согласно даташиту 20мкс, одинаково для G474 и G030.
Ставлю задержку 50мкс, в G474VE и G474RC работает, в G030K6 не работает. Увеличиваю до 100мкс — работает.
Идем далее. В G030 обработка каналов ведется либо подряд по маске, либо секвестором в произвольном порядке, но только не более 8 каналов.
При обработке подряд можно настроить прямой порядок от меньшего канала к большему или обратный, за что отвечает бит SCANDIR регистра ADC1->CFGR1. Маска каналов настраивается в регистре ADC1->CHSELR.
Я использую каналы с 1 по 5, оверсэмплинг 64, время выборки максимальное, обратный порядок, DMA.
Если маску каналов настраивать после установки бита SCANDIR, то при старте АЦП DMA не вылазит из прерывания, только выходит и через 800нс влетает в него обратно, при этом до основного кода дело не доходит. Флаги все сбрасываю.
При использовании прямого порядка, т.е. если бит SCANDIR не трогать, все нормально независимо от последовательности.
Перечитал несколько раз даташит и даже в errata заглянул, объяснений не нашел.
Но и это еще не все.
Как оказалось по факту бит SCANDIR не меняет направление сканирования.
На этом все. Всем удачи!

USB-CAN адаптер.

Купил я себе новую гранту и решил как обычно поковыряться в прошивке и активировать круиз контроль! Но вот не задача для его активации требуется USB-CAN адаптер, адаптер по k-line у меня есть разные с гальванической развязкой и без таковой самодельные и заводские. Но вот адаптера по кан у меня не было, и дел я с ним раньше не имел, ну было решено изучить этот вопрос как говорится по полной, собрать самому данный адаптер. Этот адаптер необходим также для диагностики автомобиля и прослушивания кан шины при помощи всем известной программы CANHacker. CANHacker для своего обмены с адаптером и шиной использует протокол «lawicel», при помощи данного протокола программа посылает служебные команды адаптеру, который в свою очередь своеобразным образом должен на них ответить, иначе определения адаптера в программе не произойдет. Также программа посылает различные команды адаптеру такие как скорость обмена разрядность и так далее, по этому протоколу работают не только эта программа, но и другие в том числе платные. В своей прошивке необходимо было учесть все для работы с программы.


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

Электронный токен своими руками

Интернет за последние пару десятилетий из дружелюбного пространства превратился во враждебную среду. Злобные хакеры пытаются нас взломать, зашифровать, украсть, скачать интимные фотки… Традиционных логина и пароля уже явно недостаточно, чтобы надёжно защитить личный аккаунт. Для повышения безопасности всё чаще предлагается многофакторная аутентификация.

Двухфакторная аутентификация использует информацию двух типов: «знаю» — логин+пароль и «владею» — телефон (через SMS, пуш-сообщение, голосовое подтверждение), электронная почта (переход по ссылке для подтверждения), OTP, либо электронный токен.

Использовать телефон как второй фактор — отличная была идея… Но что-то пошло не так. Перехват СМС, скринлоггеры, переадресация вызова, угон симки — всё это вполне реально, и нередко используется против нас.

В качестве альтернативы предлагаю занедорого попробовать электронный токен. Гораздо более надёжен, его сложно перехватить, нельзя клонировать и взломать без ведома владельца.


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

дополнение к статье "Дружим программу CANHacker и модуль 2CAN от Starline"

Несмотря на то что статья была довольно давно опубликована, ко мне до сих пор поступают разнообразные вопросы по ней.
Попытаюсь некоторые прояснить. Данный вариант на базе модуля 2CAN от НПО «Старлайн» с опубликованной в статье прошивкой не реализует все возможности программы CANHACKER, и может не совсем корректно работать в некоторых схемах.
Но люди оказывается приобретают и более современные модули 2CANLIN от «Старлайн» и хотят их использовать.



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

Тёмная подсветка синтаксиса в IAR

Подсветка синтаксиса

Для тех, кому всё-таки приходится пользоваться средой разработки IAR и нет желания заморачиваться с плагинами для VS Code и Eclipse.

Как выглядит IAR ARM 7.8 с моим вариантом раскраски:

Вид в режиме отладки


Читать дальше
  • +1
  • 28 сентября 2020, 08:31
  • uni
  • 2

WatchDog ― устраиваем собаке допрос (с пристрастием)

1. Водная часть
Во всех микроконтроллерах (мк) есть такая полезная штука, как сторожевая псина (watchdog). Работает от внутреннего низкочастотного генератора (LSI), то есть за редким исключением можно сказать, что LSI ― «личный» таймер вотчдога, который будет работать даже если главный генератор подохнет (например, отвалится нога кварца). В угоду пуристам можно отметить, что при желании можно тактовать от LSI всю программу, но сейчас речь не об этом.

Итак, сторожевая псина призвана для одной цели ― ребутать мк в случае его зависания. Если основная программа в каком-то месте не успела сбросить таймер watchdog, то ее ждет аварийный ребут. И если в любительских устройствах поговорка «семь бед ― один резет» еще допустима, то в случае более серьезного использования желательно узнать причину перезагрузки. Но ведь после перезагрузки все данные потеряны, искать больше нечего. Или нет?

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

MCUHelper – утилита для мониторинга и редактирования переменных МК в runtime.

github.com/DIVON/MCUHelper

Основная цель данной программы — мониторить значения переменных, не вмешиваясь в процесс отладки.


Читать дальше
  • +1
  • 20 августа 2020, 13:32
  • DIVON55
  • 1

VREFINT_CAL и иже с ним

Решил я воспользоваться встроенной опорой в STM32 и вроде бы ничего не предвещало борьбы с необъяснимой фигней…

Читать дальше
  • 0
  • 08 октября 2019, 10:14
  • GYUR22
  • 1

Работаем с микроконтроллерами 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 и отладочные платы под этот процессор.

USB HID для микроконтроллеров STM32F103 без использования библиотек

Однажды озадачившись подключением микроконтроллера к ПК через USB, я обнаружил, что это непростая задача. По сравнению с USART, SPI и.т.п., программирование USB оказалось на порядок сложнее. Поиск примеров в интернете практически не дал никаких результатов. Имеющиеся примеры, как правило, основаны на использовании больших и сложных библиотек, которые очень трудно применить, а тем более модифицировать под свои нужды. Также эти примеры обычно состоят из множества файлов, так что даже понять структуру проекта, а не то что принцип работы, USB из них не представляется возможным. Есть неплохие статьи по USB, однако ответа на вопрос, как реализовать обмен данными на конкретном контроллере они не дают. В итоге пришлось самостоятельно, путем длительных экспериментов пытаться запустить USB.
Используемый контроллер STM32F103C8T6. Это наверное самый распространенный и дешевый контроллер с модулем USB. Конкретно использовалась вот такая плата:
ru.aliexpress.com/item/STM32F103C8T6-ARM-STM32-DIY-KIT/32839140960.html?spm=a2g0v.search0104.3.14.1a477b81mKd6hC&ws_ab_test=searchweb0_0%2Csearchweb201602_9_10065_10068_319_317_10696_453_10084_454_10083_10618_10307_10301_537_536_10902_10059_10884_10889_10887_321_322_10915_10103_10914_10911_10910%2Csearchweb201603_58%2CppcSwitch_0&algo_pvid=551618bd-fcbf-49a9-9147-692e88feb8ce&algo_expid=551618bd-fcbf-49a9-9147-692e88feb8ce-5
Цена такой платы практически равна цене микросхемы отдельно. Реализуемый класс устройств HID. Преимущества HID известны. Это отсутствие необходимости использования драйверов на ПК и относительная простота реализации. К недостаткам можно отнести низкую скорость передачи данных. В качестве среды программирования использован CooCox. Программа со стороны ПК компилировалась в Borland C++ 5.5.
Программа для CooCox состоит из одного файла и не использует никаких библиотек (кроме RCC, которая нужна лишь ради функции SystemInit(); в начале программы). Также не используются прерывания, поскольку, на мой взгляд, их использование, затрудняло бы понимание кода и отладку. VID и PID взяты от какого-то STM-овского устройства. При их смене, нужно так-же сменить их и в программе на ПК, поскольку поиск устройства происходит по VID и PID.
Работа рассматриваемой пары программ состоит в следующем. Программа со стороны ПК посылает целое число в контроллер. Контроллер делает инкремент полученного числа и отправляет его назад в ПК. Затем этот цикл повторяется снова и снова. В окне программы выводится полученное число. Дополнительно реализовано управление светодиодом на плате (PC13).
Данная программа не претендует на полное соответствие протоколу USB. В ней реализована обработка ограниченного набора запросов (только тех, что реально попадались при отладке). Как показала практика, набор запросов может различаться на разных компьютерах. Кроме того несмотря на то что удалось добиться работоспособности данной программы, многие вопросы касающиеся USB для меня так и остались непонятными. Этот пример, скорее полуфабрикат, требующий дальнейшей доработки.
Файлы проекта:
drive.google.com/drive/folders/1b3E0YwgRlacK2K2Qykc7OxS11ocNuWig?usp=sharing
  • +8
  • 27 марта 2019, 17:29
  • VVK
  • 1