kaper.su

На Пикабу
поставил 0 плюсов и 1 минус
117 рейтинг 14 подписчиков 2 подписки 4 поста 1 в горячем

Я в свои 30 лет  меньше видел чем там малая ...

Просто хочу чтобы про них больше узнали (Яхта,Семья,Путешествия)

Пытаюсь в CMSIS  на stm32

А вот и я )). Продолжаю Изучать stm32 .

В Общем как всегда работа отвлекает и времени катастрофически не хватает. Но тем не менее вот какие мысли у меня накопились.

Пытаюсь в CMSIS  на stm32 Stm32, Электроника, Длиннопост, Микроконтроллеры

Меня тут третировало пара человек дескать  я использую HAL для того чтобы дрыгать ножками , а ведь можно все это сделать и без этого. Если честно не понятно  мне это  маленько , ну типо HAL  и нужен  для того чтобы быстро сделать что то  не сильно вдаваясь в нюансы. наоборот что то сложное надо писать на cmsis чтобы быть ближе к железу. Это как рисование картин . Если тебе надо бил-борд ты используешь трафареты, если тебе нужна картина аля мишки в лесу воруют шишки то будь добр использую  краски кисточку талант и усердие (ИМХО)

Кароче  CMSIS  я в любом случае хотел изучить типо написать проект с 0 с минимум зависимостей. Но столкнулся с тем что непонимаю откуда берутся некоторые файлы.


Стандартный набор для разработки состоит из файлов cmsis (несколько штук), main.c, startup.c, flash.ld 

И вот как раз с последними файлами была прям трабла, я ни в какую не могу понять откуда и зачем эти файлы startup.c, flash.ld  Просто я привык что исходники всегда где то лежат их просто надо скачать с гитхаба и прицепить к друг другу . Здесь же был какой то хаус.  То-есть файлы обязательны но все начинали  разбирать  программирование с аля открываем ide  создаем проект и все поехали код писать.


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

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



Если коротко то startup_**.s файл это набор привязок железа и их инструкций к тем или иным функциям в си, также выделяет место под стек, ну еще пару настроек о которых я скорее всего не знаю .


Файл FLASH.ld это линкер он собирает все в одну кучу и решает зависимости и конфликты. Как я понял FLASH.ld для всех stm32 практически одинаковый отличается только размер памяти, и опять же как я понял у некоторых камней есть плюшечки которые описываются в этом ld скрипте (например несколько ram не как обычно одна). Коротко об этом файле можно почитать здесь: http://themagicsmoke.ru/books/c_for_embedded_systems/text/linker.html



Так как файлы эти генерируются системами разработки. А я сижу на Debian и среды разработки keil (говорят что там более аккуратные файлы генерируются) мне было суждено использовать STM32cubeMX (я пытался сделать это с помощью среды segger но не осилил, было бы интересно узнать как это сделать, я бы с удовольствием посмотрел бы).


Я создал проект пустой без настроек . включил галочку чтобы мне вместе со всеми файлами сгенерировал make файл.

Пытаюсь в CMSIS  на stm32 Stm32, Электроника, Длиннопост, Микроконтроллеры

А потом просто вытащил нужные cmsis файлы ld-скрпит и стартап файл .


Stm32cubeMX генерирует system_stm32f1xx.c которая генерирует функцию SystemInit().

Функция которая вызывается при старте и описывается в файле startup_stm32f103xb.s в ней как правило описываются настройки микроконтроллера (тактовая частота и др), но в целом это не обязательно.

Также в это файле описывается переменная SystemCoreClock которая содержит в себе тактовую частоту. Еще в этом же файле лежит функция SystemCoreClockUpdate() которую надо вызывать всегда когда вы изменяете частоту работу камня. Этой функцией вы обновляете переменную SystemCoreClock.


В целом это было основное непонимание по файлам которое я разрешил для себя и решил этим поделится с вами.


Пока я изучал cmsis я написал небольшой набор функций пока тестировал разные штуки на STM32F103C8Tx.Основное что хотел запустить  это  UART но в примере  есть еще  MCU и обработка  кнопки.

Пытаюсь в CMSIS  на stm32 Stm32, Электроника, Длиннопост, Микроконтроллеры

Я руководствовался вот этими сайтами. пока писал код.

http://dimoon.ru/category/obuchalka/stm32f1

http://mypractic.ru/urok-20-interfejs-uart-v-stm32-rabota-s-nim-cherez-registry-cmsis-ispolzovanie-preryvaniya-uart.html


Если вас интересует uart с помощью HAL то вам сюда: https://istarik.ru/blog/stm32/120.html


Для отправки в uart можете воспользоваться скриптом на питоне который приложен к гиту python3 input.py


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


