shuran958

На Пикабу
351 рейтинг 55 подписчиков 6 подписок 10 постов 4 в горячем
Награды:
5 лет на Пикабу
60

Stm32 запускает новую линейку камней! G0x

Привет всем. Хочу поделиться с вами радостью, не знаю как вы, а я очень ждал, когда же stm обратит внимание на то, что люядм нужно больше недорогих чипов, причем хотелось увидеть не только 20 ногие контролееры вроде stm32f0x, а так же что то поменьше, и вот свершилось. Думаю некоторые из вас следят на новостями и уже узнали из других источников о релизе линейки контроллеров STM32G0.

Ну а для тех кто не в курсе, рад поделиться новостью. Новая линейка не только будет иметь чипы в 8и ногих корпусах, которые смогут без проблем заменить всякие attiny 85 и им подобные, но при этом будет иметь 32х разрядную архитектуру и кучу новых фич, среди которых гораздо меньшее число перефирийной обвязки, уменьшившееся до пары резисторов (все остальное уже встроено в чип), высокоскоростной встроенный кварц, USB-c power delivery. Приведу пару скринов из официально презентации:

Для тех кто хочет более подробного описания вот ссылка на собственно презентацию:

https://www.st.com/content/ccc/resource/sales_and_marketing/...


И что еще прекрасно, есть обучающие видео, наконец то нормальные видео от STM:

https://www.st.com/content/st_com/en/support/learning/stm32-...


Я уже заказал на пробу NUCLEO-G071RB для экспериментов, а вы? ;)

Показать полностью 2
41

Stm32 HAL DS3231

Пришла идея собрать часики на STM32 и я столкнулся с тем, что все либы для DS3231 либо на SPL, либо просто ужасающе нерабочие. Потому взялся написать собственную, чем и хочу с вами поделиться, код еще не вполне закончен, но уже вполне юзабелен. Был сделан акцент на простоту использования и независимость от конкретной модели stm32, код тестировался на stm32f103c8t6, но подойдет любой контроллер имеющий i2c и желательно usart для сообщений отладки, но это необязательно. Либа активно дописывается и будет совершенствоваться в будущем в моих и возможно ваших проектах ;)

https://github.com/shurankain/stm32f1_ds3231_oled


P.S. HAL был выбран не просто так, начиная с версии 2019.1 JetBrains обещает поддержку embedded разработки и интeграцию OpenOCD + STM32CubeMX плагина в среду CLion, которую я считаю лучшей, хоть и платной IDE из сущестующих для работы с С++.

Stm32 HAL DS3231
Показать полностью 1
19

Stm32 HAL tea5767 fm radio example + lib

Давно хотел разобраться как TEA5767 заставить работать в паре с stm32, и вот простейшая либа портированная с ардуинки готова, может кому-то так же будет полезно:

https://bitbucket.org/shurankain/stm32f103_tea5767_test/src/...

Пример написан для blue_pill, но либа никак не зависит от модели контроллера smt32.


для тех кому ближе ардуинка, вот пример на pro_mini atmega368 5v 16mHz, но уже с SSD1306 и управлением двумя кнопками, тут сама либа для TEA5767 не моя, ее автор Simon Monk, за что ему спасибо, благодаря простоте его кода и разобрался :

https://bitbucket.org/shurankain/tea5767_oled_pro_mini


В любом случае рекомендую использвать усилитель, вроде PAM8403 на выходе радиомодуля, иначе сигнал будет очень слабым, разве что в наушнике различимым и использовать для усилителя отдельное питание, даже небольшой советский динамик потребляет больше, чем сможет отдать ардуина/stm32. А так-же желательно питать TEA5767 от 3.3v, так помех меньше, не забывайте что 5v - предельное напряжение питания для нее.

Показать полностью
77

Stm32f103C8T6 ADC (АЦП - аналого-цифровой преобразователь) основы

И снова здравствуйте. Сегодня я хотел бы рассказать о не очень сложной, но достаточно полезной штуке - АЦП (Analog to Digital Converter) в stm32.


В тексте будут встречаться отсылки на мою первую статью, которую вы можете найти тут: https://pikabu.ru/story/dlya_nachinayushchikh_stm32f103c8t6_...


