ART_ME

STM32 для чайника

1 721 сообщение в этой теме

ART_ME    0

Уважаемые коллеги.

Поддался соблазну и взял STM32 с программатором.

Очень бы хотелось поиграться, а уже потом заняться всерьез.

Не могли бы Вы подсказать мануал попроще - создать нечто в микровасике, записать это в МК и посмотреть, что из этого получилось.

Так сказать ликбез для матерого электроника, которого ну очень интересует именно этот МК благодаря его мощности.

Просьба шибко не пинать новичка.

ЗЫ. ВАЖНО!  Если это форум тоже для скучающих отставников, то просьба не отвечать - я и сам уйду. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ART_ME    0

Ну вроде все получилось - связь через STLink есть, примеры компилируются и в STM32 загоняются исправно.

Поэтому назрел следующий принципиальный вопрос.

Если мне нужно, к примеру, организовать связь с компом по протоколу UART, то каков в таком случае уровень программирования STM32?

То есть нужно ли писать драйвер самому, или его где-то брать как макрос, или все эти макросы вообще в каких-то глобальных библиотеках лежат, или это составная часть компилятора?

плата STM32F103C8T6, STLink, mikroBasic PRO for ARM

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mail_robot    1 405

ничего особенного писать не нужно. Нужно скачать STM32 CubeMX, среду разработки MDK ARM (Keil) и изучить библиотеку HAL (входит в комплект куба). Используя эти инструменты можно отправить байт в комп и принять из него примерно минут за 5 не спеша. Все инструменты качаются легально с официальных сайтов

Но это только байт. Логику приема и обработки байтов, формирование пакетов и прочее пишется ручками обычным образом. Тут библиотек еще особо не придумано. Хотя в STM это намного проще чем в восьмибитках за счет взаимодействия модулей и обилия инструментов и библиотек. Можно сказать что это даже проще чем писать под ардуино, когда поймешь как, потому что философия камня тут своя собственная и надо ее суметь уложить в голове.

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

Цитата

mikroBasic PRO for ARM

а вот про это лучше сразу забыть

Изменено пользователем mail_robot

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ART_ME    0
7 минут назад, mail_robot сказал:

ничего особенного писать не нужно. Нужно скачать STM32 CubeMX и изучить библиотеку HAL. Используя эти инструменты можно отправить байт в комп и принять из него примерно минут за 5 не спеша

Но это только байт.

Байт по протоколу UART или байт бинарный без протокола?

То есть включив на компе гипертерминал и послав в него с STM32 с помощью STM32 CubeMX к примеру 41h, что я увижу в окне гиппертерминала -  A или абракадабру?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ART_ME    0
Только что, mail_robot сказал:

странный вопрос. Что пошлешь то и увидишь

Пошлю 41h

А из STM32 выйдет или 01000001 если без протокола и 001000001000 если по протоколу

Иными словами, STM32 CubeMX добавит стартовый и стоповый биты и бит паритета к посылке или нет?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ART_ME    0

Передача данных в UART осуществляется по одному биту в равные промежутки времени. Этот временной промежуток определяется заданной скоростью UART и для конкретного соединения указывается в бодах (что в данном случае соответствует битам в секунду). Существует общепринятый ряд стандартных скоростей: 300; 600; 1200; 2400; 4800; 9600; 19200; 38400; 57600; 115200; 230400; 460800; 921600 бод. Скорость ( S {\displaystyle S} , бод) и длительность бита ( T {\displaystyle T} , секунд) связаны соотношением T = 1 / S {\displaystyle T=1/S} . Скорость в бодах иногда называют сленговым словом битрейт.

Помимо собственно информационного потока, UART автоматически вставляет в поток синхронизирующие метки, так называемые стартовый и стоповый биты. При приёме эти лишние биты удаляются из потока. Обычно стартовый и стоповый биты обрамляют один байт информации (8 бит), однако встречаются реализации UART, которые позволяют передавать по 5, 6, 7, 8 или 9 бит. Обрамленные стартом и стопом биты являются минимальной посылкой. Некоторые реализации UART позволяют вставлять два стоповых бита при передаче для уменьшения вероятности рассинхронизации приёмника и передатчика при плотном трафике. Приёмник игнорирует второй стоповый бит, воспринимая его как короткую паузу на линии.

