Работа с MicroXplorer

У всех контроллеров STM32 очень много ног. Это конечно же хорошо, отпадает необходимость наращивать количество ножек при помощи сдвиговых регистров и расширителей портов. Но иногда из-за их большого количества возникает путаница. Большинству периферийных устройств типа АЦПUARTов итд необходимы ноги контроллера для работы, и бывает такая ситуация когда два блока периферии претендуют на одну и ту же ногу. Естественно одновременно использовать её они не могут и тут у нас есть два выхода из ситуации:

  1. Использовать другой аналогичный блок периферии (второй UART например) 
  2. Использовать ремап

С первым пунктом всё понятно, а вот что же такое remap в STM32 ? В двух словах: Ремап позволяет какому-либо блоку периферии использовать для своих целей другие (но тоже жестко заданные) ноги контроллера. Чтоб смотреть что куда ремапится надо лазить в даташит и искать это там. Для того чтоб узнать какая периферия использует одинаковые ноги надо опять смотреть даташит. А можно не открывать его по таким пустякам, а просто заюзать неплохую программку от ST под названием MicroXplorer

Читать далее «Работа с MicroXplorer»

Прерывания в STM32

В этой статье я планирую поделиться с читателями своими скромными познаниями в области прерываний. Начать следует с того, что же представляют собой прерывания. Прерывание — это событие как правило связанное с каким-либо блоком периферии микроконтроллера STM32. Событий которые могут породить прерывание может быть множество. Например если речь о таком блоке периферии как UART, то там могут быть такие события: передача завершена, приём завершен, возникла ошибка чётности итд. Использование прерываний позволит нашей программе мгновенно регировать на подобные события. Сам термин прерывание говорит о том, что что-то должно прерваться и в нашем случае прервется выполнение основного кода вашей программы и управление будет передано некоторому другому куску кода который называется обработчиком прерывания. Таких обработчиков достаточно много, ибо периферийных устройств в STM32 предостаточно. Стоит отметить важный момент: В случае возникновения двух разных прерываний от одного блока периферии возникает одно и тоже прерывание. Например если произойдет прерывание по приёму байта через UART и прерывание по завершению передачи через тот же UART, то в обоих случаях будет вызван один и тот же обработчик. Для того чтоб определить какое из возможных прерываний произошло нужно смотреть на флаги состояния. И само собой очищать их перед выходом из прерывания. Когда обработчик прерывания отработает, управление будет передано той самой строчке кода, во время выполнения которой наступило прерывание. То есть основная программа продолжит работать дальше как ни в чем не бывало.

Читать далее «Прерывания в STM32»

Библиотека для работы с HD44780

В прошлой статье мы рассмотрели теоретические основы управления LCD дисплеем на базе контроллера HD44780. Но разумеется теория без практики ничего не значит, а поэтому я предлагаю побаловаться с этим дисплеем вживую. Дисплей стоит не дорого, что-то в районе 6$, лично я экспериментировал с дисплеем под названием ACM1602K-FL-YTH-02. Редкостный отстой скажу я вам, не покупайте такой. Некоторые символы в левой половине экрана плохо видны, хотя первое время дисплей работал без проблем. Кстати точно такой-же дисплей пришлось вернуть обратно в магазин, у него полностью не работала левая его часть. Лучше купить на бакс подороже и не иметь проблем в будующем, мне например понравились наши отечественные МЭЛТовские дисплеи они кстати лишены некоторых проблем с русскими символами (об этом подробнее позже). Для того чтоб использовать ваш дисплей совместно с моей программой не производя ни каких изменений в коде, вы должны подключить его к контроллеру STM32 следующим образом: 

Читать далее «Библиотека для работы с HD44780»

Подключаем HD44780 дисплей к STM32

Зачастую контроллеру приходится сообщать пользователю какие-либо данные, и далеко не всегда можно обойтись одними лишь цифрами. Для отображения текстовой информации как правило применяют LCD индикаторы на базе контроллера HD44780. Не смотря на то, что подобный дисплеев очень много все они управляются одинаково так как контроллер в них стоит один и соответственно система команд у них одна, так же они имеют одинаковый набор ног. В этой статье мы попробуем подключить такой дисплей к контроллеру установленному на STM32vl Discovery. Сам дисплей выглядит следующим образом:

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

Step-up преобразователь на NCP1450ASN33T1G

Если вы разрабатываете какое-либо портативное устройство, то вопрос питания возникает сам собою. Существует несколько популярных вариантов от чего можно запитать ваш девайс: Солнечные батареи, аккумуляторы или обычные батарейки. Питание от аккумуляторов является самым оптимальным вариантом на мой взгляд. Стоят они не дорого и купить можно почти где угодно. Я в последнее время отдаю предпочтение аккумуляторам в форм факторе АА. На вид как обычная пальчиковая батарейка. Емкости у них бывают самые разные, как правило от 2000 до 2500 мА/ч. Но тут возникает другая проблема — нехватка места. Ведь в портативном устройстве оно очень ограничено габаритами небольшого корпуса. Зачастую один аккумулятор помещается, а второй уже нет. Полутора вольт устройству скорее всего не хватит, а если контроллерам STM32 тем более. Пришлось поломать голову чтоб подыскать подходящую и самое главное доступную микросхему на которой можно было бы построить повышающий преобразователь напряжения, позволяющий получить 3.3 вольта на выходе из одного аккумулятора с напряжением 1.2 вольта.  На глаза мне попалась микросхема NCP1450ASN33T1G. О ней-то и пойдет речь:

Читать далее «Step-up преобразователь на NCP1450ASN33T1G»

STM Studio

Недавно открыл для себя новый программный инструмент от компании ST под названием STM STUDIO. Программа предназначена для визуализации значения какой либо переменной без остановки выполнения программы. К примеру в вашей программе есть какая-то переменная изменяющая своё значение с течением времени, и выхотите графически это отобразить. Конечно можно сделать так, чтоб контроллер выдавал вам эту переменную через UART, а со стороны компьютера принимать эти данные и строить график самописным софтом. Но на разработку всего этого  требуется время, проще использовать готовое решение от ST. Всё что нам нужно знать — это адрес переменной значение которой мы хотим наблюдать. Соглашусь, что возня с адресами это не очень то удобно, и у  нас есть отличный способ обойтись без этого. Каждый раз при компиляции создается elf файл откуда можно узнать адреса всех переменных используемых в программе. STM Studio умеет читать такие файлы. На рисунке ниже изображен график который был построен на основе переменной хранящей значение прочитанное из АЦП. Я быстро крутил резистор в результате чего получилась кривая синусоида:

Читать далее «STM Studio»

АЦП в STM32. Часть 2.

Насто время сделать что-то практическое с АЦП, для начала пусть это будет несложный, пример который считывает значение с какого либо канала, а потом исходя из этого значения будем менять частоту мигания тех самых многострадальных светодиодов стоящих на платке STM32VL Discovery. Для данного практического эксперимента нам потребуется сама платка дискавери и плюс переменный резистор номиналом примерно от 1К до 200К. Короче ставьте любой какой найдете, скорее всего он подойдет 🙂 Главное чтоб сопротивление было не слишком уж маленьким, а то он начнет греться, да и стабилизатор на плате может вспотеть от такой нагрузки. Соединить резистор с платой нужно так, как я показал на схеме в прерыдущей статье про регистры АЦП. Кстати, если у вас вообще нет этой платы, то просто посмотрите на ту же схему и подсоедините всю обвязку как там нарисовано. Ну а счастливым обладателям дискавери я нарисовал вот такую простую картинку: 

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

АЦП в STM32. Часть 1

Микроконтроллер штука цифровая и обменивается с внешним миром цифоровыми сигналами: нулями и единицами. Однако иногда перед микроконтроллером встает задача произвести измерение какой либо плавно изменяющейся величины. Это может быть всё то, что принимает несколько промежуточных состояний (а не только два) например это может быть темепература, напряжение, сила тока, освещенность и так далее, примеров много. Однако, нога контроллера настроенная на вход различает только два состояния — присутствие на ноге напряжения (лог. 1) и его отсутствие (лог. 0). Для измерения  температуры это малопригодно, ведь мало кому интересен градусник имеющий только два состояния -50 и +200 градусов 🙂 Для решения проблем измерения аналоговых величин придумали АЦП – Аналого-цифровой преобразователь. Принцип работы с АЦП в двух словах: На вход АЦП поступает аналоговый сигнал и через некоторое время из АЦП можно прочитать результат преобразования, тоесть цифровое представление аналогово сигнала. Существуют микроконтроллеры STM32 со встроенным АЦП, то есть ничего подключать к контроллеру не надо, точнее почти ничего. Посмотрим на картинку: 

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

Вычисление контрольных сумм

Что такое контрольная сумма (CRC) и для чего она нужна, я думаю знают многие. Ну а если кто не знает, то напомню, что контрольная сумма это некоторое число которое получается в результате обработки по определённому алгоритму некоторого объёма данных. Главное свойство контрольной суммы заключается в том, что она будет разной для двух массивов данных если они различаются хотя бы на один бит. Применяются контрольные суммы зачастую при передаче данных, для проверки целостности информации. Для расчета контрольных сумм применяются самые разнообразные алгоритмы, количество матана в которых превышает все разумные пределы. Именно поэтому применять мы их не будем, а пойдем другим путём. В контроллерах STM32 есть много полезной периферии, но ничего особо нового и необычного (например по сравнению с AVR) я не увидел. Лишь только одна штука меня немного приятно удивила и порадовала — аппаратная считалка контрольной суммы, и ей то мы сейчас и займемся.

Читать далее «Вычисление контрольных сумм»

UART в STM32. Часть 2.

Теперь, когда мы познакомились с UART’ом довольно подробно, попробуем создать устройство которое возможно даже послужит для чего-то полезного. Одно я могу сказать точно — оно поможет еще лучше понять как работать с UARTом. Устройство не особо хитрое — есть 10 светодиодов, состоянием которых мы можем управлять с компьютера через UART. Когда мы отправляем с компьютера символ «1» у нас загорается первый светодиод, отправляем еще раз — светодиод гаснет. Отправляем символ «?» и контроллер выдает нам состояние всех светодиодов. Аппаратно ничего нового (кроме светодиодов) тут нет. Я использовал свою любимую STM32VL Discovery и беспаячную макетную платку, в результате был рождён этот монстр 🙂

Читать далее «UART в STM32. Часть 2.»