Итак, АЦП можно представить, как вольтметр, выдающий различные цифровые значения в зависимости от входного напряжения. В STM32 АЦП 12 разрядный, а входное напряжение на его входе колеблется от 0 до 3.3v (напряжение питания контроллера). Конструируя собственные поделки на камнях STM32 необходимо понимать, как работает АЦП.


На вход его подается 2 напряжения - напряжение питания и напряжение входное (котоорое мы хотим отобразить в числовом эквиваленте). Исходя из их сравнения АЦП и выдает результат. Из этого следует, что мы должны иметь очень стабильное напряжение питания самого АЦП, иначе значения будут сильно плавать. К счастью на нашей тестовой плате все уже реализовано и ничего изменить не удастся.


Давайте перейдем к наглядным примерам. Имеется 4 светодиода, каждый из которых подключен к выходам контроллера PB12(красный) PB13(желтый) PB14(зеленый) и PB15 (синий). Давайте подключим так же потенциометр, который будет работать делителем напряжения, а выходное значение будет обрабатываться нашим АЦП. Так же параллельно потенциометру подключим вольтметр, который будет помогать нам определить, что в данный момент на выходе делителя и соответственно на входе АЦП (в нашем случае это будет PA0).

В программной части реализации разделим возможный диапазон на 4 части, которые будут начинаться со следующих значений (комментарий - из значение в вольтах):

#define ADC_0V_VALUE 0 //0V

#define ADC_1V_VALUE 1024 //0.825V

#define ADC_2V_VALUE 2048 //1.65V

#define ADC_3V_VALUE 3072 //2.475V


Итак, программа написана следующим образом. В зависимости от значения на выходе потенциометра будет устанавливаться высокий уровень (загораться светодиод) на выходах PB12-PB15.


Теперь перейем к созданию проекта. В CubeMX выберем нашу плату STM32F103C8Tx. Активируем ADC для IN0. Отметим порты PB12-PB15 как выходные. Включим дебаг через Serial Wire и подключим внешний кварц HSE (опционально).

Вкладка Clock Configuration не имеет никаких изменений по сравнению с предыдущей статьей:

А теперь зайдем в настройки AЦП:

Вполне возможно, вы читали какие то гайды и как правило во всех них, при использовании куба с этой отладочной платой имеется аналогичный скрин, где видна возможность настройки разрядности АЦП (вроде этого):

Но реальность увы не иная, возможно, ранее разрядность АЦП и можно было настроить для этого камня, но теперь куб такой возможности не предоставляет и окно конфига выглядит так:

Возможно, это обусловлено тем, что камень f103 один из самых старых, и stm просто уделяет ему меньше внимания, но это не так критично, ведь по умолчанию, хоть разрядность ацп и не указана, но она выставлена как максимальное значение 12 бит. Все что нам необходимо, это включить Continious Conversion Mode, как на скрине выше. Зачем? Давайте останоовимся немного на режимах работы АЦП их 3:


1. Scan Conversion Mode (Многоканальный) - этот режим используется в том случае, если у нас будет несколько входных каналов преобразователя. Т.к. в данном случае мы используем только один вход A0, то этот режим оставляем отключенным. Если же вы используете несколько входных каналов, то АЦП можно будет сконфигурировать для их опроса в заданной последовательности.


2. Continious Conversion Mode (Циклический) - если этот режим отключен, то опрос канала/каналов произойдет лишь однажды, результат запишется в выходной регистр АЦП и данные всегда будут неизменны. В случае активацции, опрос каналов будет происходить непрерывно, и данные в выходном регистре будут обновляться.


3. Discontinuous Conversion Mode (Непоследовательный) - этот режим позволяет настроить АЦП сканирующее несколько каналов так, что бы опрос происходил не по всем каналам, а по заранее заданным группам каналов, причем если групп несколько, то за раз будет опрашиваться толко одна, затем следующая и т.д.


Следующий раздел ADC_Regular_ConversionMode предоставляет возможность сконфигурировать работу нескольких АЦП. Его мы рассмотрим в следующих статьях в более сложных примерах, а сейчас просто оставим все заданные значения по умолчанию.


На этом конфигурацию проэкта в CoubMX можно считать законченной. Завершим создание проекта для Atollic по аналогии с прошлой статьей.

Вся программная релизация заключается в объявлении переменной, хранящей значение adcResult и объявлении выше описанных #define значений. После этого в цикле читаем значение с АЦП в переменную adcResult и останавливаем АЦП до следующей итерации цикла:


