STM32. CMSIS. Урок#00: Настройка: RCC, GPIO, MCO, SysTick, Delay_ms, аналог HAL_GetTick().

  Переглядів 18,312

Олег Волков

Олег Волков

День тому

Привет друзья! Вот уже 2 года, как я изучаю STM32.
Самое время, после опыта работы с библиотекой HAL, когда мы уже более менее ознакомились с периферией микроконтроллера, начать осваивать его на низкоуровневой библиотеке CMSIS.
В первом уроке мы подключим кварцевый резонатор, настроим МК на 72 МГц, узнаем как делать инициализацию GPIO, узнаем, как подключить выход с ножки Master Clock Output, настроим системный таймер, моргнем светодиодом, напишем свою функцию задержки и параллельно увидим аналог HAL_GetTick().
00:00 Введение
01:47 Что понадобится для разработки
02:39 Разбор проекта в CubeMX
03:51 Управление GPIO на выход. Регистр BSRR
08:09 Инициализация порта и настройка GPIO
16:26 Настройка RCC
43:32 Настройка SysTick(Создаем Delay_ms и аналог HAL_GetTick())
01:00:39 Настройка MCO
Материалы из урока: github.com/Solderingironspb/S...
Мои заметки по CMSIS: github.com/Solderingironspb/S...
Группа вконтакте: solderingiron.stm32
Настройки для VisualGDB: solderingiron.stm32?w=...
ЯндексДзен: zen.yandex.ru/id/622208eed2eb...

КОМЕНТАРІ: 97
@antonGoldinov
@antonGoldinov 8 місяців тому
Благодарен Автору видео. Пожимаю руку.
@user-hk1xl4ee1e
@user-hk1xl4ee1e Рік тому
Олег молодец, большую работу проделал и понятным языком все изложил.
@szapsis
@szapsis 10 місяців тому
Спасибо большое за твой труд друг!
@artstone7705
@artstone7705 Рік тому
Вот вот оно наконец - то.Надеюсь вы будете и дальше выпускать видео по CMSIS.Очень крутое и полезное видео.👍
@Alex-ed6hg
@Alex-ed6hg Рік тому
Люто плюсую ! Действительно самое понятное объяснение на просторах интернета, сугубо моё личное мнение ...
@konstantinewhite614
@konstantinewhite614 Рік тому
Круто, спасибо, отличное видео! 👍
@user-yg4mu7rm7k
@user-yg4mu7rm7k Рік тому
просто шик. спасибо)
@OpenFrimeTVcom
@OpenFrimeTVcom Рік тому
вау. спасибо) очень крутой видос
@user-vankv
@user-vankv 20 днів тому
Молодчина!
@KARMAElectronics
@KARMAElectronics Рік тому
Очень здорово, что тема CMSIS освещается все бОльшим количеством электронщиков) Вот пара рекомендаций: - Регистры BRR BSRR работают как триггеры установки соответствующих бит в ODR и считывать их не требуется (скорее даже противопоказано) - Включать HSI при старте не требуется, он уже включен по умолчанию (иначе откуда МК будет тактироваться в startup и начале main) - HSEBYP используется для подключения внешнего тактового генератора (не резонатора) - Не есть гуд подключать системную линию тактирования к отключенному PLL (да и к другим отключенным источникам тактирования) - В регистре RCC_CFGR поле SWS является статусом и доступно только на чтение, записывать туда не требуется. - Настроек SysTick в RefMan нет, так как он относится к ядру контроллера Cortex-M3, соответственно его описание будет в другом документе. А в целом начинание хорошее, удачи!
@Solderingironspb
@Solderingironspb Рік тому
Спасибо!)
@Solderingironspb
@Solderingironspb Рік тому
по поводу "Не есть гуд подключать системную линию тактирования к отключенному PLL (да и к другим отключенным источникам тактирования)" отдельное, жирное СПАСИБО!) Ух и долго же я мучался с поднятием китайского-китайского GD32F103CBT6. Ни в какую дебажиться не хотел. Хотя оригинальный STM32F103C8T6 и оригинальный GD32F103CBT6 хавали и так. Помогло)
@KARMAElectronics
@KARMAElectronics Рік тому
@@Solderingironspb 👍👍👍
@dekus80
@dekus80 Рік тому
Вообще порядок действий по установке именно для проверки себя, можно посмотреть открыв CubeMX, выбрать конфигурацию и посмотреть сгенерированный код в LL. И еще сравнить для проверки значения регистров после инита свои и что сделал код CubeMX по желаемой конфигурации. Так же позволяет оценить где накосячил (или нет). Сейчас новичкам проще, есть CubeMX для проверки, подсказке.
@OpenFrimeTVcom
@OpenFrimeTVcom Рік тому
а на счет буфера флеша? его ведь нужно включать только когда делитель шины отличено от 1?
@igornikitine6020
@igornikitine6020 Рік тому
Спасибо Добрый человек! :))
@PastuhMedvedey
@PastuhMedvedey Рік тому
Понравилось, лайк ))
@svbHiTek
@svbHiTek 7 місяців тому
У меня STM32F030, смотрю ваше видео, вникаю в свой даташит, регистры у них разные, но общий смысл понятен. Спасибо за труды!!!
@morshu8800
@morshu8800 13 днів тому
У меня сейчас тоже самое, только на G030)
@user-hw8cl8we7j
@user-hw8cl8we7j 3 місяці тому
Однозначно лайк!
@user-pc4zj1fc8q
@user-pc4zj1fc8q 7 днів тому
спасибо Вам!
@user-rf1yx4kp4r
@user-rf1yx4kp4r Місяць тому
так, стопе, я еще атмегу8 не изучил)) Спасибо за ваш труд.
@01wave01
@01wave01 Рік тому
Спасибо за замечательный урок! Искал как раз как раскурить arm как раз на bluepill. Прошелся вместе с автором по шагам. Очень нравится такой подход - сначала генерируем что-то работающее, когда не знаешь даже за что взяться сначала. Потом шаримся по нужным докам вместе, и постепенно переписываем на что-то более глубокое, низкоуовневое. Пришло понимание структуры - где заканчивается stm32 и начинается cortex. Спасибо что поделились в таком подробном виде! PS. В некоторых регистрах RCC были биты статуса (от какого источника тактирование), которые только на чтение - писать в них не нужно.
@dekus80
@dekus80 Рік тому
Только F103 давно устарел. Я не понимаю этот лаг в 15+ лет (столько уж F103). Одну и ту же инфу тянут друг у друга из года в год, хотя все менялось с годами и появлялись интереснее МК. Новички продолжают брать и изучать старье, т.к. им его предлагают к изучению и передавая дальше, замыкая круг. И если уж с нуля изучать то что-то актуальное, а не то что давно умерло с появлением более актуального. Если на платке и нужен камень посовременнее и сравнимо флеша, то бери и начинай изучать F401, это уже Cortex M4F с поддержкой плавающей точки и при этом потребление в полтора раза меньше F103. А если нужно что попроще есть современный Cortex M0+ STM32G030 (есть даже 32бит и 128МГц таймер, у g030 есть все что у g031 если что, фишка st одна маска, это какой ШИМ можно замутить, бгг)).с потреблением ~4.6мА на 64МГц, это как у древнего 8бит дна AVR только на 16МГц. Самый древний Cortex это M3, тот что F103. Потом появились M0 и M4 с переосмыслением некоторых вещей. И как бы разделение ядро M4 посложнее и камни для задач посложнее и M0 аналогично наоборот. У них кое что по своему. Например регистры GPIO у M0/M4 свои, полностью отличные от M3. Соответственно эти уроки не подойдут. Но ты задайся вопросом, нужно ли начиная тебе брать самый первый Cortex - M3 и самый первый камень - F103 по тех процессу, которые уж несколько раз сменились. Мы ж уже не в каком нибудь 2010 году. Когда есть современнее МК, а последняя серия у ST это STM32G0/G4 на M0/M4 и M3 там даже уже нет. Но от китайцев есть интересные современные, где знания регистров F103 не пропадут. Есть 55р энергоэффективные HC32V203. Я вот прям в данным момент с ними играюсь. Потребляет ~4.6ма на 72МГц, когда как F103 порядка 30ма при одинаковых условиях. Не хилая разница, да? И работают до 144МГц. И даже в мелком tssop20 есть и CAN и USB. Перефирия скопирована с F103, только ядро riscv, а не cortex, но если не программировать на ассемблере, то разницы нет. И свой программатор для riscv за ~150р. Но они продаются в виде микросхем, нужно уметь сделать свою платку под МК. Может конечно это уже для кого то проблема, но имхо кто решил увлекаться сделать для себя и платку для МК должно быть частью. У меня хобби и проекты часто не требующие много ног, поэтому интересуют чтоб в серии были корпуса tssop20 и чтоб были энергоэффективными (по этому параметру хуже f103 просто нет), соответственно такими и интересуюсь. tssop20 размер сопоставим с soic8, но 20 ног. И всегда можно перейти на мелкий QFN, если нужно еще меньше размер или на LQFP если больше ног все в рамках одного МК. stm32g030 привел, hc32v203 привел. Цена порядка 60р. Есть еще сопоставимый им gd32e220 на Cortex M23 в tssop20 и у него QFN 3x3мм, этим мог похвастаться только stm8s. Я раньше на QFN3x3 на stm8s тоже делал платки :). Из жирных... За 300р уже можно купить "жирного" китайца AT32F403A, Cortex M4F, 1МБ флеша, 200кБ ОЗУ, 240МГц. И замутить не стесняясь что-то операционкой с цветным дисплеем с анимацией и контролами, где все будет просто летать. В AT32 все камни они делают только Cortex M4. А на готовой платке я привел пример для старта для задач посложнее или по принципу "для всего" F401, для попроще, G030(или 31). Или уж делать свою платку для HC32V203 если хочется именно F103 изучать. Но мамонта STM32F103 жрущего как не в себя (которому ардуинщики не дают покоя и китайцы удовлетворяют их спрос клонами) на синих платках пора забыть.
@user-qv2mk5je8x
@user-qv2mk5je8x Рік тому
@@dekus80 Я, так понимаю, эту длинную тираду ты писал в преддверье открытия канала с уроками по новым МК? А может это и есть первый урок? Когда следующий? У меня сложилось впечатление, что это писал человек под кайфом. Почитай свою писанину сам. Какой то бред.
@user-gx7yd6jd9g
@user-gx7yd6jd9g 4 місяці тому
​@@dekus80ну ты выдал речь....😮 Даже не знаю что тебе сказать. А ничего что учебники математики начинаются с того, что Пифагор напридумывал? Цель этого ролика научить людей, а не управлять полетом БПЛА.
@funkbass1986
@funkbass1986 Рік тому
Я для себя такую же библиотеку написал для Mega168 и Mega328. То есть не макросами ща которыми адреса регистров, а прямо реализовал шаблонный класс Register_basic, а с него уже реализовал регистры контроллера. Позапихал их в соответствующие namespace например Core, GPIO, TIMER, ADC итп. И в каждом namespace сделал функции, с названиями, соотвествующими действию битов.
@igornikitine6020
@igornikitine6020 Рік тому
👍👍👍👍👍
@nurbolatamanbayev9617
@nurbolatamanbayev9617 Рік тому
👍👍
@user-pp2hz7ic7h
@user-pp2hz7ic7h Рік тому
👍👍👍👍
@svbHiTek
@svbHiTek 3 місяці тому
Кстати SysTick можно настроить одной строчкой, вызвав функцию SysTick_Config(передав необходимое значение), она живет в файле от конкретного ядра, в вашем случае core_cm1.h
@aleksandrdrobyshev7623
@aleksandrdrobyshev7623 Рік тому
1) 19:42, вместо HSION у тебя HSEON. 2) 27:38, регистр SWS, это регистр-индикатор, его не устанавливать нужно, его считывать можно/нужно. В конечном итоге ничего не заработло....
@user-hc1uc6zq7y
@user-hc1uc6zq7y 15 днів тому
Доброго времени суток! Подскажите пожалуйста, вот Вы уже как с опытом, как считаете писать код на языке С++ возможно или есть какие то трудности в написании на нём ?
@user-hw8cl8we7j
@user-hw8cl8we7j 3 місяці тому
Уважаемый лектор, Output push-pull - не тяни талкай, а двухтактный режим выхода GPIO
@stepanovvictor9307
@stepanovvictor9307 Рік тому
Регистр BSRR по идее доступен только для записи, макрос setbit - это чтение/модификация/запись. То есть, для того, чтобы записать в регистр, мы его должны с начала считать. Если сейчас все работает, то в будущем, по этому адресу могут свободно жить какие-то данные, например статусы, доступные только для чтения, и результаты работы будут крайне интересны...
@Solderingironspb
@Solderingironspb Рік тому
Чего?) #define SET_BIT(REG, BIT) ((REG) | = (BIT)) Мы просто добавляем в регистр 1. Все.
@stepanovvictor9307
@stepanovvictor9307 Рік тому
Олег, выражение reg|=bit буквально обозначает reg = reg | bit, то есть в начале процессор читает регистр...
@Solderingironspb
@Solderingironspb Рік тому
@@stepanovvictor9307 ну тогда WRITE_REG использовать?
@stepanovvictor9307
@stepanovvictor9307 Рік тому
В данном случае да. Ошибка вообще типовая. Подобное некогда давал студентам в практике поиска ошибок для at94, в софтовой переферии можно накрутить что угодно ;-)
@OpenFrimeTVcom
@OpenFrimeTVcom Рік тому
@@stepanovvictor9307 хм, а как же тогда если там уже есть какие то данные, и нам нужно изменить только один бит, а записью = мы перепишем все...
@OpenFrimeTVcom
@OpenFrimeTVcom Рік тому
копаю тут потихоньку и у меня возник вопрос. вот допустим мы пишем GPIOC->BSRR = GPIO_BSRR_13; получается мы инициализируем структуру, но она ведь нигде не объявлена, как так? Переходил по файлам, пока не дошёл до #define GPIOC ((GPIO_TypeDef *)GPIOC_BASE) это какие то корни, но не пойму что значит эта строчка((
@ciklomat
@ciklomat Рік тому
Супер! Но если заранее подготовить код и пройтись по нему с объяснениями, то видео не будет так затянуто, а смотреть будет интересней и количество полученной инфы будет то же.
@Solderingironspb
@Solderingironspb Рік тому
Заранее подготовить код тоже не всегда хорошо, т.к. бывает скакать приходится по рефмануалу, а просто копировать и вставлять функции - это далеко не всем понятно. Многие блогеры этим грешат. Расскажут все по порядку и все вроде хорошо, а потом просто влепят кусок кода, где порядок выполнения команд нарушен, а почему так - блогер уже не говорит. В итоге человек, смотрящий это все - теряется. Кстати, у меня заранее подготовлен код, можете даже глянуть заметки по cmsis. Ссылка под видео. Я там единый файл с комментами бомблю потихонечку. Комментов миллион)
@ciklomat
@ciklomat Рік тому
@@Solderingironspb Есть такой блогер Александр Писанец микроконтроллеры AVR ,так я по его урокам учился.Считаю именно такой формат преподавания очень эффективным.
@thqthq9999
@thqthq9999 13 днів тому
Там один бит наверное должен называтся HSION ато вы HSEON включили два раза
@user-gx7yd6jd9g
@user-gx7yd6jd9g 4 місяці тому
В плане обучения запрограммировал RCC через регистры, а потом думаю и нафига я это делал, включил в МХ вместо HAL, LL и все дела. Но главное даже не в этом, если нужно добавить еще периферию, уже в процессе кодинга, то только руками, MX все снесет, если где то лоханешься и чего нибудь не туда перенесешь. Приведите примеры, где программирование на CMSIS крайне необходимо.
@Solderingironspb
@Solderingironspb 4 місяці тому
Подняв однажды всю периферию на CMSIS - пропадет проблема с кодингом других микроконтроллеров, т.к. основы уже будут. Я так спокойно теперь программирую RISC-V на RVMSIS. А там нет CubeMX. Пример, где программирование на CMSIS крайне необходимо - вывод информации на дисплей по тому же spi интерфейсу.
@user-gx7yd6jd9g
@user-gx7yd6jd9g 4 місяці тому
Ну в принципе я потому и начал это смотреть, поскольку сейчас как раз экран по spi надо подключить, но начал на G474, смотрел как это сделано на 103, а потом переносил на 474. Беда в том, что общего там меньше чем отличий, вот и возник вопрос: а зачем так углубляться? Я это сделал и через день уже ничего не помню, а если возьму H743, который на полке пока лежит, то там наверняка будет море новых сюжетов. Так что в раздумиях, а надо ли это и если надо, то где.
@do-vitas7079
@do-vitas7079 Рік тому
Инфа крайне полезна. Но как-то все сумбурно, человек который писал только на hal не совсем догоняет наверно че там куда сдвигать, че за чем и в какой последовательности надо делать, как-то наверно надо пустой проект создать для начала. Может лучше от hal совсем отойти, а то у вас получилось что что-то работает там что-то тут, например вы не включили порты а13,14 на отладку а значит их инит прошел где-то при помощи hal. Не сочтите за упреки просто мысли, ценность вашей работы очень велика, сам смотрел ваши видео когда бился с lcd. Еще бы добавил что в keil можно избежать процедуры инита там это само генерируется, но systick все равно писать надо. Еще если кто думает что возможно hal-а ему хватит то немного разочарую их, нет не хватит. Пример недавно на 373 мк пытался запустить adc ижекционные каналы(для своего ЛБП) на hal или LL и вы знаете бился очень долго и все равно не вышло, там в процедуре инета какая-то ошибка но найти ее в хале... во общем несколько строчек инета регистров все решило! Спасибо за труды в наше время весьма полезно!
@Solderingironspb
@Solderingironspb Рік тому
Пустой проект я думал делать, но потом. Сделал в таком порядке, потому что, как иначе себя проверить, представьте, час программируем и потом у нас ничего не работает, потому, что в коде где-то ошибка(какой-то бит не туда поставили). А тут мы сначала моргнули светодиодом, точно знаем, что этот кусок правильный, настроили порт, проверили, и так постепенно удалили все HAL функции, оставив CMSIS. На VisualGDB режим дебага внутрях зашит, как и в keil, настраивать не нужно. Человек, после HAL вполне может не знать про битовые операции, НО, если он топает по моим урокам и просмотрел все видео, то у него вообще не должно возникать вопросов, т.к. я стараюсь все вопросы в видео освещать. А последовательность я делаю специально по битам, с 0 и на возрастание. Чтоб опять же не было вопросов, как в видео у тех, кто расскажет, а потом просто накопирует функции. Посмотрим, как будет) потихонечку разберемся)
@user-qc7ib5fj9n
@user-qc7ib5fj9n Рік тому
все хорошо ,только ля работы на регистрах было бы лучше на Keil или IAR писать - там все от первой и до последней буквы можно на низком уровне настраивать.
@Solderingironspb
@Solderingironspb Рік тому
Так тут тоже. Разницы нет совершенно никакой)
@user-qc7ib5fj9n
@user-qc7ib5fj9n Рік тому
@@Solderingironspb настройка в Кубе тактирования тоже съедает память) ну это так -в общем отличная работа!
@user-ty2vs3ek3p
@user-ty2vs3ek3p Рік тому
Что нужно нажать, чтобы перейти в библиотек, где хранится указанная функция? 04:33 например
@Solderingironspb
@Solderingironspb Рік тому
F12
@Galdershten
@Galdershten Рік тому
Подскажите, как в CubeIde вкл окно с автоподстановкой когда печатаешь?
@Solderingironspb
@Solderingironspb Рік тому
Добрый день!) если Вы про автоподстановку в дефайны, когда пишешь SET_BIT(…. То тут я сам не понимаю, почему куб не видит автоподстановку в них. И где это включить тоже не знаю…
@Galdershten
@Galdershten Рік тому
@@Solderingironspb У меня он ее вообще не делает) Например у вас на 4:54 появилось окно с разными GPIO_BSRR_BR.. У меня он даже его не выводит
@Solderingironspb
@Solderingironspb Рік тому
Ну вот я про это и говорю, что в дефайн не работает автоподстановка в кубе. Пока так и не понял, где это включать.
@harl0k195
@harl0k195 3 місяці тому
А почему вы статусные регистры задаете , разве они не устанавливаются аппаратно?
@Solderingironspb
@Solderingironspb 3 місяці тому
Укажите минуту видео, пожалуйста, чтоб мне соориентировать по Вашему вопросу.
@harl0k195
@harl0k195 3 місяці тому
⁠@@SolderingironspbНу например 26:14 там регистр sws вы его задали , хотя там написано что он указывает что sw установился, или например на уроке про usart вы вместо того чтобы проверить txe вы проверяете txeie
@Minas__Morgul
@Minas__Morgul Рік тому
Конечно спасибо, но для чего это все нужно? Всегда же можно пойти во внутрь hal и посмотреть как оно там все через регистры работает Насчет уроков.... narod stream и sappise и NR.electronics достаточно много сделали на эту тему.
@Solderingironspb
@Solderingironspb Рік тому
Для чего это нужно: мой канал о самообучении. Я сам учусь и с другими делюсь. Вообще не ориентируюсь на то, кто и что пишет). Если бы HAL внутри был такой очевидный и простой, то конечно, я бы не читал рефмануал, т.к. итак все понятно было бы, но это не так.
@OpenFrimeTVcom
@OpenFrimeTVcom Рік тому
что самое печальное, так это то что такие ролики набирают крайне мало просмотров. Давайте запилим совместный ролик ну или вы каким то образом мне поможете или подскажите с проектом. А я в своем ролике сделаю рекламную вставку...
@Solderingironspb
@Solderingironspb Рік тому
Привет!) Я, как в таковой рекламе не нуждаюсь, т.к. себя за блогера-то не считаю). Все видео на канале - это побочка от моих занятий (Расскажи будущему себе, что ты тут делал, чтоб не забыть). Всегда считал, что кому надо - тот найдет и посмотрит). Совместные проекты можно делать, главное, чтоб интересные были)
@OpenFrimeTVcom
@OpenFrimeTVcom Рік тому
@@Solderingironspb я понял. тогда если что нибудь придумаю, напишу)
@Solderingironspb
@Solderingironspb Рік тому
Договорились 🤝
@maskon78
@maskon78 Рік тому
Еще бы ll библиотеки....
@NIKOLAY_PSHONIA
@NIKOLAY_PSHONIA Рік тому
Сначало ушли с stdperif на HAl, а теперь на сmsis.
@hieverybody359
@hieverybody359 Рік тому
Оказывается что это не слова управляют микроконтроллером!))))))))))))))))) Во ты программист мощный . Ну хорошо хоть сейчас понял. Это все называется макросы и они делаются чтоб ты не писал цифры а писал обстракции а не цифры, а так ты должен прописывать адреса памяти и значение которое ты туда хошь занести все в hex ну или bin как пожелаешь))
@alekseibutyaev2318
@alekseibutyaev2318 8 місяців тому
А не кто не проюывал битовые поля юзаь ...
@user-gm8vm4om1r
@user-gm8vm4om1r Рік тому
hal это как C, cmsis как ассемблер, уровень регистров. Если слабый контроллер и использовать по максимуму но cmsis, hal для всего остального
@micromaster4405
@micromaster4405 Рік тому
А ассемблер в данном случае как машинный код получается?
@vicgreen1413
@vicgreen1413 Рік тому
@@micromaster4405 Забудьте о нем! Кроме супер-быстрых микросекунды - прерываний - он не нужен. А еще больше не нужны прерывания с такой частотой
@micromaster4405
@micromaster4405 Рік тому
@@vicgreen1413 ну 10-20 кГц прерывания очень даже нужны в определенных случаях, а с помощью дизассемблера удобно работу fpu как минимум проверять
@vicgreen1413
@vicgreen1413 Рік тому
@@vitgo Написание на ASM, на мой взгляд, это полное неуважение к решению поставленной задачи, презрительное отношение к качеству выполняемого решения, ничем неоправданное затягивание времени исполнения и полное игнорирование возможности повторного использования кода и комфортного сопровождения продукта в течении всего жизненного цикла
@vicgreen1413
@vicgreen1413 Рік тому
@@vitgo Ну а HAL, в имполнении STM - это превращение любого процессора в продвинутый вариант i8080
@yuribochkarev4477
@yuribochkarev4477 Рік тому
Головная боль этот CMSIS, не зря придумали HAL
@Solderingironspb
@Solderingironspb Рік тому
Если хорошо знать МК и долго сидеть на нем, то не такой уж головняк. За 2-4 часа напишете инит нужной периферии, потом распишете ее работу, а далее уже будете, как функции использовать. Для работы с теми же дисплеями на spi, CMSIS, как никогда кстати). Там HAL в скорости проигрывает далеко не в 2 раза.
@yuribochkarev4477
@yuribochkarev4477 Рік тому
@@Solderingironspb инициализацию переферии делать на HAL в конфигураторе cube, а реализацию методов уже на cmsis. Иначе только жить в обнимку с этим референс мануалом и ловить бесконечные ошибки-проблемы при инициализации
@Solderingironspb
@Solderingironspb Рік тому
Можно и так
@vicgreen1413
@vicgreen1413 Рік тому
@@Solderingironspb А еще лучше перемолоть то, что выдает HAL или LL и тогда наступит счастье. Код становиться понятным и предсказуемым
@OpenFrimeTVcom
@OpenFrimeTVcom Рік тому
У вас не правильно прописан бит FLASH_ACR_LATENCY_2 . Если посмотреть в регистрах что это значит, то это 0х4, и это не 010 который вы использовали. Похоже нужно писать FLASH_ACR_LATENCY_1
@OpenFrimeTVcom
@OpenFrimeTVcom Рік тому
хотя я посмотрел у всех по разному в файле cmsis описан этот бит. можете просто проверить..
@Solderingironspb
@Solderingironspb Рік тому
LATENCY: Latency These bits represent the ratio of the SYSCLK (system clock) period to the Flash access time. 000 Zero wait state, if 0 < SYSCLK
@OpenFrimeTVcom
@OpenFrimeTVcom Рік тому
@@Solderingironspb а я как то случайно заметил. и сначала долго не мог понять как же так
😱СНЯЛ ФИКСИКОВ НА КАМЕРУ‼️
00:35
OMG DEN
Переглядів 1,4 млн
Кровосток - разговор с легендами / вДудь
2:12:57
"Поховали поруч": у Луцьку попрощались із ДВОМА Героями 🕯🥀 #герої #втрати
00:15
Телеканал Конкурент TV - новини Луцька та Волині
Переглядів 226 тис.
STM32. C чего начать? Быстрый старт после Arduino.
13:08
Олег Волков
Переглядів 75 тис.
NG SDH. Из чего сшит Интернет
16:30
Академия разработчиков
Переглядів 4,7 тис.
Review.  Библиотеки для всего STM32 (HAL, LL, CMSIS)
16:29
ИГРОВОЙ ПК от DEXP за 37 тысяч рублей из DNS
27:53
Ремонтяш
Переглядів 371 тис.
''Бесплатные умные'' домофоны для глупых людей. За чей счет банкет?
12:48
Вадим Шегалов.Оккультные игры элиты
Переглядів 31 тис.
Обзор Nothing ear (3) и ear (a) - ПРОРЫВ за $100
17:34
Broken Flex Repair #technology #mobilerepair
0:55
ideal institute aligarh
Переглядів 16 млн