Пытаюсь в 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. Я не знаю как реализовать те или иные структуры. Но постараюсь как то решить свое незнание.

Как то так.