HAL_ADC_Start(&hadc1);

HAL_ADC_PollForConversion(&hadc1, 100);

adcResult = HAL_ADC_GetValue(&hadc1);

HAL_ADC_Stop(&hadc1);


Затем сравниваем полученное значение с объявленными выше и в зависимости от результата включаем заданный выход контроллера (загорается светодиод) и отключаем остальные.


Код приложения доступен для скачивания по ссылке: https://bitbucket.org/shurankain/adc_leds_f103/downloads/


Стоит заметить, что камень STM32F103C8 имеет встроенных 2 АЦП, каждый из которых может обрабатывать до 18 каналов. Каналами могут служить не только данные извне, но и от внутренних источников. На используемой нами плате доступны 10 внешних каналов (ADC1_IN0-ADC1_IN9 или ADC2_IN0-ADC2-IN9), а так же внутренний термометр встроенный в чип и опорное напряжение (1.20V но может меняться от температуры).


P.S. Дабы избежать ненужных вопросов в стиле: "а чем отличается от Адруино?", - отвечу сразу. Рарядностью. В ардуино 10и разрядный АЦП в stm32 12и разрядный. Что это значит? Ардуино может дискретизировать входной сигнал с точностью 1/1024 (1024 = 2 в 10й степени), в случае с stm32 это 1/4096 (2 в 12й степени). Соответственно, благодаря двум дополнительным разрядам, АЦП в stm32 выдает результат в 4 раза точнее.


P.S. Я обязательно расскажу об использовании нескольких АЦП в будущих статьях. Но в ближайших планируется рассказать о работе с i2c, подключении дисплеев и датчиков. Хочу поблагодарить своих подписчиков, которые у меня появились за интерес к данной теме! Буду рад отвтетить на ваши вопросы и услышать ценные советы с вашей стороны. Спасибо.

Показать полностью 10
106

Для начинающих Stm32f103C8T6

Добрый... день? Сегодня я хотел бы поделиться моим опытом начинающего экспериментатора с stm32. В данном посте мне хотелось бы помочь тем, кто хочет перейти с ардуино или просто начать использовать stm32 для своих поделок. Я и сам не имею богатого опыта работы с данными контроллерами, но буду рад поделиться своим первым опытом, и сделанными на этом пути ошибками. Надеюсь, кому-то это будет интересно.


Для начала, нам понадобится stm32f103C8T6, и дебаггер ST-Link V2. И то и другое можно купить в китае или в местных магазинах электроники, цена обоих, примерно по 2$. А так же нам потребуется 4 джампера, для соединения этих устройств. Этого будет достаточно, что-бы помигать светодиодом или управлять какими-либо внешними устройствами, но начнем с малого.


Первое, что нам понадобится - установить драйвер для программатора. Его можно найти здесь (внизу): http://www.st.com/en/development-tools/stsw-link009.html


Кроме того нам понадобятся STM32CubeMX его качаем тут: http://www.st.com/en/development-tools/stm32cubemx.html


А так же среда разработки, я предпочитаю официальный софт с поддержкой, потому берем ставую не так давно бесплатной Atollic TrueSTUDIO вот тут: http://www.st.com/en/development-tools/truestudio.html


Затем, нам нужно подключить, используя 4 джампера, наш программатор к плате контроллера следующим образом:

После этого, если возможность записи прошивки в память на вашей плате не заблокирована - все готово к созданию нового проекта. Если же запись в память вашей платы заблокирована, вы можете решить это, подключив плату аналогичным образом, но используя улилиту STM32 ST-Link Utility и переключив джампер Boot0 в положение 3.3v. Что такое Boot0 можно глянуть тут: http://wiki.stm32duino.com/images/a/ae/Bluepillpinout.gif но вообще эта статья не об этом.


Итак, для начала создадим проект, используя STM32CubeMX, эта программа предназначена для удобной инициализации периферии и создания проекта, для IDE в которой мы будем далее работать, поверьте, куб действительно прекрасен. После нажатия на кнопку "New Project", попадаем на окно выбора чипа. В нашем случае это stm32f103c8tx. Выбираем его и нажимаем "Start Project".

