STM32 новичку в ARM что к чему
Re: STM32 новичку в ARM что к чему
Прошу прощения, что влезаю в вашу дискуссию в теме "STM32 новичку...", но все рискну задать вопрос - что такое SPL и HAL? Высокоуровневые библиотеки какие-то? Что такое CMSIS? Нет, я вижу этот CMSIS в настройках проекта Keil, даже галочки ставил-снимал во вкладке с ним, следуя найденным в интернете инструкциям к проектам типа "hello world". Но все равно не понимаю, что он и для чего. А он для чего-то нужен, раз вокруг него (и SPL с HAL) столько страстей разгорелось.
Астролябия-сама меряет, было бы что мерять!!!
- Реклама
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
Asmodey, признавайся, тяжело жить с баном в гугле? 
Re: STM32 новичку в ARM что к чему
Гугль из первых строк поиска ведет на три такие же дискуссии: здесь, на изиэлектроникс и на казусе (и участники холивара везде почти те же). Плюс на хабрахабр, который я принципиально не читаю.
Так-то понятно, что это все либы, но в чем разница между ними? Ведь приверженцы тех и других за что-то бьются в спорах, значит разница есть, и немалая.
Я так подумал - если тут присутствующим не лень который день ругаться за либы, чиркнуть пару-тройку строчек для кратчайшей их характеризации тем более не составит труда для них.
Вот чего нашел тут https://www.drive2.ru/b/2253235/
Так-то понятно, что это все либы, но в чем разница между ними? Ведь приверженцы тех и других за что-то бьются в спорах, значит разница есть, и немалая.
Я так подумал - если тут присутствующим не лень который день ругаться за либы, чиркнуть пару-тройку строчек для кратчайшей их характеризации тем более не составит труда для них.
Вот чего нашел тут https://www.drive2.ru/b/2253235/
То что написано в пункте 3 актуально на сегодняшний день? Там где про примеры и описание либы HAL.1)CMSIS — это стандартная библиотека для кортексов. То есть это стандарт. С помощью этой библиотеки мы можем писать наши программы — но только с прямой записью в регистры. Это самый профессиональный способ написания программ, и кстати самый правильный, но сложный, так как придётся от а до я учить даташиты, постоянно сидеть с открытыми доками на процессор чтобы найти куда записать тот или иной бит в регистры.
2)SPL -Standard Peripherals Library — это попытка ST Electronics выпустить одну общую библиотеку для объединения всех своих процессоров. ЧТобы было проще переносить код и т.д и т.п. Работать проще как для начинающего, но всё равно всё вбиваем ручками — Никакой Автоматики!
3)HAL — Hardware Acess Level — это вторая попытка ST Electronics выпустить единую библиотеку для разработки. Заодно с ней вышла и программа CubeMX для настройки всего этого хозяйства.Всё гладко и хорошо по началау, но только по началу — дальше всё, приехали — ни примеров, ни обзоров. Поэтому пока не исследуют эту библиотеку вдоль и поперёк- делов не будет)))
То есть смысл в том что SPL уже вдоль и поперёк всю распилили и изучили. Поэтому, хочешь не хочешь а учить нужно. И вообще нужно стремиться к CMSIS. Но это уже кому захочется))
Астролябия-сама меряет, было бы что мерять!!!
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Нет, не актуально. Вместе с новыми выпусками библиотек идёт достаточный набор примеров. В основном, для HAL, но есть и для LL.
Кстати, если не ограничиваться только Ъ CMSIS, то сегодня вместо заброшенного SPL, возможно, более предпочтителен вариант использовать LL. Причём, есть две опции - 1) пользоваться только заголовочными файлами, в которых по сути просто больше полезных макросов, расширяющих CMSIS-овские, и много встраиваемых (inline) функций, более читабельных, чем прямые игры с регистрами в стиле CMSIS, и 2) пользоваться ещё и .c файлами (USE_FULL_LL_DRIVER - вроде так).
CubeMX умеет генерировать код как и для HAL, так и для LL.
Кстати, если не ограничиваться только Ъ CMSIS, то сегодня вместо заброшенного SPL, возможно, более предпочтителен вариант использовать LL. Причём, есть две опции - 1) пользоваться только заголовочными файлами, в которых по сути просто больше полезных макросов, расширяющих CMSIS-овские, и много встраиваемых (inline) функций, более читабельных, чем прямые игры с регистрами в стиле CMSIS, и 2) пользоваться ещё и .c файлами (USE_FULL_LL_DRIVER - вроде так).
CubeMX умеет генерировать код как и для HAL, так и для LL.
Re: STM32 новичку в ARM что к чему
[uquote="WiseLord",url="/forum/viewtopic.php?p=3705021#p3705021"]более предпочтителен вариант использовать LL[/uquote]
Ее можно использовать в Keil? Или куб обязателен?
Ее можно использовать в Keil? Или куб обязателен?
Астролябия-сама меряет, было бы что мерять!!!
- Реклама
Re: STM32 новичку в ARM что к чему
Asmodey, периферия настолько гибкая и весьма универсальная, что ее не охватит ни спл ни калокуб.
Пользуясь ими вы ограничиваете себя и в выборе и росте.
Что спл что калокуб по сути своей та же аурдунья , набор скетчей. Да и STM озвучивает их лишь как пример использования а отнюдь не догму.
Пользуясь ими вы ограничиваете себя и в выборе и росте.
Что спл что калокуб по сути своей та же аурдунья , набор скетчей. Да и STM озвучивает их лишь как пример использования а отнюдь не догму.
Re: STM32 новичку в ARM что к чему
если б я "плясал" от хал/спл врядли мне пришло в голову, что возможно вот так запрячь таймер
TIM2->SMCR = ((uint16_t)0x0066); // TS=110, SMS=110
TIM2->CCMR1 = ((uint16_t)0x0100); // CC2S=01 (PA1 start)
TIM2->CCMR2 = ((uint16_t)0x00F8); // OC3M=111, OC3PE=1, OC3CE =1 (PA0 strob)
TIM2->CCER = ((uint16_t)0x0100); // CC3E=1 (PA2 OUT)
TIM2->CR1 = ((uint16_t)0x0088); // ARPE, OPM
(stm32f103c8)(биты ARPE, OC3PE возможно лишние - не помню, проверял без них или нет)
не предполагал, что на таймер возможно подать раздельно три вещи (такт,старт,строб) - "курил" RM оказалось возможно. Из абстракций spl я б до этого не додумался. говорю за себя
это сочинял цепочку tim1-tim2-spi, когда хотел почти полностью аппаратно читать некую последовательность (полученную из двухполярного кода), tim1 определял начало посылки и стробом разрешал tim2, последний "сдвигал" клок для spi.
не подумайте, что призываю писать на регистрах, речь не об этом.
TIM2->SMCR = ((uint16_t)0x0066); // TS=110, SMS=110
TIM2->CCMR1 = ((uint16_t)0x0100); // CC2S=01 (PA1 start)
TIM2->CCMR2 = ((uint16_t)0x00F8); // OC3M=111, OC3PE=1, OC3CE =1 (PA0 strob)
TIM2->CCER = ((uint16_t)0x0100); // CC3E=1 (PA2 OUT)
TIM2->CR1 = ((uint16_t)0x0088); // ARPE, OPM
(stm32f103c8)(биты ARPE, OC3PE возможно лишние - не помню, проверял без них или нет)
не предполагал, что на таймер возможно подать раздельно три вещи (такт,старт,строб) - "курил" RM оказалось возможно. Из абстракций spl я б до этого не додумался. говорю за себя
это сочинял цепочку tim1-tim2-spi, когда хотел почти полностью аппаратно читать некую последовательность (полученную из двухполярного кода), tim1 определял начало посылки и стробом разрешал tim2, последний "сдвигал" клок для spi.
не подумайте, что призываю писать на регистрах, речь не об этом.
Re: STM32 новичку в ARM что к чему
a797945, есть заголовочный файл, где описаны все регистры и маски для периферии. Можно обойтись без использования "магических чисел"

