Это видео недоступно.
Сожалеем об этом.
Интерфейс USB. Создаем Mass Storage на STM32F4 и странные косяки от CubeMX
- Добавить в
- Мой плейлист
- Посмотреть позже
- Поделиться
Поделиться
HTML-код
Размер видео:
- Опубликовано: 17 авг 2024
Комментарии • 127
Следующие
Автовоспроизведение
Интерфейс USB. Виртуальный COM порт и схемотехника.Vladimir Medintsev
Просмотров 20 тыс.
CMSIS, SPL, LL, HAL обзор особенностей наиболее популярных библиотек для микроконтроллеров STM32.Vladimir Medintsev
Просмотров 47 тыс.
Программирование МК STM32. УРОК 33. HAL. USB. Virtual Com Portnarod stream
Просмотров 33 тыс.
My DOG got MARRIED! *EMOTIONAL*The Ninja Fam!
Просмотров 1,2 млн
Duke Dennis meets Gio for the first time..DukeDennis LIVE
Просмотров 658 тыс.
The Really Good Podcast | Peso Pluma: "Tio Peso"Bobbi Althoff
Просмотров 574 тыс.
Men's 4x100m Final | Paris ChampionsOlympics
Просмотров 3,4 млн
STM32 Передача управления между программами. Пишем загрузчик.Vladimir Medintsev
Просмотров 15 тыс.
STM32 + Дисплей ST7735 или почему HAL это хорошая библиотекаVladimir Medintsev
Просмотров 44 тыс.
DIY. Программируем STM32 без программатора через UART и DFU (USB)NR.electronics
Просмотров 18 тыс.
STM32F4 Discovery board - Keil 5 IDE with CubeMX: Tutorial 34 - USB MSC Flash DriveMutex Embedded
Просмотров 18 тыс.
Защита прошивки STM32. Часть 1. Защита от считывания (RDP) и обнаружение отключения (BOR).Vladimir Medintsev
Просмотров 23 тыс.
Программирование МК STM32. УРОК 44. SDIO. FATFSnarod stream
Просмотров 14 тыс.
Fake 32TB SSD for $22Ян Шелест
Просмотров 1,4 млн
STM32 - How to connect USB Flash Drive?VHEMaster Electronics
Просмотров 6 тыс.
SD CARD using SPI in STM32 || Cube-IDE || File handling || uartControllersTech
Просмотров 88 тыс.
女孩妒忌小丑女? #小丑#shorts好人小丑
Просмотров 24 млн
Son Was Scolded By His Mother For Throwing Shoes! #funny #babietoys #funnybaby #baby #cuteAmazing Children Toys
Просмотров 1,9 млн
7 Days Stranded In A CaveMrBeast
Просмотров 45 млн
Мелл показал свои накопления наличныхMORE EMOCIY
Просмотров 115 тыс.
❌Разве такое возможно? #storyКэри Найс
Просмотров 41 тыс.
مجمع فريد لحصاد الفواكه للاستمتاع بعصير طازج 🧃إبداعات حرفية
Просмотров 976 тыс.
爸爸带娃也太不靠谱了,儿子没上车就跑了#Cute baby#Cute#呆萌小米宝#聪明宝宝#萌娃呆萌小米宝
Просмотров 3,6 млн
Бутылка Air Up обмани мозг вкусомКостя Павлов
Просмотров 1,6 млн
Да, интересно оказалось. Чет они совсем не подумали о большом числе клиентов.
Ваши видео, как всегда, приятно смотреть.
Спасибо Вам :)
Всё просто. Спасибо!
Огромное Спасибо ! 👍
Спасибо за материал.
Куча и стек малы. Это часто проявляется при работе с юсб. Я наткнулся при работе с виртуальным ком-портом несколько лет назад. Сейчас они размеры буферов вроде стали меньше и всё влезает. Размеры кучи и стека настраиваются в кубе на вкладке, где параметры проекта
я помню как начинал знакомится с stm32. до этого не имея опыта с MCU и выбрал я себе задачу сделать Hid устройство. я месяц потратил делая по мануалам и так ничего у мня не получалось.... в итоге, сделал, но настолько устал от полученного опыта, что забил на stm32 на пару лет. Тогда еще не было куба. Пробывал на китайской отладочной плате с процессором что то вроде stm32f103...
Эта ошибка гуляет еще с 16 года в кубе. Тоже в свое время сломал всю голову, когда делал usb cdc
Получается, что это, всё же, проблема не с библиотекой. ST, действительно, мало касаются вопросов о величине кучи и стека и в большинстве AN речь идет лишь о методах экономии памяти. Все отдано на откуп программисту и анализатору использования стека и кучи. Если CubeIDE сделали из TrueStudio, то в ней должна быть такая фича.
Владимир, куча и стек задаётся пользователем в CubeMX в настройках проекта (смотри: Project Setting > Linker setting), СТМ здесь не при делах, ибо им не ведомо, сколько Вам потребуется для реального проекта. Спасибо и удачи!)
Похожая ошибка возникает и при работе с sdio и fatfs. SD начинает возвращать ошибки через час-два работы. Долго искал ошибку. Сбрасывание карты и переинициализация кода не помогала. Ошибка была в том, что было мало стека. Я настроил fatfs на динамические переменные и увеличил размер кучи - как результат, все работает прекрасно. А стек оставил под другие задачи. Считаю что в любом проекте где используется middleware надо обязательно увеличивать стек хотя бы в раза два, а если не жалко, то и кучу немного.
Бесценный опыт!
Я, честно говоря, не понял, что произошло. Переопределили несколько коротких функций, после чего устройство заработало, как полноценная флешка. Магия!
Смешно.
@@VladimirMedintsev , завтра посмотрю еще раз, сегодня уже голова не соображает.
Хочу подсказать: размер стека и кучи можно и нужно указывать в кубе во вкладке Project_Manager/ Project. Иначе, если захотите внести в кубе изменения какие-то и перегенерировать проект, стек и куча сбросятся до тех значений, которые указаны в самом кубе.
Спасибо вам капитан Очевидность :-)
Видео о том, что значения по умолчанию не годятся и создатели не могли об этом не знать.
Ну а второе, я показывал то, что порой ошибки найти весьма не просто.
@@VladimirMedintsev , странно, что вообще код скомпилировался. Я на прошлой неделе хотел на STM32F072RBT (дискавери) запустить FatFs, так мне CubeIDE любезно написал, что не хватает 2008 байт памяти RAM.
А вчера я на F0 терял данные по SPI, потому что у них оказывается есть специальный регистр, который отвечает за то, через сколько принятых байт вызывать событие RXNE. Вроде и в даташите это написано, но что толку - не будешь ведь читать от корки до корки тысячу страниц. И то не поможет. Прочитать мало, нужно осознать и запомнить.
Подобные проблемы (недостаток выделенной памяти) легче решать если иметь отладку для stm discovery или eval с вашим процессором, и примеры кода.
никогда такого не было и вот опять!
:)
Железячка очень напоминает одну компанию из Ульяновска.
Нет, это не компания из Ульяновска.
Ошибка связана со стеклом и кучей. Эта проблема была всегда, даже с ком портом в старых версиях куба была. Размеры памяти настраивается в кубке в свойствах проекта. Также для ком порта можно было уменьшать буферов обмена.
Извините а ссылку на свою библиотеку AT45DB не дадите? И не выложите ли скетч этого видео.
скетча не будет.
Библиотека стандартная. В сети присутствует.
Это не к работе USB, это так, просто брюзжание.. :) на 4:35 неправильно выбран источник тактирования в System Clock Mux - используется HSI, а не HSE или PLL.
Так это шоу, как и весь современный youtube. Что-то не работает? Не хватает стека? Места то у нас много, увеличим в 5 раз для начала. В адресах что-то там на 2 умножаем, читаем за 2 команды, тратя время флехи. Забейте, всем же интересно, схавают и так.
Т.к. источник HSI - не стабилизированный - полагаю в этом моет крыться проблема с подключением устройства, хотя для PLL источник тактирования всетаки внешний кварц. не увидел от чего тактируется USB
Оказывается не боги горшки обжигают :)
20:25 Владимир, скажите, а почему вы в функции AT45DB_readPageToBuff1(blk_addr*2) умножаете адрес на два?
... Пока писал, кажется, сам понял. Эта функция принимает в качестве аргумента номер страницы, которую нужно считать. Размер страницы у микросхемы 256 байт (используется). В аргументе blk_addr приходит номер блока, который HOST хочет считать (т.е. 0, 1, 2, 3 ...), в аргументе blk_len передается размер блока, в нашем случае всегда будет приходить 512. По ссылке на массив *buf vs должны записать 512 байт. А в аргументе lun vs получаем номер логического диска. Ну у нас один диск, так что игнорируем.
Если не так, поправьте, пожалуйста.
Все абсолютно верно.
@@VladimirMedintsev , вот я не справился повторить этот проект. F072-Discovery, память W25Q32. Вручную память и читается и пишется, а когда функции чтения вставляю в STORAGE_Read_FS и STORAGE_Write_FS, происходит облом. При попытке отформатировать - "не удалось отформатировать". Где искать косяк уже и не знаю.
Как вариант в адресации секторов. Ну по крайней мере именно там я чаще всего делаю ошибки.
Поставьте точку остановки в конце функции read и write и смотрите что фактически вы отдаете и получаете уже под отладчиком.
@@VladimirMedintsev , я делал так: в main создаю два массива по 512 байт и передаю первый (указатель на массив, конечно) сначала в функцию write_sector. Потом второй передаю в функцию read_sector, он принимает считанные значения. После выполнения этого кода данные совпадают.
А когда windows обращается к этим функциям, то данные и не читаются и не пишутся. Если завтра найду причину, то расскажу. Все очевидные вероятные причины уже проверил.
@@VladimirMedintsev , подключил логический анализатор, чтобы посмотреть что там в реальности передается по spi.
Подключаем флешку:
----- вырезал ---- потом расскажу почему ----
Вопрос: неужели для FAT недостаточно памяти 4 МБ, и почему ОС вашу память оценила размером меньше, чем он есть на самом деле? Спасибо.
Когда Вы говорите, что неоднократно подключали mass storage на других чипах, значит ли это, что все работало со значениями стека (0x400) и кучи (0x200) выставленных кубом по умолчанию ?
Как ни странно да. Раньше я это делал на процессорах F303 и L152. А что изменилось, версия библиотеки или что другое я не разбирался.
@@VladimirMedintsev спросил, тк "наступал на эти же грабли" на F407 контроллере, с тех пор, если в задаче присутствует USB сразу в кубе увеличиваю стек и кучу, причем сильно больше, чем в вашем примере.
Ну судя по тому, что на других контроллерах я не видел таких странностей это связано с библиотеками именно на F4 серию. Буду знать и принимать во внимание.
Здравствуйте.
А вы не планируете сделать ролик, про варианты обновления прошивки для конкретного пользователя ?
Например используя DFU, или использования просто как флешки, куда можно закинуть файл с прошивкой или использовать своё ПО и свой загрузчик.
Было бы очень интересно..
На этом канале есть видеоролики в которых описаны все необходимые компоненты (USB Mass storage, запись во внутреннюю flash память, передача управления другой программе, шифрование данных) которые позволяют вам создать свой собственный загрузчик. А еще даже есть про Backup Domain видео и там делается акцент на то, как передать параметры самому себе при перезагрузке. Т.е. просто обьедините перечисленные видео и соберите свой код. Более того под этими роликами я как правило делаю акцент что смотрите это для загрузчика. Так что вы видимо невнимательно смотрели.
@@VladimirMedintsev Наверное я просто не все видео ещё пересмотрел, т.к они не отсортированы...
Буду изучать, спасибо за уроки.
Добрый день Владимир. Есть ли возможность получить библиотеку AT45DB? Спасибо.
Нет ли у вас в планах видео о композитных устройствах? Было бы интересно, т.к. мало толковой инфы по этому.
Нет таких планов нету.
@@VladimirMedintsev печально
Владимир добрый день. А почему такой большой объем начальной программы сгенерировал CUBe - аж 13 кбайт? Хотя на данном этапе ( без основного кода программы) программа включает в себя только код инициализации периферии. Интересно, а если "ручками" написать инициализацию каждого регистра периферии в духе классического программирования контроллера REGA= 0X34DE, RECB- 0X2345 и т.п. названия регистров простая условность в данном случае) , то объем, я думаю, будет значительно меньше?
Да, разумеется размер будет гораздо меньше. Этот обьем - структуры инициализации библиотеки HAL. Последнее видео на канале посмотрите, там это пояснено.
Владимир, а на приходилось ли делать USB_HOST ? Задача - записать данные с микроконтроллера на флешку. Сделал тестовую прошивку без FreeRTOS - все работает замечательно. Перенес под FreeRTOS - уходит в HardFault_Handler при вызове f_mount. Залез во внутрь f_mount - вешается в функции USBH_MSC_RdWrProcess при добавлении чего-то в очередь (void)osMessagePut(phost->os_event, phost->os_msg, 0U). Как трудно жить :-(
Нет, такого не делал.
Сделайте видео как залить на массторадж прошивку для контроллера и чтоб он обновился :)
Для этого всего-то надо соединить в одну программу три видео уже опубликованных на канале. Это передача управления, хранение данных во Flash памяти и вот это видео про Mass Storage. Еще по вкусу можно добавить шифрование об этом тоже видео на канале есть и получится ваш собственный загрузчик для всех ваших проектов.
Бесплатно, без регистрации и СМС.
@@VladimirMedintsev исходников я так понимаю нет?
Владимир здравствуйте. Не давно начал изучать stm есть вопрос по взаимодействию внешней памяти w25q16 и stm32 могу я к вам обратиться что б вы посмотрели в чем затык . Проблема в том что при подключении stm через usb к ПК память определяется но от форматировать и читать писать данные не могу хотя функции прописал. Могу я вам написать на почту?
Написать можете, почта для этого и оставлена, однако вы ведь понимаете, что тратить время на поиск ошибок не имея возможности даже попробовать и отладить код ну это абсолютно не продуктивно.
Владимир, приветствую. В какую сторону копать при разработке эмулятора CD-ROM привода на STM32?
В сторону понимания интерфейса IDE.
В кубе во вкладке куда будет генерироваться проект и под какую среду есть два параметра для определения кучи и стека...
И?
@@VladimirMedintsev И да забыл написать спасибо вам Владимир за обучающее видео и за то, что обозначили проблему нехватки стека и ее решение.
Простите за глупый вопрос) но зачем на МК несколько SPI? Только ради возможности работы с разной скоростью?
С разной скоростью может и один. Чтобы работать одновременно, чтобы работать с разной периферией, чтобы работать с разными настройками
Здравствуйте Владимир, возможно ли на одной spi flash памяти иметь одновременно usb device при подключении к компьютеру (компьютер видет устройство как флешку и может читать и писать файлы) и fatfs (те же файлы читаются с помощью fatfs)
Читаются и пишутся микроконтроллером
Да, конечно, это возможно.
Как с Вами связаться? С целью перспективного сотрудничества в области микроконтроллеров и программирования.
vmedintsev (собака) yandex.ru
Ну и в описании канала указан адрес электронной почты.
Реально голову сломаешь)
Добрый день! Не получается записать файл (или группу фалов), длиной более 12КБ. Подскажите пожалуйста, где может быть проблема. Микросхема AT45DB041 (2048 х 264), в настройках проекта указал 1024 страниц, 512 длина блока. Память в режиме 264 байт/страницу, но записываю по 256 байт.
Если файл до 12КБ (включительно), то записывается/читается нормально.
Более 12 КБ начинаются проблемы: на "флешку" записывается, можно тут же прочитать файл. Но как только переподлючаешь флешку к компьютеру, винда просит отформатировать диск.
Обычно такого рода ошибки возникают когда вы неправильно адреса считаете. Когда номера блоков в номера страниц переносите. Более подробного ответа не будет, т.к. вам как автору проще свой код отлаживать.
@@VladimirMedintsev да, вы правы! Я адреса передавал как uint16_t. При работе в режиме 264 байта/страницу нужно было двигать адрес на 9 влево. ВИдимо в определенный момент срывало логику. Как только я использовал в аргументе функции адрес uint32_t, всё заработало! Спасибо за ваше видео!
Вопрос - в ролике затронута тема- передача через USB пакетами по 512 байт. При настройке USB в кубе стоит 1000 байт. Вопрос: Можно ли передавать пакеты, например, по 2048 байт ? В кубе изменить 1000 на 2048 не дает...
Не знаю. Там ведь не совсем куб изменить не дает, там потом все в стек usb упирается. Там такие пакеты не предусмотрены.
@@VladimirMedintsev Стек аппаратный?
Нет, программный.
Увы, проблема древняя. У народстрима больше года назад обсуждалось. Кстати, по прошествию некоторого времени... CubeIDE. Есть ли смысл, или по старинке куб и кейл?
Я сделаю скоро видео и расскажу о впечатлениях. Есть там одна деталь делающая keil.
@@VladimirMedintsev ждем
Програмування MCU в корені відрізняється від програмування високорівневих процесорів: там за стеком спостерігає ОС: ЦП має спеціальні вектори на випадок переповнення.
Очевидно, что создатели куба переложили ответственность за размер кучи и стэка на Вас. На вкладке прожект менеджер в разделе эдванцед сеттингс.
Кэп вы ли это?
Здравствуйте. Где посмотреть схему включения USB?
Для каждого mcu есть документ hardware development guide в нем описано как. А вообще на канале есть видео о разработке схем и там я интерфейс usb показываю.
На работе под стмки тоже на ХАЛ пишите, или на чем-то другом ? Просто смотря ваши ролики возник такой вопрос
Да, 99% пишем под HAL. А почему нет?
@@VladimirMedintsev да нет, так по сути уменьшается время разработки девайса. Просто есть опыт общения с разработчиками в разных компаниях (в живую в Казани и через тырнет), большинство пишет на цмсис с ассемблер кодом (какие то свои разработанные кусочки кода, часто встречающиеся), а если говорить про АВР , то вообще иногда речь шла о чистом ассемблере так скажем написанном в нотпаде++ (мало кто сказал что пишет там через авр/атмел студио).
А так после ваших слов, на самом деле, появилась даже мотивация учить хал что-ли. Глядишь скоро перейдут все на хал или подобное, например LL, может работу ради интереса найду в этой сфере...
Нет разницы на чем вы пишете и какие инструменты используете. Важен только результат.
А что вы при этом используете нет ни какой разницы.
Не нужно спрашивать кто и что использует. Вы будете использовать то, что удобно именно вам.
Потому, что платят не за понты, платят за работающий продукт.
@@VladimirMedintsev Разница в быстродействии и в размере кода
Да,с этим никто не спорит, но вопрос в том, нужно ли это.
Как правило есть одна, ну может две секции кода скорость выполнения которых важна. Их (эти критические ко времени секции) можно и нужно писать оптимально с использованием самого низкого из доступных уровня. А остальной код в этом не нуждается.
Хотя еще раз, это личное мнение каждого и каждый выбирает как он создает продукт.
Главное чтобы продукт работал.
А как подключить внешнюю память к стм32?
Боюсь что я не смогу вам ответить прям вот в комментарии. Но на данном канале есть видео в котором показано как подобное делать.
Частота?)
2кб кучи и кило стека? Нунахер!
Есть ли какая то приличная среда разработки как AVRStudio ?
STM32CubeIDE, Keil Microvision, JAR
@@VladimirMedintsev Keil Microvision хотят денег ...
@@VladimirMedintsev Есть вообще какой-то смысл переходить с AVR процессоров на STM или может PIC ?
@@digitalspider7415 Есть. stm32 - европейский производитель. Поставки легко. Архитектура ARM. Ядро Cortex. Очень активно развивается. Новая линейка раз в 6 месяцев. Всего и не перечислить.
Где купить stm32?
В магазине.
@@VladimirMedintsev Очень смешно. На mouser, farnell и стоках пусто. В чип и дипе тоже. Или вам известен чудо-магазин, который не затронула глобальная нехватка чипов?
Ну если это единственные магазины, которые вы знаете, то согласен, смешно. Но другие как-то же находят. Или по вашему все производство стоит? Я в этом месяце достаточно свободно закупился в Элитане. Просто ответ четко соответствовал вопросу.
@@VladimirMedintsev Производство сейчас выполняет заказы для крупных концернов, а не поставщиков. Поэтому можно сказать что стоит. Распродажа остатков по двойным ценам.
Ну видимо вам виднее.
Смотрю на этот STMCube и что-то он мне очень напоминает ненавистный мне CodeVisionavr такая же ахинея как VisualBASIC ..