Но один прекрасный товарищ на ютубе уже рассказал как это можно сделать и сделал даже комментарии что почему и как:

https://pikabu.ru/story/razrabotka_skhemyi_i_pechatnoy_platyi_stm32_7277307


В следующей статье я постараюсь выложить проект розетки с реле таймером. Где будет возможность по дням недели настроить включение и выключение той или иной нагрузки. У меня уже есть одна реализации на HAL https://github.com/IzyI/timer_menu_lcd1602 Но реализация меня не совсем устраивает. Плюс у меня не хватает знаний по языку C. Я не знаю как реализовать те или иные структуры. Но постараюсь как то решить свое незнание.

Как то так.

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

Дрыгаем ножками stm32 с помощью команд через usb-uart переходник

Кароч потерялся я из за работы. Но вот опять появилось времечко, и я тут же залез в микроконтроллеры stm32.



Изучение ковки начинается обычно с гвоздя, изучение столярного дела частенько начинается со стула или коробки, изучение языка программирования начинается с HELLO WORLD . В мире микроконтроллеров обычно все начинается с мигания светодиодом. Я наверно поступлю так же но чуть чуть по другому .


ТЗ мое примерно такое:

Я хочу с компьютера посылать команды, например 1-1,  а светодиод  на макетной плате соединенный с  ножкой 1 должен зажигался. А если отправить 1-0, то светодиод должен выключаться.

Где это можно Применить:

Например  можно подавать команды с компа на включение и выключение какого-нибудь реле.

В посте я распишу  то чего мне не хватало  , на что я потратил очень много времени чтобы разобраться, и какие бы ссылки бы я хотел получить если бы где то на форуме задал вопрос как  сделать uart на stm32.

Я скорее всего не буду расписывать что за что отвечает, потому-что не доконца компетентен в вопросах. И какие-то нюансы по коду тоже не напишу потому-что  в редакторе  пикабу нет возможности нормально редактировать его. . Проект пока-что будет написан на библиотеке HAL, он позволяет писать код как в ардуино. Сижу я из  под linux , поэтому некоторые ньюансы могут отличаться  от Windows.

Я еще экспериментирую с форматом.  Но если что предлагайте)) . Постараюсь  улучшить.


Предыдущий пост :https://pikabu.ru/story/stm32_ili_kak_ya_pokoryal_7982983


Юзать я буду микросхему STM32F103C8T6:

Ссылка на даташит https://www.st.com/en/microcontrollers-microprocessors/stm32...

Дрыгаем ножками stm32 с помощью команд через usb-uart переходник Stm32, Stm32f103, Длиннопост, Микроконтроллеры

Для соединения с компом буду юзать переходник usb-uart на чипе PL-2303.

Дрыгаем ножками stm32 с помощью команд через usb-uart переходник Stm32, Stm32f103, Длиннопост, Микроконтроллеры

Также нам нужен ST-link/v2 через который мы будем прошивать микроконтроллер

Соединить stm32 c ST-link/v2 нужно по этой схеме .

Дрыгаем ножками stm32 с помощью команд через usb-uart переходник Stm32, Stm32f103, Длиннопост, Микроконтроллеры

Перед тем как начать собирать  схему и писать код нужно почитать инфу по регистрам.

STM32 имеет довольно богатую периферию и довольно сильно отличается от Arduino. Но концептуально логика управления микроконтроллером везде одинаковая. Ты просто обращаешься к регистрам и манипулируешь ими (включаешь выключаешь слушаешь.


Так как я такой себе embedder, я боюсь что не смогу грамотно разъяснить за регистры да и растянется это на очень много. Я сошлюсь на пару статей которыми я руководствовался:

1) Очень хорошо объясняет как управлять пинами с помощью библиотеки HAL .

http://mypractic.ru/urok-8-upravlenie-portami-vvoda-vyvoda-cherez-funkcii-biblioteki-hal.html

2) Вот неплохое объяснение что такое библиотека HAL :

https://istarik.ru/blog/stm32/119.html

3) По этой ссылке можно почитать про сами регистры на stm32 .На мой взгляд это лучшее объяснение по регистрам которое нашел.

http://mypractic.ru/urok-6-porty-vvoda-vyvoda-stm32.html

4) Здесь же объяснение как можно подергать ножкой через CMSIS

http://mypractic.ru/urok-7-upravlenie-portami-vvoda-vyvoda-cherez-registry-cmsis.html

В целом ознакомившись с этими ссылками можно уже иметь кое какое представление о регистрах.

5) Так как буду работать с uart . Я сошлюсь на статью про сам uart и как с ним работать через библиотеку HAL.

https://istarik.ru/blog/stm32/120.html

Проект можно посмотреть по ссылке на гитхабе :

https://github.com/IzyI/stm32_simple_examples/tree/master/simple_uart

Теперь же приступим к самой сборке Проекта.


Схема примерно такая

Дрыгаем ножками stm32 с помощью команд через usb-uart переходник Stm32, Stm32f103, Длиннопост, Микроконтроллеры

У меня на макетной плате это выглядит ка кто так :

Дрыгаем ножками stm32 с помощью команд через usb-uart переходник Stm32, Stm32f103, Длиннопост, Микроконтроллеры

Теперь создадим в  CUBEMX  и настроим его тактирование

(про настройку тактирования можно почитать вот здесь http://mypractic.ru/urok-5-sistema-taktirovaniya-stm32.html):

Подключаем керамический резонатор.

Дрыгаем ножками stm32 с помощью команд через usb-uart переходник Stm32, Stm32f103, Длиннопост, Микроконтроллеры

Настраиваем  тактирование:

Дрыгаем ножками stm32 с помощью команд через usb-uart переходник Stm32, Stm32f103, Длиннопост, Микроконтроллеры

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

Дрыгаем ножками stm32 с помощью команд через usb-uart переходник Stm32, Stm32f103, Длиннопост, Микроконтроллеры

Включаем UART  и включаем  прерывания

ПО прерываниям лучше всего почитать вот эти ссылки:

1) http://mypractic.ru/urok-15-parallelnye-processy-vypolnenie-zadach-v-fonovom-rezhime-pri-pomoshhi-preryvaniya-ot-tajmera.html

2) http://mypractic.ru/urok-18-sistema-preryvanij-stm32-organizaciya-i-upravlenie-preryvaniyami.html

Дрыгаем ножками stm32 с помощью команд через usb-uart переходник Stm32, Stm32f103, Длиннопост, Микроконтроллеры

Настраиваем пины:

Дрыгаем ножками stm32 с помощью команд через usb-uart переходник Stm32, Stm32f103, Длиннопост, Микроконтроллеры

И генерируем проект.

Осталось  только  скопипасть код с main.c  в ваш проект.


Также надо не забыть зарегестировать функцию HAL_UART_IDLE_Callback. добавив в stm32f1xx_hal_uart.h про это  я расписал в  этой ссылке.  В этой функции мы регистрируем  обработку  флага IDLE .

Этот флаг устанавливается аппаратно при обнаружении незанятой линии. То есть, если в приёмник поступает несколько байт подряд, а потом возникает пауза (линия находиться в состоянии HIGH некоторое время), то взводится флаг IDLE генерирующий прерывание, а мы по этому прерыванию определяем что данные перестали поступать.


Дальше компилируем и собираем, заливаем и радуемся. Ну или не радуемся))

make

st-flash write ./simple_uart.bin  0x08000000

Также для отправки сообщений я написал простенький скрипт на python используя библеотеку pyserial, С помощью  него можно отправить  команду в микроконтроллер:

python3 send.py 1-1

З.Ы. В следущем моем практикуме )). Я соберу  свою отладочную плату на подобие bluePill  с распаянным usb-uart. Код я напишу на  CMSIS, выполнять он будет  тоже самое ,  постараюсь максимально все  покрыть комментариями и все залью на githab.  И наверно я все  же сделаю большую  часть в виде видео.


З.Ы. з.ы. Я не последняя инстанция. Но если что пишите.) 

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

STM32 или как я покорял

STM32 или как я покорял Stm32, Linux, Разработчики, Длиннопост, Самоделки

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

И чем дальше я продвигался в изучении этого языка, тем сильнее у меня пропадал интерес к этой идее.

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

Другое дело когда ты решил изучить для себя совершенно неизвестную для себя штуку. Где каждое новое знание для тебя целое открытие, с которым лично я сразу же хочу делится. Правда обычно делится получается с теми кто под руку попался, и как правильно им это вообще не интересно (мама прости но это так)).

На днях я решил плотно заняться STM32. Я вообще, давно хотел разобраться в таинствах микросхем , и пособирать всякие штуки на их основе. Даже года 2 назад закупил целый набор ардуино со всяким барахлом датчиками и т д и т п.


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


Теперь наконец то я вырвался из этого порочного круга.

И чтобы мне было веселее я решил заливать то, как я изучаю все эти штуковины.


Это прелюдия а щас по факту:

1) Я сижу из под Debian , поэтому меня будет интересовать подходы разработки в этой среде. В целом это не сильно будет влиять на общую картину.

2) Почему stm32.  все просто, хочу заниматься булингом ардуинщиков

3) В качестве среды разработки буду использовать VSCODE , мы же тут все за опенсорс не правда ли. ( НЕТ ,все равно потому буду писать скорее всего на jetbrains, продался...).

4) Прошивать буду через стандартный китайский stlink, потому незабываем его качнуть и поставить , любым удобным способом https://github.com/stlink-org/stlink

5) Копию кода (урезанного) я буду заливать на гитхаб : https://github.com/IzyI

6) Я буду мега максимально субъективен. Буду писать только те моменты которые я не понял и те нюансы которые мне показались важными. А также буду давать ссылки на сторонние ресурсы. Откуда я черпал знания. У боле умных людей.

7) Писать буду на  СИ.  И код я так себе пишу, даже если это Python. И уж если решили ругать мой код, то помните что главный ответ на главный вопрос 42.

8)  Для сборки проектов буду использовать stm32cubemx https://www.st.com/en/development-tools/stm32cubemx.html ибо  удобство

9) Большая часть кода скорее всего будет написана на библиотеке HAL. Но постараюсь по мере освоения юзать и CMSIS . Вкратце если кто не знает то в мире STM32 существует 3 библиотеки которые юзают  разработчики :

- - **HAL** - набор драйверов позволяющая обращаться ко всей периферии микроконтроллера не сильно вдаваясь в суть .


**Плюсы:**

- скорость разработки

- мультиплатформенность (легко перенести код с одного stm32 на другой stm32 более жирный к примеру)

- простота работы.


**Минусы:**

- знающие говорят что местами глючная

- рано или поздно все равно надо лезть в кишки микроконтроллера

- жирноват по коду

- местами так се написана (многим не нравится).


*Отличный выбор если вам надо быстро поднять USB стек.*

*Херовый если вам надо выжать из микроконтроллера максимум. *

- - **СMSIS** - (Cortex Microcontroller Software Interface Standard) как вы не поняли это стандартное описания интерфейса для всех армов, включает в себя структуры описания регистров и стартовый набор макросов для работы.


**Плюсы:**

- работа напрямую с регистрами

- скорость кода и его размер

- чистота (прозрачность) кода

- скилы прокачиваются как у летчиков в 41-45 , ты либо выживешь во время вылета, либо тя собьют к (херам)

- можно делать просто волшебные штуки

- лапочка со всех сторон


**Минусы:**

- нет мультиплатформенности

- очень долгая разработка

* Отличный выбор если вы шарите и у вас много времени по жизни*

*Херовый если сроки горят или вы узнали что такое регистры месяц назад. *

- - **LL** - без понятия что за библиотека, да и в холиварах ее редко упоминают, а это значит нам это не интересно

А теперь коротко что нам надо для работы в Debian.

- компилятор:

sudo apt-get install gcc-arm-none-eabi


- openocd:

Эта штука отладчик, по идее понадобится потом

sudo apt-get install openocd


- stm32cubemx

Идем на офицальный STM сайт https://www.st.com/en/development-tools/stm32cubemx.html. Регаемся и качаем оттуда STM32cubemx.


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


Для винды я не думаю что стоит приводить пример ибо там все накликивается кнопками

Идем на офицальный STM сайт https://www.st.com/en/development-tools/stm32cubemx.html. Регаемся и качаем оттуда STM32cubemx. Также можете скачать и установить IDE STM32cubeide, я не совсем люблю подобный софт, но думаю что в будущем это может пригодится как никак STM32cubemx все же заточен на работу с этими микроконтроллерами.

VSCODE я думаю тоже разберетесь и установите https://code.visualstudio.com/. В целом, на чем писать не так важно, лишь бы удобно было. VSCODE бесплатный и там есть более менее работающий переход по функциям и автоподсказки (но это не точно).


Что-жь соберем заготовку на наш первый проект.


Запустим STM32cubemx находим вкладку File кликаем new project.

STM32 или как я покорял Stm32, Linux, Разработчики, Длиннопост, Самоделки

Теперь найдем нужный нам микроконтроллер и кликнем start project.

STM32 или как я покорял Stm32, Linux, Разработчики, Длиннопост, Самоделки

Теперь переходим на вкладку project Manager. Указываем в качестве названия t1 во вкладке toolchain указываем Makefile

STM32 или как я покорял Stm32, Linux, Разработчики, Длиннопост, Самоделки

Кликаем generate code открываем через VSCODE. в терминале заходим в папку пишем make. На выходе у нас появляется папка build в которой лежат готовый файлы для заливки кода.

STM32 или как я покорял Stm32, Linux, Разработчики, Длиннопост, Самоделки

Как вы видите в linux не так сложно все это запустить. Хотя если честно когда я только сел разбираться для меня это был просто пи*ц. Даже щас из за больших пробелов в знании в языке Си и сборке через Cmake и Make файл, я страдаю . Но чай разберемся.))


P.S Я не последняя инстанция. Но если что пишите.)

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