Иван Сусанин - первый полупроводник 
Re: STM32 новичку в ARM что к чему
a797945, вот так писать неведомые числа в регистры - это же очень удобно и понятно, правда?
Добавлено after 1 minute 20 seconds:
[uquote="dosikus",url="/forum/viewtopic.php?p=3705092#p3705092"]Пользуясь ими вы ограничиваете себя и в выборе и росте.[/uquote]с чего бы? использование библиотек ааатнюдь не означает "только библиотечные функции и ни шагу в сторону".
Добавлено after 1 minute 20 seconds:
[uquote="dosikus",url="/forum/viewtopic.php?p=3705092#p3705092"]Пользуясь ими вы ограничиваете себя и в выборе и росте.[/uquote]с чего бы? использование библиотек ааатнюдь не означает "только библиотечные функции и ни шагу в сторону".
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 новичку в ARM что к чему
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3704901#p3704901"]Eddy_Em, поясните связь между RTE драйверами CMSIS и HAL.[/uquote]
Что такое "RTE драйвер"? Базовый CMSIS — это просто заголовочные файлы, общие для всех ARM'ов. Я уже выше говорил. И SPL, и кал, и opencm3 включают в себя CMSIS — без него никуда!
Изучать МК надо, читая даташит, RM и эррату! А не ковыряясь в чужом быдлокоде!!!
Библиотеки для STM32 вообще не нужны. Хотя бы потому, что нет нормальной библиотеки. Я имею в виду header-only библиотеку, которая не будет содержать ничего лишнего, кроме макросов!
А все эти SPL и прочие калокубы — полный отстой, который только усугубляет. Работу они не облегчают.
Куб разве что иной раз полезен, чтобы выбрать подходящий МК под свои хотелки (скажем, нужно вам 8 независимых UART'ов — вуаля! а потом уже закрываем куб и работаем по-человечески).
Что такое "RTE драйвер"? Базовый CMSIS — это просто заголовочные файлы, общие для всех ARM'ов. Я уже выше говорил. И SPL, и кал, и opencm3 включают в себя CMSIS — без него никуда!
Что за чушь? Где я такой бред нес?И изучать МК переделевыя то, что написано для одного МК под другой - это уже практика, до которой и следует разобрать теорию на примерах. А у Вас какой-то замкнутый круг получается: сначала переделать, а потом изучать )))
Изучать МК надо, читая даташит, RM и эррату! А не ковыряясь в чужом быдлокоде!!!
Что за каша у вас в голове? Нет там никаких "драйверов"!!! Я даже ссылку кидал на свой гитхаб. Слабо пройти, и посмотреть, что входит в CMSIS? Там тупо десяток заголовочных файлов: общее + для разных архитектур.ПростоНуб писал(а):И вижу в CMSIS только два варианта драйверов. Один когруэнтный SPL, а второй - RTE. Так о каких драйверах тогда речь?
Нет, CMSIS - не библиотека! А базовый набор заголовочных файлов для работы со всеми семействами ARM'ов.Asmodey писал(а):Так-то понятно, что это все либы, но в чем разница между ними?
Библиотеки для STM32 вообще не нужны. Хотя бы потому, что нет нормальной библиотеки. Я имею в виду header-only библиотеку, которая не будет содержать ничего лишнего, кроме макросов!
А все эти SPL и прочие калокубы — полный отстой, который только усугубляет. Работу они не облегчают.
Выкиньте это дерьмище! Ни кайло, ни калокуб вам не нужны!Asmodey писал(а):Ее можно использовать в Keil? Или куб обязателен?
Куб разве что иной раз полезен, чтобы выбрать подходящий МК под свои хотелки (скажем, нужно вам 8 независимых UART'ов — вуаля! а потом уже закрываем куб и работаем по-человечески).
Это — единственный правильный вариант с небольшой оговоркой: magick numbers — зло! Нельзя их писать. Надо писать макросы. Тогда читабельность и поддерживаемость кода будет на высоте.a797945 писал(а): врядли мне пришло в голову, что возможно вот так запрячь таймер
Re: STM32 новичку в ARM что к чему
[uquote="VladislavS",url="/forum/viewtopic.php?p=3705305#p3705305"]Макросы зло, язык идёт в сторону отказа от них.[/uquote]Eddy_Em писал(а):magick numbers — зло! Нельзя их писать. Надо писать макросы.
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Макросы — зло?
Ну-ну, посмотрел бы я на того, кто без макросов будет на С писать...
Ну-ну, посмотрел бы я на того, кто без макросов будет на С писать...
Re: STM32 новичку в ARM что к чему
м-да, надо было сделать еще оговорку: код приведен не в качестве примера, а чтоб не быть голословным.
за магические цифры - согласен, понимаю. Только я вот ни разу не программист (мне так было понятней и компактней) и переносимость здесь мне не нужна, уговорил железяку выполнять как мне надо и пошел дальше собирать механизм.
господа-товарищи, извиняюсь, что эти пять строчек доставили кому-то не приятные ощущения. Сорри.
за магические цифры - согласен, понимаю. Только я вот ни разу не программист (мне так было понятней и компактней) и переносимость здесь мне не нужна, уговорил железяку выполнять как мне надо и пошел дальше собирать механизм.
господа-товарищи, извиняюсь, что эти пять строчек доставили кому-то не приятные ощущения. Сорри.
Re: STM32 новичку в ARM что к чему
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3705341#p3705341"]Нет, CMSIS - не библиотека! А базовый набор заголовочных файлов для работы со всеми семействами ARM'ов.[/uquote]
Описание регистров и битов для обращения к ним?
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3705341#p3705341"]Ни кайло, ни калокуб вам не нужны!.[/uquote]
Кайло в смысле Keil? А что тогда, с моим нулевым опытом? Игрался немного с Visual Studio Code, но он для меня после MPLAB как темный лес, в котором я светодиодом моргну только через полгода...
Описание регистров и битов для обращения к ним?
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3705341#p3705341"]Ни кайло, ни калокуб вам не нужны!.[/uquote]
Кайло в смысле Keil? А что тогда, с моим нулевым опытом? Игрался немного с Visual Studio Code, но он для меня после MPLAB как темный лес, в котором я светодиодом моргну только через полгода...
Астролябия-сама меряет, было бы что мерять!!!
Re: STM32 новичку в ARM что к чему
[uquote="Asmodey",url="/forum/viewtopic.php?p=3705396#p3705396"]Описание регистров и битов для обращения к ним?[/uquote]в основном да. Ну и плюс некоторые общие для ARM-ов штуки типа системного таймера.
[uquote="Asmodey",url="/forum/viewtopic.php?p=3705396#p3705396"]Кайло в смысле Keil? А что тогда, с моим нулевым опытом?[/uquote]что угодно, насамделе. Нравится кейл - используйте его. Тут просто некоторые, не будем показывать пальцем, проповедуют путь задротства, "все, что не ручное перекидывание битов по даташиту - подлежащая искоренению ересь", вот это вот) Если надо не шашечки, а ехать, причем ехать более-менее стандартно - даж околоардуинский platformio вполне рабочий вариант.
и нулевой опыт в чем? если в программировании вообще - отложите контроллеры в сторону и осильте базовые вещи на компе.
[uquote="Asmodey",url="/forum/viewtopic.php?p=3705396#p3705396"]Кайло в смысле Keil? А что тогда, с моим нулевым опытом?[/uquote]что угодно, насамделе. Нравится кейл - используйте его. Тут просто некоторые, не будем показывать пальцем, проповедуют путь задротства, "все, что не ручное перекидывание битов по даташиту - подлежащая искоренению ересь", вот это вот) Если надо не шашечки, а ехать, причем ехать более-менее стандартно - даж околоардуинский platformio вполне рабочий вариант.
и нулевой опыт в чем? если в программировании вообще - отложите контроллеры в сторону и осильте базовые вещи на компе.
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 новичку в ARM что к чему
IDE — огромное множество. И выбирать голимую проприетарщину — тупиковый путь!
Если не нравится, скажем, qt-creator, есть sublime, geany... Да толпа их! Можно вообще vim или emacs использовать — на любителя.
Если не нравится, скажем, qt-creator, есть sublime, geany... Да толпа их! Можно вообще vim или emacs использовать — на любителя.
Re: STM32 новичку в ARM что к чему
Тупиковый путь - это голимый компилятор.
Иван Сусанин - первый полупроводник 
Re: STM32 новичку в ARM что к чему
[uquote="a797945",url="/forum/viewtopic.php?p=3705378#p3705378"]м-да, надо было сделать еще оговорку: код приведен не в качестве примера, а чтоб не быть голословным.
за магические цифры - согласен, понимаю. Только я вот ни разу не программист (мне так было понятней и компактней) и переносимость здесь мне не нужна, уговорил железяку выполнять как мне надо и пошел дальше собирать механизм.
господа-товарищи, извиняюсь, что эти пять строчек доставили кому-то не приятные ощущения. Сорри.[/uquote]
+100500, абсолютная истина.
за магические цифры - согласен, понимаю. Только я вот ни разу не программист (мне так было понятней и компактней) и переносимость здесь мне не нужна, уговорил железяку выполнять как мне надо и пошел дальше собирать механизм.
господа-товарищи, извиняюсь, что эти пять строчек доставили кому-то не приятные ощущения. Сорри.[/uquote]
+100500, абсолютная истина.
Re: STM32 новичку в ARM что к чему
Как раз для минимального опыта. http://purebasic.mybb.ru/viewtopic.php?id=575Asmodey писал(а):А что тогда, с моим нулевым опытом?
http://purebasic.mybb.ru/viewtopic.php?id=564
Куб как кодогенератор я бы не советовал использовать. Лучше SPL или регистры.
Так много компиляторов для ARM. Вроде есть только IAR, Keil и GCC.Myp3ik писал(а):Тупиковый путь - это голимый компилятор.
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: STM32 новичку в ARM что к чему
Да ничего особенного. Берешь и пользуешь. А пару не очень понятных мест (в общем-то, типичные "непонятки" Кейла) я уже разъяснял коллеге под ником СКАЗОЧНИК в начале этого года. Глянь сюда и сюдаAsmodey писал(а):Кайло в смысле Keil? А что тогда, с моим нулевым опытом?
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)