Следующее за этим окно выгляит довольно пугающе для начинающих, но в действительности, не представляет особых сложностей. Перед нами изображение установленного на плату чипа микроконтроллера. И все что нам нужно для начала это помигать светодиодом, потому, по аналогии с ардуино, если вы с ним работали, выбираем ножку, к которой присоединен светодиод, которым мы будем мигать. В нашем случае - это ножка PC13. Кликаем на ножку и выбираем GPIO_Output.

Вообще в stm32, в отличие от ардуино, где визуально пины делятся только на аналоговые и цифровые, пины разделены на группы, PA, PB, PC, PD. Это обусловлено тем, что stm имеет 32 разрядные регистры (GPIOA, GPIOB, GPIOC, GPIOD) для управления выходами, потому каждый регистр может управлять 16 выходами микроконтроллера, у микросхем старших поколений stm этих выходов очень много, потому было принято решение сгруппировать выходы, в соответствии с именами регистров.


Так же !ВНИМАНИЕ нужно включить возможность дебага ВНИМАНИЕ! микроконтроллера иначе, прошивка у вас зальется только 1 раз а затем вам потребуется выводить ваш контроллер из состояния легкого ступора, потому как ST-Link не будет его видеть. Если это произошло, вам прийдется потанцевать с бубном используя STM32 ST-Link Utility и так же переключив джампер Boot0 в положение 3.3v.

Так же по желанию можно подключить внешний кварц, который припаян на плате, что позволит нашему камню работать быстрее. Но это не обязательно, хотя желаемо:

Stm32 может тактироваться от любого из 2х встроенных резонаторов, медленного и быстрого LSI 40KHz(по умолчанию) и HSI 8MHz, встроенных в сам чип и таким образом, обходиться без внешнего резонатора. Либо же использовать внешние резонаторы с частотой 4-16MHz (HSE), если вам нужно ускорить ваш камень или LSE c частотами 0-1000 KHz если вам нужно жертвовать скоростью ради энергопотребления.


Настройку частоты камня и переферии делаем во вкладке ClockConfiguration следующим образом, для этого просто задаем значение 72 в поле HCLK(MHz) и нажимаем enter. Затем соглашаемся с тем, что б STM32CubeMX настроил все за нас и нажимаем снова ок, готово. Внимание! Если на предыдушем шаге вы не вклчили RCC -> HSE -> Crystal/Ceramic Resonator, то вы не сможете установить значение 72 MHz и ваш камень может работать на частоте максимум 36MHz используя внутренний кварц.

На этом конфиг закончен, теперь необходимо создать проект, для этого выбираем кнопку в виде шестерни сверху:

В открывшемся окне заполняем поля:

Project Name, Project Location и ВНИМАНИЕ! выбираем IDE для которой будет создан наш проект, в нашем случае это TrueSTUDIO, если этого не сделать, то будет создан проект для IAR (EWARM).

Так же, я рекомендю переключиться на следующую вкладку (Code Generation) и выбрать в разделе Generated files пункт Generate peripheral initialization as a pair of .c/.h files per peripheral. Это позволит очистить ваш main файл проекта от инициализации перефирии, путем выноса ее в отдельные файлы. Я рекомендую делать так всегда.

Затем нажимаем ок и создаем проект. Если вы все сделали верно, то куб сразу же предложит вам скачать необходимые для вашего контроллера библиотеки и затем отрыть проект в Atollic TrueSTUDIO:

Все что нам необходимо, это добавить следующий код внутрь цикла while в нашем main и нажать debug, перед этим убедитесь, что оба режима бут отключены (желтые переключатели установлены, как на первом фото):

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);

HAL_Delay(100);

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);

HAL_Delay(100);

Дождаться загрузки и выйти из режима дебага. К сожалению, заливка кода в контроллер без входа в режим дебага по умолчанию невозможна в AtollicTRUESTUDIO, но впринципе это можно обойти потанцевав с бубном, хотя эта статья не об этом. Если все было сделано верно, то светодиод на плате замагает с заданной частотой.

Это моя первая статья про микроконтроллеры и первая статья по электронике в целом, не судите строго, надеюсь она будет интересна хотя бы кому-то. Если будет интерес с вашей стороны - дайте знать, буду писать про stm32 дальше.

Показать полностью 10
1425

Массачусетский технологический предоставил свободный доступ ко всем своим курсам

