Акселерометр LIS302DL

Если вы счастливый обладатель платы STM32F4Discovery, но наверняка вас посещала мысль запустить акселерометр который на ней установлен. Для этого нам потребуется сама платка и переходник USB-UART через который мы будем отправлят данные в компьютер. Сам акселерометр уже подключен к микроконтроллеру как надо, если же у вас нет платы дискавери, то нужно подключить его как на рисунке ниже:

Читать далее «Акселерометр LIS302DL»

Интерфейс SPI в STM32. Часть 2

В предыдущей статье я попробовал очень кратко рассказать о SPI интерфейсе, а сейчас настало время практики.  В микроконтроллерах STM32F407Vxxx существуют аж целых три аппаратных SPI интерфейса. В других менее крутых контроллерах SPI модули не имеют существенных отличий, разве что их там поменьше. Чтоб не запутаться на каких ногах вашего контроллера висит SPI, рекомендую воспользоваться программой MicroXplorer. Если SPI-ноги контроллера уже заняты, то следует напомнить о такой замечательной вещи как remap (позволяет перенести SPI на другие ноги). Посмотреть что и куда ремапится можно так же при помощи этой программы. У моего контроллера все SPI интерфейсы расположены на этих ногах: 

Адаптированные микроконтроллеры позволят улучшить качество и скорость работы устройства. Даже тяжелые игры в Pin Up станут быстро запускаться и прогружать игровой процесс. Отныне удастся в полной мере насладиться игрой и попытать удачу в лучших слотах, не отвлекаясь на сбои.

Для упрощения работы со всей периферией микроконтроллера, (таймеры, UART, SPI итд) компания ST придумала библиотеку под названием stdperiph_lib. Раньше я почему-то старался не использовать  её, но сейчас я осознал, что с её использованием код становится более понятным и читаемым + улучшается переносимость кода с одного STM32 контроллера на другой. Из-за этого, начиная с этой статьи, я буду использовать эту библиотеку для инициализации периферии. Чтоб понять как использовать SPI, крайне желательно ознакомиться со всеми регистрами через которые происходит взаимодействие с ним. Их как обычно достаточно много, но если разобраться, то ничего особо сложного в них нет. По идее библиотека stdperiph_lib как раз и предназначена для того, чтоб избавить программиста от необходимости напрямую взаимодействовать с регистрами настройки периферии, но я считаю что нужно иметь хотя-бы примерное представление о том, что и как она настраивает. 

Читать далее «Интерфейс SPI в STM32. Часть 2»

Интерфейс SPI в STM32. Часть 1

Если вы уже знаете что такое SPI интерфейс и с чем его едят, то вряд-ли вы почерпнете что-то новое из этой статьи. В ней я попробую рассказать основные понятия относящиеся к этому интерфейсу, а в следующей расскажу как использовать модуль SPI встроенный в микроконтроллеры STM32. Как и любой другой интерфейс, SPI используется для передачи данных от одного устройства к другому. Устройства на шине SPI не равноправны, как правило, присутствует одно главное устройство (Master) и множество подчинённых устройств (Slave). Обычно, в роли мастера выступает микроконтроллер, а подчинёнными устройствами является различная периферия вроде термодатчиков, акселерометров, часов реального времени итд. Мастер не просто так называется мастером, без его ведома ни один слейв не будет предпринимать ни какого обмена данными. Сама шина SPI физически представляет собой 4 провода:

  • MOSI – По этому проводу данные идут от Master к Slave устройству
  • MISO — По этому проводу данные идут от Slave к Master устройству
  • SCK — Через этот провод, Master передает тактовый сигнал к Slave устройствам
  • CS – Chip select (или SS – Slave select) – Через этот провод мастер дает понять слейву, что сейчас он шлёт данные именно ему.
Читать далее «Интерфейс SPI в STM32. Часть 1»

Загрузчик STM32

В микроконтроллерах STM32 существуют три интерфейса для заливки прошивки: 

  • JTAG
  • SWD
  • UART (через загрузчик)

Благодаря прошивке стает возможна работа устройства в целом. После загрузки программного обеспечения удастся перейти к пользованию ПК, в том числе появится доступ к игре в 1win с реальными ставками. Выигрыши, которые ожидают пользователей, оправдывают предшествующие старания пользователя.

Как вы уже догадались, в этой статье пойдет речь о последнем способе. Я считаю его не самым лучшим вариантом для постоянного использования, однако в некоторых случаях он очень даже хорош. Вот допустим устройство уже готово и работает у пользователя, и вдруг ВНЕЗАПНО возникает потребность в перепрошивке. Конечно, можно разобрать девайс и подпаяться к отладочному интерфейсу, но это относительно сложно + нужен отладчик. А что если устройство уже соединено с компом через UART ? В этом случае гораздо проще использовать этот интерфейс для загрузки прошивки. Вот тут-то загрузчик будет очень кстати. Пользователю достаточно нажать одну кнопку и девайс входит в режим прошивки. Пару нажатий мышки и прошивка обновлена. Теперь попробуем разобраться более детально как все это работает. Для начала нам нужно подключить наш контроллер к компьютеру через интерфейс USART1.

Читать далее «Загрузчик STM32»

Flash память STM32

Те кто знаком с восьмибитными контроллерами типа AVR и PIC, наверняка хорошо знают о такой нужной вещи как встроенная EEPROM память. Она позволяет сохранять в нее некоторые данные и потом считывать их после выключения/включения контроллера. Энергонезависимая память одним словом. Перейдя на контроллеры STM32 я с удивлением обнаружил, что такой памяти у них просто нет! Но как потом оказалось, существует аж целых две альтернативы такой памяти. Первая — использовать backup домен. Это не совсем энергонезависимая память, чтоб информация не разрушалась после выключения основного питания, к определенному выводу контроллера должна быть подключена батарейка (вроде тех, которые стоят в материнских платах). Об этом я подробнее расскажу в следующей статье. А сейчас мы рассмотрим второй способ энергонезависимого хранения пользовательских данных — flash память контроллера.