Многие реализации UART имеют возможность автоматически контролировать целостность данных методом контроля битовой чётности. Когда эта функция включена, последний бит данных в минимальной посылке («бит чётности») контролируется логикой UART и содержит информацию о чётности количества единичных бит в этой минимальной посылке. Различают контроль на четность (англ. Even parity), когда сумма количества единичных бит в посылке является четным числом, и контроль на нечетность (англ. Odd parity), когда эта сумма нечетна. При приеме такой посылки UART может автоматически контролировать бит четности и выставлять соответствующие признаки правильного или ошибочного приема.

--------------------------------------------------------

Дык STM32 CubeMX добавит стартовый и стоповый биты и бит паритета к посылке или нет?

Изменено пользователем ART_ME

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mail_robot    1 405

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ART_ME    0

ОК, поставлю вопрос по другому.

В ПЛК обычно нужны как минимум две команды для того, что отправить или принять байт в последовательный порт. Первая команда - это инициализация порта, где прописывается данные порта, а вторая - собственно отсылка и прием байта или байтов. Возможна и третья - флаг результата операции.

Как эта функция реализуется в STM32? Сколько команд я должен прописать для того, чтобы отправить байт в последовательный порт?

 

Изменено пользователем ART_ME

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ART_ME    0
1 минуту назад, mail_robot сказал:

руками - одну

Если не трудно, нарисуйте пример такой команды.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    256

Нужно одной строкой кода присвоить значение отсылаемого байта буферу передатчика UART.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ART_ME    0
3 минуты назад, mail_robot сказал:

HAL_UART_Transmit(&huart1, (uint8_t*)message, strlen(message), 255);

наздоровье

Если я правильно понял, эта команда прописана в STM32CubeMX?

 

2 минуты назад, my504 сказал:

Нужно одной строкой кода присвоить значение отсылаемого байта буферу передатчика UART.

 

 Я смогу это сделать в mikroBasic PRO for ARM или мне для этого нужен STM32CubeMX?

Изменено пользователем ART_ME

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mail_robot    1 405

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ART_ME    0
1 минуту назад, mail_robot сказал:

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

Так я как раз и пытаюсь выяснить, что именно мне читать.

К примеру, если я смогу одной строкой кода присвоить значение отсылаемого байта буферу передатчика UART в mikroBasic PRO for ARM и получить на выходе стандартную отсылку UART, то зачем мне читать про STM32CubeMX? Или без STM32CubeMX мне mikroBasic PRO for ARM бесполезен?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    256

ART_ME, Вы никак не можете понять, что Cube - это просто набор функций, который Вы вставляете в свой код. То есть попросту БИБЛИОТЕКА функций.

Для отсылки байта не нужно никакой библиотеки. Mail_robot привел Вам пример отсылки СТРОКИ байт. И эта функция (а не команда) развернется в АСМ коде контроллера в изрядное число команд.

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

Но ПРЕДВАРИТЕЛЬНО нужно настроить модуль на необходимую конфигурацию обмена (скорость, число бит, паритет и т.п.). Делается это один раз в начале кода и более не требуется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mail_robot    1 405

совершенно все верно. Но низкий уровень я намеренно не трогал. Надеюсь понятно по какой причине.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ART_ME    0

my504, вот теперь прояснилось, спасибо.

Как оказалось, Cube - это и есть тот самый набор макросов, о котором я спрашивал во втором вопросе этой темы.

Но отсылка одного байта в STM32 макроса не требует. Видимо потому, что этот макрос прописан на уровне микропрограмм. 

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

использую для этого библиотеку HAL. 

Правильно?

 

 

Изменено пользователем ART_ME

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mail_robot    1 405
8 минут назад, my504 сказал:

Вы никак не можете понять, что Cube - это просто набор функций, который Вы вставляете в свой код

 

2 минуты назад, ART_ME сказал:

Как оказалось, Cube - это и есть тот самый набор макросов

Цитата из Евангелия (только без обид)

"Если слепой ведет слепого, не оба ли упадут в яму?"

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
optima    214

@ART_ME что бы не гадать на кофейной гуще, не ужели так трудно заняться чтением? изобилие информации в сети избавляет от многих вопросов! 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ART_ME    0
Только что, optima сказал:

@ART_ME что бы не гадать на кофейной гуще, не ужели так трудно заняться чтением? изобилие информации в сети избавляет от многих вопросов! 

Чтением чего именно? Всего, что написано про STM32?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Сообщения

    • чё орёшь то? не ОБЕСПЕЧИВАЕТ я писал.
    • 4 полностью заряженых акб ли-ион дадут вам 4,2*4=16,8В. Поэтому вам нужен блок питания , который на выходе даст 17В (1. чтобы заряжать АКБ; 2. чтобы при полностью заряженых акб усь питался от блока, а не подсасывал акб). Ток блока питания не менее 3А, чтобы и питать усь и заряжать акб током 1А (при самых плохих раскладах). Естественно, усь должен работать в диапазоне от 3,5*4=14В до 17-18В. Тогда все просто: от БП через диод на усь и от БП через модуль заряда (+балансир) на АКБ, с АКБ через (возможно бмс плату защиты) диод - на усь. Это самый простой вариант без преобразователей и пр. 
    • благодарю, уже что то.
    • Конденсатором C11. Но я его менял в большую сторону и меньше ставил . Меняется только частота фона и всё. Просто у меня нет осциллографа. На ощупь приходится делать. Но на днях возьму осциллограф. Я так понял нужно замерять после дросселя. В чём будет отличие сигнала когда усилитель в резонанс вошёл и нет.
    • наверно надо думать буду питать от 14в батареи 18650 2 а где-то    4 батареи   
    • Действительно на нескольких форумах данный вопрос.  Я не знал где лучше задать вопрос! В принципе вчера только один человек и отвечал по всем форумам Извиняюсь! ir2016j - копир к компьютеру не подключается! Разве только для прошивки через USB разъем.  Первоначально на копире термопленку заменили. Съехала в сторону. Периодически он подвисал и до и после замены . После замены пленки через месяц вообще перестал грузиться. В последние дней 5 (жизни ) включался со счетчиком только с утра. (почему не пойму до сих пор) Блок питания был проверен в первую очередь. Когда копир не запускался а подвисал. На дисплее черный квадрат был и не засвечивался. Питания все 3.3в 5в 24в в норме . Подозрение было на 3.3в небольшая пульсация. в блоке питания стоит два стабилизатора на 5 в оба сигнала отличные. А 3.3в только конденсаторами сглаживаются.  Электролиты еср-метром проверял. Питание осциллографом измерял на предмет пульсации в  плоть до платы управления .  Во время работы и в повисшем состоянии. Копир запустился без платы счетчика! При печати отчетов не было ошибок! Подозреваю они хранятся на плате счетчика. Если не там - исправьте! Несколько раз ставил и снимал счетчик. без счетчика ошибка со счетчиком - не грузится. Решил вставить счетчик в работающий аппарат в спящем режиме. Он запустился но ошибка так и осталась. Затем произвел сброс всех настроек в аппарате и после этого копир начал включаться без проблем!!!!   Завтра поиски продолжу.  Счетчик - одна микросхема FRAM MB85R256 и смд конденсатор. Теоретически можно списать и поставить другую. Микросхема до 200 грн а плата до 2000 стоит.(Нигде в интернете не видел описания такого)  Не знаю - Если ошибка высвечивается в другом таком копире висит номер ее и кнопки меню реагируют или нет? у меня висит copy Еще в  отчете Spec List  позиция OPTYION ROM в сервисной инструкции стоит 32MB у меня - 0 Еще после зависания не добавляются листы в счетчики которые выводятся по нажатию кнопки 123 . Прошить можно - но сомневаюсь что поможет!  Пока думаю! Рассмотрю все советы.