Думаю многих заинтересует, а кому-то возможно даже будет полезно. Так же некоторые курсы имеют переведенные на разные языки версии, какие языки дсотупны можно посмотреть открыв курс.


Ссылка:

https://ocw.mit.edu/courses/audio-video-courses/

3

Немного о начале работы с Arduino. Главная проблема для меня - IDE. Борьба за комфорт.

Добрый всем день. Хотел поделиться своим опытом по знакомству с платформой Arduino.

Все началось с того, что на этот Новый Год жена подарила мне набор Матрешка Z от Амперки, зная, что я давно собираюсь уделить время немало забытой с университетских времен электронике и познакомиться с миром Arduino.


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


И вот первый опыт, схема собрана на макетке, все готово к тому, что бы заставить весело мигать светодиод и настает время лишь написать код и залить его на плату. Код конечно можно было не писать руками, а лишь взять с сайта Амперки, но я решил что мы не ищем легких путей и код надо писать самомоу. Казалось бы ничего сложного в этом нет, скачать Arduino IDE, написать скетч и залить на устройство, но с самого начала меня очень напрягла проблема - в Arduino IDE нет автодополнения и перехода к исходному коду используемого класса. Возможно, для тех, кто впервые знакомится с программированием именно начиная с Arduino, это не составляет проблем, но я по долгу работы сталкиваюсь с кодом много и каждый день, а потому, привык к тому, что автодополнение как минимум в IDE быть должно... и тут начался треш.


Первым же вариантом было пойти в гугл и начать искать варианты решения проблемы и первым решением, которое я нашел - устновить Visual Studio Code (легковесный редактор от майкрософта с гибкой настройкой плагинов) и поставить в него плагин для разработки Arduino. Это сразу же решило проблему перехода к исходному коду по Ctrl+click на имени класса и проболему автодополнения кода так же, но довольно быстро выяснилось, что плагин достаточно сырой, а его реализация местами крайне непрактична и требует настройки библиотек и путей вручную, причем некоторые пути видеть отказывается.


Вторым моим решением было обратиться к проверенным разработчикам IDE - JetBrains, продуктом которых, под названием Intellij Idea, я пользуюсь чуть чаще, чем регулярно. Но так как Idea это не совсем про С/С++, то был скачан CLion заточенный именно под это и как и ожидалось для него оказался плагин для Arduino... сломанный плагин, потому при создании проекта IDE вылетала сразу же и безоговорочно. Но дальнейший дайвинг в гугле прозволил найти 2ю его версию, которая вроде как оказалась рабочей до тех пор, пока я не попытался залить скетч на плату, как выяснилось, в момет заливки он использует так же часть кода первого плагина, который после определенной версии CLion приводит к его крашу, как и в первом случае.


И вот спустя все эти мучения после еще более глубокого исследования вариантов разработки было найдено видео на испанском о_О где рассказывали об использовнии некого плагина PlatformIO для текстового редактора Atom, который делает все что я искал и делал это быстро и изящно. После курения мануалов на сайте разработчиков данного плагина стало ясно, что поддерживает он не только Atom, но и ранее упомянутую Visual Studio Code. Было принято решение установить оба и протестировать основательно.


В результате я пришел к следующему выводу, в обоих IDE плагин показал себя замеательно и работает без каких либо нареканий, но была замечена одна особенность при использовании Atom, в момент заливки скетча, служебная информация о том сколько памяти в контроллере занимает скетч отображается в отдельном окне терминала, который существует только на мгновения загрузки скетча в память контроллера, а затем бесследно закрывается предоставляя вместо себя новое окно консоли.


Итоги: В силу вышеуказанных причин остановился на использовании связки Visual Studio Code + PlatformIO и в данный момент уже прошел все 20 опытов из набора Матрешка, сделал все дополнительные задания и провел множество экспериментов выходящих за рамки набора. Я совершенно не претендую на уникальность изложенной информации или абсолютную безальтернативность выбранного мной подхода, но я буду очень рад, если он поможет хоть кому-то, кто захочет окунуться в мир микроконтроллеров, сделать первые шаги в нем приятнее и проще, а так же избежать безсонных ночей в поисках адекватного средства разработки. Буду очень и очень признателен за любые полезные советы с вашей стороны, спасибо всем, кто дочитал!

Показать полностью
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества