UART в STM32. Часть 1.

Благодаря предыдущей статье, у нас теперь есть базовые представления об интерфейсе UART. Руководствуясь ими и даташитом на контроллер STM32F100RBT6B попробуем разобраться, как что-то передать через UART в компьютер и наоборот, заставить контроллер принять что-то от компьютера. Начать нужно с того, что UART интерфейс в контроллерах STM32 не один, в вышеупомянутом контроллере их аж три штуки. Я планирую использовать UART1, следовательно передающий провод (TxD) от USB-UART преобразователя я подсоединяю к ноге контроллера работающей на приём (PA10), а передающую ногу (PA9) я подключаю ко входу (RxD) преобразователя USB-UART. Для работы с этим интерфейсом существует великое множество регистров. Для облегчения работы программиста, вместе с CooCox’ом поставляется библиотека предназначенная для работы с UART’ом. Я довольно хорошо изучил её и она мне понравилась, но для лучшего понимания принципов её работы нужно вкратце познакомится с регистрами. В следующей статье, в которой будет описан практический пример использования UART’a, я буду использовать именно её. Для начала стоит сказать что нужно настроить чтоб интерфейс заработал:  

  1. Включить тактирование порта А
  2. Настроить ногу PA9 как выход push-pull в альтернативном режиме. Частота 50 МГц
  3. Настроить ногу PA10 как вход без подтяжки
  4. Включить тактирование UART1
  5. Настроить параметры UART1: Скорость, кол-во стоп бит, проверку четности итд.

С первыми четырьмя пунктами проблем быть не должно, всё это знакомо из статьи про портымикроконтроллера, а вот с пятым пунктом немного сложнее, но попробуем разобраться. 

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

UART в STM32. Часть 0.

Рано или поздно возникает потребность подсоединить своё устройство к компьютеру для обмена данными с ним. Например, для выгрузки результатов измерений, приёма команд от управляющей программы, обновления прошивки, да и много для чего другого. В настоящее время повсеместно используется USB и его использование было бы неплохим вариантом, если бы не его сложность. А вот UART куда проще, поэтому его то мы и будем использовать. Для начала разберемся что он представляет собой на физическом уровне. Для передачи и приёма данных используются всего два провода и само собой земля. Для обмена данными два устройства должны быть соединены так:

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

Минимальный набор инструментов

Где-то прочитал что инструмент которым пользуется электронщик — это продолжение его собственных рук, в принципе справедливо сказано. В этой небольшой статье я попытаюсь рассказать какие инструменты должны быть у каждого кто хочет взяться за изучение контроллеров STM32 (да и электроники вообще). Для начала на первых порах нам понадобится мультиметр: Комбинированный прибор позволяющий измерять всё что душе угодно. Как минимум он должен измерять напряжение, сопротивление и силу тока, а остальное пока опционально. У меня например мультиметр такой: 

Читать далее «Минимальный набор инструментов»

Простой счётчик на STM32

Теперь когда мы более-менее разобрались как рулить портами микроконтроллера можно попробовать сделать что-то практическое и даже немного полезное, дабы закрепить знания. Делать мы сегодня будем простейший счётчик, а считать он будет количество нажатий кнопки. Ну а кнопку в свою очередь можно прицепить куда угодно, например к двери, чтоб считать количество открываний 🙂 Это первое что пришло мне в голову, вероятно что вы придумаете ему куда более лучшее применение. В качестве устройства индикации мы будем использовать 4-х разрядный семисегментный индикатор. Он представляет собой вот такую железяку:

Читать далее «Простой счётчик на STM32»

Порты микроконтроллера

Порты ввода/вывода пожалуй важнейшая часть микроконтроллера, без неё всё остальное просто бессмысленно. Сколько бы не было у контроллера памяти, периферии, какой бы высокой не была тактовая частота — это всё не имеет значения если он не может взаимодействовать с внешним миром. А взаимодействие это осуществляется через эти самые порты ввода/вывода. Далее для краткости будем называть их просто портами. Порт это некоторый именованный набор из 16-ти (как правило) ног контроллера, каждая из которых может быть индивидуально настроена и использована. Количество портов может различаться, например в контроллере установленном в отладочной плате STM32vl Discovery имеются три порта A,B,C. Существует два основных режима работы ног контроллера: вход и выход. Когда нога контроллера настроена на выход — к ней можно прицепить любой потребитель: светодиод, пищалку, да и вообще что угодно. Нужно понимать что ноги у контроллера не потянут большую нагрузку. Максимальный ток который может пропустить через себя одна нога составляет ~20 мА. Если планируется подключать что-то с более высоким энергопотреблением то нужно делать это через транзисторный ключ. В противном случае нога порта (а то и весь порт, чем черт не шутит) сгорит и перестанет выполнять свои функции. Чтобы обезопасить ногу порта можно прицепить к ней резистор номиналом примерно 220 ом. Таким образом при напряжении питания 3.3 вольта даже при коротком замыкании ноги на землю ток не превысит критического значения.  Второй режим работы ноги контроллера — это вход. Благодаря этому режиму мы можем считывать например состояние кнопок, проверяя есть ли на ноге напряжение или нет. Это вкратце, а сейчас рассмотрим подробнее как работать с портами. Рассматривать будем конечно же на практике, благо что аппаратная часть (светодиоды и кнопка) для наших экспериментов уже реализована на плате STM32vl Discovery. Если же платы нет, то можно подключить к контроллеру светодиоды и кнопку следующим образом: 

Читать далее «Порты микроконтроллера»

Знакомство с STM32VL Discovery

Для начального знакомства с контроллерами STM32 идеальным вариантом будет готовая отладочная плата. Так получилось, что я совершенно бесплатно заполучил платку STM32VL Discovery. Было время когда их раздавали бесплатно всем, кто изъявил желание её получить. Если покупать, то стоит она сравнительно не дорого, например в наших краях ~20$. Как правило любая отладочная плата (из всех что я видел) представляет собой непосредственно сам микроконтроллер, программатор подключенный к этому контроллеру и некоторый набор внешней периферии которая так же определённым образом подключена к контроллеру. И все это на одной платке. Под периферией подразумеваются различные кнопки, индикаторы, светодиоды и прочие ништяки 🙂 Надо отметить что в плане периферии эта платка очень бедна: Есть всего лишь 2 светодиода и одна кнопка (+ одна кнопка сброса но она не в счет). Для первого знакомства  достаточно, но если идти дальше а не только мигать диодом — то маловато будет и надо паять что-то своё или дорабатывать эту платку. Выглядит сама платка так: 

Читать далее «Знакомство с STM32VL Discovery»

Необходимый софт

Так уж сложилось, что на моем компьютере всегда была установлена Windows, поэтому весь софт который мы будем использовать в ходе изучения микроконтроллеров STM32 предназначен для винды. Кстати у STM32 есть еще одно преимущество перед другими популярными контроллерами (типа pic или avr), для STM32 нет особой проблемы с софтом под линукс (об этом подробнее в другой раз).  Весь софт который нам понадобится можно поделить на три группы: 

  • Тот в котором мы пишем текст программы
  • Тот при помощи которого мы компилируем программу
  • Тот который записывает скомпилированную программу в контроллер

Это означает что у суровых челябинских металлургов есть возможность писать программы хоть в блокноте, потом делать make файлы, компилировать всё это дело и прошивать. Но мы пойдем читерским путём, заюзаем софт который будет делать всю грязную работёнку за нас, ведь на самых первых порах, получение результата гораздо важнее глубокого понимания принципов работы. Выбор IDE дело ответственное, среди трёх кандидатов (IAR, Eclipse и CooCox) я выбрал последнего по ряду причин: он бесплатный, легкий в настройке, есть поддержка ST-LINK (того который в STM32 Discovery стоит), удобный редактор кода и отладчик, интерфейс похож на эклипс который многие видели и юзали. От слов переходим к делу — скачаем, установим и настроим софт.

Читать далее «Необходимый софт»