STM32. CMSIS #2. GPIO - создаем проект с нуля в ARM KEIL на CMSIS.
Вставка
- Опубліковано 2 кві 2021
- Купить книгу "Освоение STM32 самостоятельно" по CMSIS:
• При печати на Xprinter...
Разбираем регистры GPIO по переведенному Reference Manual STM32F1 и пишем сразу два проекта: на CMSIS и на HAL по работе с портом ввода вывода, а также сравниваем размеры полученных прошивок в проектах. Исходники проектов и часть моей книги приводятся по ссылке ниже:
github.com/nr-electronics/CMS...
Содержание:
00:08 Введение
00:34 Рассмотрение GPIO
16:21 Создаем проект на CMSIS - GPIO в ARM KEIL
23:34 Создаем проект на HAL - GPIO в ARM KEIL
24:51 Сравнение полученных результатов
__________________________________________________
Вы можете помочь каналу через Яндекс-деньги:
money.yandex.ru/to/4100115727...
или через банковскую карту:
4377 7237 6190 5714
__________________________________________________
Ура!! Очередное видео с использованием CMSiS. Спасибо!
Пожалуйста. Главное что на пользу. Не забывайте про лайки для повышения рейтинга видео в поиске ютуба.
Круто как всегда.
Благодарю. Может вставите мой плейлист о CMSIS на своём канале?
Довольно подробно.
Да, старался. Все показал
Огромное спасибо за труд. Пытаюсь перейти с AVR (к тому ж ещё с ассемблера) на STM32. Один первых покупателей на Вашу книгу. Английским не владею и с чтением документации встречаю трудности, так что с большим нетерпением буду ожидать выхода книги.
Спасибо большое. Ожидайте пожалуйста её.
Лайк как всегда. Не хватает урока как к этому всему еще и freertos прикрутить . Было бы вообще шикарно.
FreeRTOS это хорошо и нужно одназначно. Это отдельная серия, все не осилю. Но желание и необходимость имеется.
Надеюсь что будет серия видео на cmsis и вы покажете не только порты, но и включение тактирования , spi, i2c, uart и плюс небольшие примерчики.
Тактирование в проекте настроено, заметьте, по умолчанию на 72 МГц, можете посмотреть код, Кейл так генерит. Видео тем более было по всем настройкам RCC, дублировать это не вижу смысла. А вот SPI, USART, I2C и некоторые другие впереди.
@@NRelectronics я заметил, что тактирования включено, но обычно его пишут в цикле с ожиданием ответа.
Спасибо Вам за видео.
Обычно да. Но кейл сразу по дефолту настраивает на 72МГц при создании проекта. Очень удобно.
все доступно и понятно. кроме момента с подключением заголовочного файла. меня всегда он пугал. и почему подключили только стартап?
Подключили файл из семейства нашего МК, по имени файла не думаю, что должны быть вопросы. Стартап файл необходим из Кейла, и остальные все необходимые подтягиваются. Так прикольно и удобно сделан Кейл. Можно было папку засунуть со всеми необходимыми файлами, но так быстрее и они актуальные и все необходимые. Версии CMSIS, если необходимо, можно переключать.
@@NRelectronics ну я до этого смотрел Илью Галкина, так тот на 20 минутный ролик растянул подключение этих файлов руками. так вот это меня всегда отталкивало от стм-ок.. спасибо за ответ
Пожалуйста. Можно сделать значительно быстрее, чем за 20 минут ;)
тогда нужно было еще сравнить с прошивкой на ASM для наглядности)
С асмом не хочу взаимодействовать, видео утонут в длительности.
с ходу в #ТОП!
Не перехвалите)))
Подскажите, почему вы не используете spl библиотеку от stm? И как правильно ее подключить
Она считается морально устаревшой. Её обычно уже не используют. Вместо неё LL/HAL. Подключается ручками. Есть PDF от st. Как буду дома, скину себя.
Николай, подскажите, пожалуйста, есть ли у вас видео по установке и началу работы с Кейлом? Если есть, можете ли дать ссылку?
Вроде нашёл:
ua-cam.com/video/fH-EpQ7mSsg/v-deo.html
Да да, именно это видео, вы меня опередили))) спасибо за ссылку.
Спасибо за уроки! А скоро ли мы увидим вашу книгу, которую вы использовали в данном видеоуроке?
Пожалуйста, на пользу главное! Пока еще нет, в стадии написания, ролики стимулируют её продолжение, а также новые подписчики и лайки ;)
@@NRelectronics я тоже хотел задать вопрос, что за книга? И в комментариях нашел ответ:)
Немного пишу, по свободе. В следующем видео на гитхаб также выложу, часть, относящуюся к следующему видеокроку.
Спасибо. Документ - это Ваш перевод RM0008?
В том виде котором был показан да, вольный перевод RM.
Спасибо. Заметил что если задать 50МГц то на HAL более 1,78мГц не поднимается, а на СMSIS почти 3мГц ногодрыг
Пожалуйста. На хале у меня также больше 2МГц даже при установки скорости HIGH в кубике не бывает почему-то...
@@NRelectronics Смотрел - там много лишних операций (а это тики проца)
Правильно говорите, много тиков, и частота падает.
Вы можете подсказать как поменять зажигание светодиодов на ножки другого порта? У меня там есть gpio, nvic, exti. У меня там стоит на порт А, я хотел поменять на порт В. Я поменял просто там где было написано GPIOA на GPIOB. И ещё где было написано RCC_APB2ENR_IOPAEN_Msk, IOPAEN на IOPBEN. Но это не сработало
У вас каша в голове. Вам нужно разобраться как работает тактирование - RCC, затем GPIO.
Добрый день, подскажите почему подключили только вот эти файлы CORE, Startup?
Почему тот же GPIO не подключали?
Как пример, что работает и без подключения прекрасно.
@@NRelectronics я к тому почему именно такие файлы? опытным путем выяснили?
Вы можете ничего не добавлять и своими ручками в ручную всё добавить, вот вообще сами. Это разные пути под компиляцию. Можно компилировать в командной строке под Make, вариантов много. Есть необходимые требования для компонтвщика/линковщика. Кому как нравится работать. Я лишь показываю и не настаиваю.
а где можно приобрести вашу книгу?
К сожалению, ещё пока формирую. Я сообщу.
Все повторил как у вас, но диод на ножке не замигал, после сброса горит. Если скачать похожий проект, то все заводится. Подскажите, пожалуйста, где мог допустить ошибку?
Птичка в настройках кейла - reset and run.
В идеале бы еще порт и пин записать через define чтоб при изменении порта или пина весь код не менять
Согласен, было бы удобнее.
Добрый день!Хорошее видео! Сейчас собираю проект с CMSIS-DSP: но пока загвоздка - настроил CMSIS DSP через manage run-time environment, но в итоге 2000 предупреждений и 1 ошикба - .\Objects\x1.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST. Предупреждения в основном касаются преобразования типов. ПРИЧЕМ в main.c написано всего 2 инструкции включения -
#include "arm_math.h"
#include "arm_const_structs.h"
Все.Больше кода нет вообще..
Есть какие-то идеи, где искать проблему?
День добрый. Не пойму, если кода нет вообще то что за ошибки в преобразовании типов??
я Вас приветствую! спасибо за уроки, отличная подача материала!! .... подскажите где взять мануал на русском языке для данного мк ?
Я Вас также приветствую! Это часть моей книги, которую пишу. По ссылке под видео с гитхаба можно часть по GPIO скачать.
Добрый день, как скачать/купить книгу?
Добрый день. К сожалению никак еще нельзя получить, пишится, в работе.
Я так понимаю вы купили Kiel? т.к. на 20:33 можете просматривать внутренние регистры.
Это бесплатная с ограничением в 32кБ.
@@NRelectronics странно... у меня тоже бесплатная, но этих функций нет..
@@NRelectronics А не подскажите как настроить Кейл, т.к. не могу добиться отображения переферии МК при отладке?
А у меня вопрос.А можно библиотеку cmis в папке устанавоивать.Как в CubeiDE?
Вы в проект можете подключить любую папку, и с CMSIS тоже.
@@NRelectronics А менеджер не нужен тогда?Просто я столкнулся что CubeiDE при обновлении меняется иногда синтаксис.Да и созданные проекты ранее не компилируются пишет ошибку как было в 1.13.А при создании можно было удалять все файлы кроме 2 а сейчас ещё 2 добавили.
Какой менеджер?
@@NRelectronics Ну есть видео там где подключают менеджер что бы подключить cmsis для данного вида stm32
Здравствуйте. Только начал вникать в стм. Где можно вашу книгу приобрести?
Здравствуйте. У меня через телеграмм канал или по новостям на канале. Сейчас портирую её в издательство.
@@NRelectronics хорошо, буду ждать.
Есть вопрос по видео.
Строка GPIOC->CRH &= ~GPIO_CRH_CNF13(я перекинул все на пин , к которому подключен светодиод) сбрасывает оба бита CNF13. Далее устанавливаются биты MODE13 так, чтобы частота была не более 2 МГц. Но частота все равно 4 МГц. Да и вообще, как бы я биты не устанавливал, всегда частота 4 МГц. Это признак того, что у меня неликвидный(поддельный) микроконтроллер?
И еще прикол заметил. На соседнем пине С14 тоже наблюдается шевеление на частоте 4 МГц , но размах в районе 250 мВ.
Очень похоже на то что контроллер нелеквидный. Такого не должно быть конечно.
Жаль сюда не привели пример ещё из библиотекой LL. Чтоб уж сравнивать так по полной)))
Хотел, но просто хал как более громоздкая. LL был бы ближе к cmsis а не HAL. Думаю логично.
@@NRelectronics логично то логично, но в цифрах интереснее знать))))
Я вас понимаю)))) тогда в каком-нибудь интересном следующем проекте постараюсь учесть это)
Да как-то недалеко LL ушел от HAL, на моем камне вышло 775 kHz HAL против 818 kHz LL
Такое чувство, как будто, контроллеры левые...
Да. CMSIS. Давайте все на нем напишем. Например машинное зрение.
Вы напишите машинное зрение?
@@NRelectronics Нет, конечно. Моё мнение CMSIS нужен для ответственных участков кода
Согласен с Вами. Для ответственных применений нормально сделанную и отработанную библиотеку.
Сами на чем и в каких средах пишите?
@@NRelectronics KEIL для миландра. Для stm CubeIde.
В репе на гитхабе нет файла main.c из примера на чистом CMSIS.
Далее в этом же примере. Почему вы пишите:
GPIOB->BSRR |= GPIO_BSRR_BS5
GPIOB->BSRR |= GPIO_BSRR_BR5
Я что-то не понимаю, или это ошибка?
Регистр BSRR доступен только на запись. Для чего Вы сначала производите чтение из него? Не правильнее ли будет написать сразу:
GPIOB->BSRR = GPIO_BSRR_BS5
GPIOB->BSRR = GPIO_BSRR_BR5
Иначе какая же это атомарность. Или я что-то путаю?
командами: GPIOB->BSRR |= GPIO_BSRR_BS5, GPIOB->BSRR |= GPIO_BSRR_BR5 - я осуществляю запись "1" в соответствующие регистры BSRR_BS5 и BSRR_BR5.
Вы немного путаете.
Спасибо за информирование! Завтра с утра пораньше добавлю файлик.
@@NRelectronics дак там не только запись! Как разворачивается операция |= ?
GPIOB->BSRR = GPIOB->BSRR | GPIO_BSRR_BS5
Верно? То есть мы сначала читаем содержимое регистра BSRR, потом накладываем битовую маску через OR, что бы поднять в нужных битах единицы, и потом только заносим обратно значение в BSRR. Разве не так?
И зачем читать содержимое этого регистра, когда нужно сразу писать туда нужный бит? По этому и на осциллограмме "скважность" меандра не 50%. На чтение и наложение маски тратятся такты процессора. А если просто присваивать, то меандр должен получиться ровнее. Это же не ODR регистр, запись в BSRR нулевых значений не изменит состояние выводов порта, да и по мануалам он только на запись. На чтение возможно там всегда нули будут.
Вы путаете логику работы BSRR с ODR. BSRR выполняется атомарно, за один такт, ODR - за три такта чтение-модификация-запись. Вы говорите наоборот, если я правильно вас понял.
@@NRelectronics ну, верно, BSRR работает за один такт. Но что именно работает за один такт? 3 операции, которые вы записали через |= ? Объясните, зачем читать из BSRR?
Так как тогда правильно записать код ногодрыга по вашему мнению?
HEX это же не совсем bin:) И кстати говорят "размер не имеет значения можно взять контроллер жирнее" но почему то все опускают что придется не только память увеличивать но ещё и мегагерцы, тк этот код кто то должен выполнять. Лишние байты лишнее время ядра!
А если необходимо взять контроллер поменьше и не такой жирный? Какой-нибудь STM32F0 с 16кБ флеша. Тогда начнутся проблемы с халом. И вспомните CMSIS, а может и ассемблер ;-)
Зачем эта возня с hex файлами, когда в консоле писало сколько программа занимает места во flash. Программа на CMSIS - 736 байта, на HAL - 2492 байта.
Это хорошо, что, мы с вами знаем значения консоли. Но не все ведь, поэтому доступнее и нагляднее чтоб было)
Где взять такой же даташит на русском
Допишу книгу и купите в бумаге уже!)
@@NRelectronics а где так скачать можно ?
Просто так нигде.
@@NRelectronics а не просто куда обратиться и как купить и по чем
Простите, но в электронке не распространяю к сожалению.
Ничего не понимаю. Изображение размытое только у меня?
У меня норм.
@@NRelectronics Спасибо. Исправил в настройках. Теперь все ОК.
Ок.
Эээээээээээ А где вааще это гeference manual под брендом NR (с красной лейбой ) ? Я тамака шарился на гитхабе . Нет ни че.....
Какой именно RM? Из видео книга?
@@NRelectronics Тот ,который в ролике .
В разработке у меня.
Во всём виновата ардуино. Для привлечения масс к программированию микроконтроллеров нужно было упростить процесс изучения. Процесс изучения упростили, а вот то что это упрощение приводит к неэффективности использования микроконтроллеров скромно помалкивают. ST со своим халом просто пытается привлечь "программистов" которые не хотят разбираться как устроен микроконтроллер и учиться эффективному прграммированию. Бизнес прежде всего.
Все правильно написали! Ардуина отучила думать людей как правильно вообще программировать! Работает сейчас и хорошо, ладно, прилетело прерывание и все поломалось... Отладки работы кода нет... И начинается...
Ужас какой. В микроконтроллерах всегда так? Неужели нельзя писать в соответствующие поля регистра сразу по 2 бита, а не по одному?
GPIOB->CRL &= ~GPIO_CRL_MODE5_0; // gpio_b_5_crl_mode[0] = 0
GPIOB->CRL |= GPIO_CRL_MODE5_1; // gpio_b_5_crl_mode[1] = 1 (0b10 = 2 MHz)
Посмотри, как это легко, понятно и изящно делается в Verilog'e:
gpio_b_crl[21:20] = 2'b10 // set 2 MHz for port B[5]
P.S. у библиотеки HAL, кстати, куда более читабельный код
Можно писать сколько угодно бит, хоть по 10,главное самому понимать что это настраивается или выполняется. С верилогом не надо сравнивать.
@@NRelectronics, ну просто все эти дефайны вроде как придуманы для упрощения, а выглядит наоборот как усложнение.
Мы настраиваем порт B, бит 5
Задаём ему частоту 2 МГц и тип push-pull. Неужели нельзя было выстроить абстракцию таким образом, чтобы это выглядело примерно так:
GPIO_B_5->CLR->MODE = MODE_2MHZ;
GPIO_B_5->CLR->TYPE= TYPE_PP;
Претензии не к тебе, а к тому как вообще неудобно выстроена абстракция в STM32. Я может ещё не въехал, но после ПЛИС с Верилогом, это всё выглядит крайне нечитабельно и неудобно.
Да я понял. Просто в CMSIS так, абстракции по сути нет. Если только мы сами не придумаем или завернем в классы. Верилог конечно компактнее.
@@NRelectronics есть где разбор , как именно вы читаете код, с его разбором ? не понял как вы читали таблицу и сравнивали с кодом. 20 минута. или есть у вас возможность вести курсы? я пытаюсь это все учить но и в программировании пока новичок совсем. Только паять умею и платки собирать .