Читать далее «Flash память STM32»

ЦАП в STM32

ЦАП (или DAC по-буржуйски)  это АЦП с точностью до наоборот — он преобразовывает некоторые цифровые данные в их аналоговое представление (читай напряжение). Говоря еще проще — ЦАП позволит нам относительно плавно изменять напряжение на ноге контроллера. Области практического применения: генерация звука, и сигналов произвольной формы. Можно прикрутить к контроллеру SD карточку и сделать wav плеер. Производительности контроллера точно хватит, ибо я делал такое даже на AVR, а у них кстати нет ни какого встроенного ЦАПа и я прикручивалвнешний. Работать с ЦАПом очень легко, и в этой статейке я попробую рассказать все, что мне известно о ЦАПе в STM32. На картинке ниже — генерация синуса при помощи ЦАПа: 

Читать далее «ЦАП в STM32»

Логический анализатор

В этой статье пойдет речь о логическом анализаторе — незаменимом инструменте для реверс-инжиниринга, да и вообще полезном в хозяйстве приборе. Для тех кто ни разу с подобным прибором не сталкивался скажу, что логический анализатор это что-то типа осциллографа, но у него много каналов и он может различать только два состояния сигнала: логический ноль и единицу. Используется оно в основном чтоб присосаться к какой-нибудь шине данных и считывать с неё то,  что по ней передается, в компьютер. Ну а на компьютере работает специальный софт который эти данные отображает в дружественном для пользователя виде. Если бы программа просто показывала нам набор единиц и нулей растянутых во времени, то толку от этого было бы мало ибо анализ таких данных очень сложен и может взорвать моск даже опытному инженеру.  Поэтому, все нормальные программы умеют декодировать протоколы типа 1-Wire, i2c, SPI, UART и так далее. Собранный мной анализатор поддерживает две популярные программы Saleae Logic и USBee Suite

Читать далее «Логический анализатор»

Подключаем сервопривод к STM32

Те кто занимаются робототехникой наверняка прекрасно знают, что такое сервопривод и для чего он нужен. Ну а лично я встретился с этим механизмом впервые и в этой статейке хочу попытаться максимально просто объяснить как подключить сервопривод к STM32. Итак, что же представляет собой этот хитрый механизм: Сервопривод — это устройство позволяющее относительно точно задавать и сохранять положение своего вала. В отличии от обычных двигателей вал которых крутится постоянно, в сервоприводе он поворачивается на определённый угол. Причем если какое либо внешнее воздействие будет стараться изменить угол поворота, то хитроумная схема внутри будет заставлять сервопривод вернуть вал на место. Хотя если расковырять и присмотреться, то ничего шибко хитрого: Внутри небольшая платка, коллекторный двигатель, переменный резистор и редуктор. Электроника определяет текущее положение вала благодаря переменному резистору который вращается вместе с ним. Из сервопривода выходят три провода — питание и управляющий. Электроника сравнивает текущее положение вала с тем которое должно быть (исходя из управляющего сигнала) и если есть разница, то пытается эту разницу свести на нет за счет вращения двигателя в ту или другую сторону. В силу своего нищебродства я купил самый дешевый сервопривод Mystery SD-90 за 4 бакса, вот он:

Читать далее «Подключаем сервопривод к STM32»

Генерация ШИМ в STM32

В предыдущей статье про базовые таймеры, мы в очередной раз мигали светодиодами, а в этот раз пойдем гораздо дальше и попробуем вкурить как заставить контроллер STM32 генерировать ШИМ. Для этого нам придётся использовать один из таймеров общего назначения, ведь именно у них есть всё что для этого нужно. Весь остальной  функционал  этих таймеров конечно впечатляет, но в моей практике он пока не пригодился. Хотя возможно, что в будущем мне пригодятся такие полезные фичи как функция подсчёта внешних импульсов и возможность аппаратно обрабатывать повороты энкодера. Но пока займемся ШИМом. Есть вот такая схема из контроллера, трех резисторов и RGB светодиода которым мы будем управлять. Управление заключается в том, чтоб плавно зажечь и погасить каждый цвет. Разумеется можно взять три разных светодиода если нет RGB.

Читать далее «Генерация ШИМ в STM32»

Basic таймеры в STM32

Таймеры — это такая периферия контроллера STM32 позволяющая нам очень точно отсчитывать интервалы времени. Это пожалуй одна из самых важных и наиболее используемых функций, однако есть и другие. Следует начать с того, что в контроллерах STM32 существуют таймеры разной степени крутости. Самые простые это Basic timers. Они хороши тем, что очень просто настраиваются и управляются при помощи минимума регистров. Все что они умеют это отсчитывать временные интервалы и генерировать прерывания когда таймер дотикает до заданного значения. Следующая группа (general-purpose timers) гораздо круче первой, они умеют генерировать ШИМ, умеют считать испульсы поступающие на определённые ножки, можно подключать энкодер итд. И самый крутой таймер это advanced-control timer, думаю что его я использовать не буду еще очень долго так как мне пока без надобности управлять трехфазным электродвигателем. Начать знакомство с таймерами следует с чего попроще, я решил взяться за Basic таймеры. Задача которую я себе поставил: Заставить таймер генерить прерывания каждую секунду.

Читать далее «Basic таймеры в STM32»