Куча и стек малы. Это часто проявляется при работе с юсб. Я наткнулся при работе с виртуальным ком-портом несколько лет назад. Сейчас они размеры буферов вроде стали меньше и всё влезает. Размеры кучи и стека настраиваются в кубе на вкладке, где параметры проекта
Владимир, куча и стек задаётся пользователем в CubeMX в настройках проекта (смотри: Project Setting > Linker setting), СТМ здесь не при делах, ибо им не ведомо, сколько Вам потребуется для реального проекта. Спасибо и удачи!)
Бесценный опыт! Я, честно говоря, не понял, что произошло. Переопределили несколько коротких функций, после чего устройство заработало, как полноценная флешка. Магия!
@@VladimirMedintsev , завтра посмотрю еще раз, сегодня уже голова не соображает. Хочу подсказать: размер стека и кучи можно и нужно указывать в кубе во вкладке Project_Manager/ Project. Иначе, если захотите внести в кубе изменения какие-то и перегенерировать проект, стек и куча сбросятся до тех значений, которые указаны в самом кубе.
Спасибо вам капитан Очевидность :-) Видео о том, что значения по умолчанию не годятся и создатели не могли об этом не знать. Ну а второе, я показывал то, что порой ошибки найти весьма не просто.
@@VladimirMedintsev , странно, что вообще код скомпилировался. Я на прошлой неделе хотел на STM32F072RBT (дискавери) запустить FatFs, так мне CubeIDE любезно написал, что не хватает 2008 байт памяти RAM. А вчера я на F0 терял данные по SPI, потому что у них оказывается есть специальный регистр, который отвечает за то, через сколько принятых байт вызывать событие RXNE. Вроде и в даташите это написано, но что толку - не будешь ведь читать от корки до корки тысячу страниц. И то не поможет. Прочитать мало, нужно осознать и запомнить.
я помню как начинал знакомится с stm32. до этого не имея опыта с MCU и выбрал я себе задачу сделать Hid устройство. я месяц потратил делая по мануалам и так ничего у мня не получалось.... в итоге, сделал, но настолько устал от полученного опыта, что забил на stm32 на пару лет. Тогда еще не было куба. Пробывал на китайской отладочной плате с процессором что то вроде stm32f103...
Похожая ошибка возникает и при работе с sdio и fatfs. SD начинает возвращать ошибки через час-два работы. Долго искал ошибку. Сбрасывание карты и переинициализация кода не помогала. Ошибка была в том, что было мало стека. Я настроил fatfs на динамические переменные и увеличил размер кучи - как результат, все работает прекрасно. А стек оставил под другие задачи. Считаю что в любом проекте где используется middleware надо обязательно увеличивать стек хотя бы в раза два, а если не жалко, то и кучу немного.
Получается, что это, всё же, проблема не с библиотекой. ST, действительно, мало касаются вопросов о величине кучи и стека и в большинстве AN речь идет лишь о методах экономии памяти. Все отдано на откуп программисту и анализатору использования стека и кучи. Если CubeIDE сделали из TrueStudio, то в ней должна быть такая фича.
Это не к работе 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) выставленных кубом по умолчанию ?
@@VladimirMedintsev спросил, тк "наступал на эти же грабли" на F407 контроллере, с тех пор, если в задаче присутствует USB сразу в кубе увеличиваю стек и кучу, причем сильно больше, чем в вашем примере.
Ну судя по тому, что на других контроллерах я не видел таких странностей это связано с библиотеками именно на F4 серию. Буду знать и принимать во внимание.
Здравствуйте. А вы не планируете сделать ролик, про варианты обновления прошивки для конкретного пользователя ? Например используя DFU, или использования просто как флешки, куда можно закинуть файл с прошивкой или использовать своё ПО и свой загрузчик. Было бы очень интересно..
На этом канале есть видеоролики в которых описаны все необходимые компоненты (USB Mass storage, запись во внутреннюю flash память, передача управления другой программе, шифрование данных) которые позволяют вам создать свой собственный загрузчик. А еще даже есть про Backup Domain видео и там делается акцент на то, как передать параметры самому себе при перезагрузке. Т.е. просто обьедините перечисленные видео и соберите свой код. Более того под этими роликами я как правило делаю акцент что смотрите это для загрузчика. Так что вы видимо невнимательно смотрели.
Для этого всего-то надо соединить в одну программу три видео уже опубликованных на канале. Это передача управления, хранение данных во Flash памяти и вот это видео про Mass Storage. Еще по вкусу можно добавить шифрование об этом тоже видео на канале есть и получится ваш собственный загрузчик для всех ваших проектов. Бесплатно, без регистрации и СМС.
Владимир, а на приходилось ли делать USB_HOST ? Задача - записать данные с микроконтроллера на флешку. Сделал тестовую прошивку без FreeRTOS - все работает замечательно. Перенес под FreeRTOS - уходит в HardFault_Handler при вызове f_mount. Залез во внутрь f_mount - вешается в функции USBH_MSC_RdWrProcess при добавлении чего-то в очередь (void)osMessagePut(phost->os_event, phost->os_msg, 0U). Как трудно жить :-(
Вопрос - в ролике затронута тема- передача через USB пакетами по 512 байт. При настройке USB в кубе стоит 1000 байт. Вопрос: Можно ли передавать пакеты, например, по 2048 байт ? В кубе изменить 1000 на 2048 не дает...
Здравствуйте Владимир, возможно ли на одной spi flash памяти иметь одновременно usb device при подключении к компьютеру (компьютер видет устройство как флешку и может читать и писать файлы) и fatfs (те же файлы читаются с помощью fatfs)
Добрый день! Не получается записать файл (или группу фалов), длиной более 12КБ. Подскажите пожалуйста, где может быть проблема. Микросхема AT45DB041 (2048 х 264), в настройках проекта указал 1024 страниц, 512 длина блока. Память в режиме 264 байт/страницу, но записываю по 256 байт. Если файл до 12КБ (включительно), то записывается/читается нормально. Более 12 КБ начинаются проблемы: на "флешку" записывается, можно тут же прочитать файл. Но как только переподлючаешь флешку к компьютеру, винда просит отформатировать диск.
Обычно такого рода ошибки возникают когда вы неправильно адреса считаете. Когда номера блоков в номера страниц переносите. Более подробного ответа не будет, т.к. вам как автору проще свой код отлаживать.
@@VladimirMedintsev да, вы правы! Я адреса передавал как uint16_t. При работе в режиме 264 байта/страницу нужно было двигать адрес на 9 влево. ВИдимо в определенный момент срывало логику. Как только я использовал в аргументе функции адрес uint32_t, всё заработало! Спасибо за ваше видео!
Владимир добрый день. А почему такой большой объем начальной программы сгенерировал CUBe - аж 13 кбайт? Хотя на данном этапе ( без основного кода программы) программа включает в себя только код инициализации периферии. Интересно, а если "ручками" написать инициализацию каждого регистра периферии в духе классического программирования контроллера REGA= 0X34DE, RECB- 0X2345 и т.п. названия регистров простая условность в данном случае) , то объем, я думаю, будет значительно меньше?
Да, разумеется размер будет гораздо меньше. Этот обьем - структуры инициализации библиотеки HAL. Последнее видео на канале посмотрите, там это пояснено.
Владимир здравствуйте. Не давно начал изучать stm есть вопрос по взаимодействию внешней памяти w25q16 и stm32 могу я к вам обратиться что б вы посмотрели в чем затык . Проблема в том что при подключении stm через usb к ПК память определяется но от форматировать и читать писать данные не могу хотя функции прописал. Могу я вам написать на почту?
Написать можете, почта для этого и оставлена, однако вы ведь понимаете, что тратить время на поиск ошибок не имея возможности даже попробовать и отладить код ну это абсолютно не продуктивно.
Увы, проблема древняя. У народстрима больше года назад обсуждалось. Кстати, по прошествию некоторого времени... CubeIDE. Есть ли смысл, или по старинке куб и кейл?
Для каждого mcu есть документ hardware development guide в нем описано как. А вообще на канале есть видео о разработке схем и там я интерфейс usb показываю.
@@VladimirMedintsev да нет, так по сути уменьшается время разработки девайса. Просто есть опыт общения с разработчиками в разных компаниях (в живую в Казани и через тырнет), большинство пишет на цмсис с ассемблер кодом (какие то свои разработанные кусочки кода, часто встречающиеся), а если говорить про АВР , то вообще иногда речь шла о чистом ассемблере так скажем написанном в нотпаде++ (мало кто сказал что пишет там через авр/атмел студио). А так после ваших слов, на самом деле, появилась даже мотивация учить хал что-ли. Глядишь скоро перейдут все на хал или подобное, например LL, может работу ради интереса найду в этой сфере...
Нет разницы на чем вы пишете и какие инструменты используете. Важен только результат. А что вы при этом используете нет ни какой разницы. Не нужно спрашивать кто и что использует. Вы будете использовать то, что удобно именно вам. Потому, что платят не за понты, платят за работающий продукт.
Да,с этим никто не спорит, но вопрос в том, нужно ли это. Как правило есть одна, ну может две секции кода скорость выполнения которых важна. Их (эти критические ко времени секции) можно и нужно писать оптимально с использованием самого низкого из доступных уровня. А остальной код в этом не нуждается. Хотя еще раз, это личное мнение каждого и каждый выбирает как он создает продукт. Главное чтобы продукт работал.
@@digitalspider7415 Есть. stm32 - европейский производитель. Поставки легко. Архитектура ARM. Ядро Cortex. Очень активно развивается. Новая линейка раз в 6 месяцев. Всего и не перечислить.
@@VladimirMedintsev Очень смешно. На mouser, farnell и стоках пусто. В чип и дипе тоже. Или вам известен чудо-магазин, который не затронула глобальная нехватка чипов?
Ну если это единственные магазины, которые вы знаете, то согласен, смешно. Но другие как-то же находят. Или по вашему все производство стоит? Я в этом месяце достаточно свободно закупился в Элитане. Просто ответ четко соответствовал вопросу.
@@VladimirMedintsev Производство сейчас выполняет заказы для крупных концернов, а не поставщиков. Поэтому можно сказать что стоит. Распродажа остатков по двойным ценам.
Програмування MCU в корені відрізняється від програмування високорівневих процесорів: там за стеком спостерігає ОС: ЦП має спеціальні вектори на випадок переповнення.
Да, интересно оказалось. Чет они совсем не подумали о большом числе клиентов.
Ваши видео, как всегда, приятно смотреть.
Спасибо Вам :)
Куча и стек малы. Это часто проявляется при работе с юсб. Я наткнулся при работе с виртуальным ком-портом несколько лет назад. Сейчас они размеры буферов вроде стали меньше и всё влезает. Размеры кучи и стека настраиваются в кубе на вкладке, где параметры проекта
Всё просто. Спасибо!
Владимир, куча и стек задаётся пользователем в CubeMX в настройках проекта (смотри: Project Setting > Linker setting), СТМ здесь не при делах, ибо им не ведомо, сколько Вам потребуется для реального проекта. Спасибо и удачи!)
Бесценный опыт!
Я, честно говоря, не понял, что произошло. Переопределили несколько коротких функций, после чего устройство заработало, как полноценная флешка. Магия!
Смешно.
@@VladimirMedintsev , завтра посмотрю еще раз, сегодня уже голова не соображает.
Хочу подсказать: размер стека и кучи можно и нужно указывать в кубе во вкладке Project_Manager/ Project. Иначе, если захотите внести в кубе изменения какие-то и перегенерировать проект, стек и куча сбросятся до тех значений, которые указаны в самом кубе.
Спасибо вам капитан Очевидность :-)
Видео о том, что значения по умолчанию не годятся и создатели не могли об этом не знать.
Ну а второе, я показывал то, что порой ошибки найти весьма не просто.
@@VladimirMedintsev , странно, что вообще код скомпилировался. Я на прошлой неделе хотел на STM32F072RBT (дискавери) запустить FatFs, так мне CubeIDE любезно написал, что не хватает 2008 байт памяти RAM.
А вчера я на F0 терял данные по SPI, потому что у них оказывается есть специальный регистр, который отвечает за то, через сколько принятых байт вызывать событие RXNE. Вроде и в даташите это написано, но что толку - не будешь ведь читать от корки до корки тысячу страниц. И то не поможет. Прочитать мало, нужно осознать и запомнить.
я помню как начинал знакомится с stm32. до этого не имея опыта с MCU и выбрал я себе задачу сделать Hid устройство. я месяц потратил делая по мануалам и так ничего у мня не получалось.... в итоге, сделал, но настолько устал от полученного опыта, что забил на stm32 на пару лет. Тогда еще не было куба. Пробывал на китайской отладочной плате с процессором что то вроде stm32f103...
Огромное Спасибо ! 👍
Спасибо за материал.
Похожая ошибка возникает и при работе с sdio и fatfs. SD начинает возвращать ошибки через час-два работы. Долго искал ошибку. Сбрасывание карты и переинициализация кода не помогала. Ошибка была в том, что было мало стека. Я настроил fatfs на динамические переменные и увеличил размер кучи - как результат, все работает прекрасно. А стек оставил под другие задачи. Считаю что в любом проекте где используется middleware надо обязательно увеличивать стек хотя бы в раза два, а если не жалко, то и кучу немного.
Получается, что это, всё же, проблема не с библиотекой. ST, действительно, мало касаются вопросов о величине кучи и стека и в большинстве AN речь идет лишь о методах экономии памяти. Все отдано на откуп программисту и анализатору использования стека и кучи. Если CubeIDE сделали из TrueStudio, то в ней должна быть такая фича.
Эта ошибка гуляет еще с 16 года в кубе. Тоже в свое время сломал всю голову, когда делал usb cdc
Подобные проблемы (недостаток выделенной памяти) легче решать если иметь отладку для stm discovery или eval с вашим процессором, и примеры кода.
Это не к работе 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 МБ, и почему ОС вашу память оценила размером меньше, чем он есть на самом деле? Спасибо.
Извините а ссылку на свою библиотеку AT45DB не дадите? И не выложите ли скетч этого видео.
скетча не будет.
Библиотека стандартная. В сети присутствует.
Ошибка связана со стеклом и кучей. Эта проблема была всегда, даже с ком портом в старых версиях куба была. Размеры памяти настраивается в кубке в свойствах проекта. Также для ком порта можно было уменьшать буферов обмена.
никогда такого не было и вот опять!
:)
Когда Вы говорите, что неоднократно подключали mass storage на других чипах, значит ли это, что все работало со значениями стека (0x400) и кучи (0x200) выставленных кубом по умолчанию ?
Как ни странно да. Раньше я это делал на процессорах F303 и L152. А что изменилось, версия библиотеки или что другое я не разбирался.
@@VladimirMedintsev спросил, тк "наступал на эти же грабли" на F407 контроллере, с тех пор, если в задаче присутствует USB сразу в кубе увеличиваю стек и кучу, причем сильно больше, чем в вашем примере.
Ну судя по тому, что на других контроллерах я не видел таких странностей это связано с библиотеками именно на F4 серию. Буду знать и принимать во внимание.
Здравствуйте.
А вы не планируете сделать ролик, про варианты обновления прошивки для конкретного пользователя ?
Например используя DFU, или использования просто как флешки, куда можно закинуть файл с прошивкой или использовать своё ПО и свой загрузчик.
Было бы очень интересно..
На этом канале есть видеоролики в которых описаны все необходимые компоненты (USB Mass storage, запись во внутреннюю flash память, передача управления другой программе, шифрование данных) которые позволяют вам создать свой собственный загрузчик. А еще даже есть про Backup Domain видео и там делается акцент на то, как передать параметры самому себе при перезагрузке. Т.е. просто обьедините перечисленные видео и соберите свой код. Более того под этими роликами я как правило делаю акцент что смотрите это для загрузчика. Так что вы видимо невнимательно смотрели.
@@VladimirMedintsev Наверное я просто не все видео ещё пересмотрел, т.к они не отсортированы...
Буду изучать, спасибо за уроки.
Железячка очень напоминает одну компанию из Ульяновска.
Нет, это не компания из Ульяновска.
Нет ли у вас в планах видео о композитных устройствах? Было бы интересно, т.к. мало толковой инфы по этому.
Нет таких планов нету.
@@VladimirMedintsev печально
Добрый день Владимир. Есть ли возможность получить библиотеку AT45DB? Спасибо.
В кубе во вкладке куда будет генерироваться проект и под какую среду есть два параметра для определения кучи и стека...
И?
@@VladimirMedintsev И да забыл написать спасибо вам Владимир за обучающее видео и за то, что обозначили проблему нехватки стека и ее решение.
Сделайте видео как залить на массторадж прошивку для контроллера и чтоб он обновился :)
Для этого всего-то надо соединить в одну программу три видео уже опубликованных на канале. Это передача управления, хранение данных во Flash памяти и вот это видео про Mass Storage. Еще по вкусу можно добавить шифрование об этом тоже видео на канале есть и получится ваш собственный загрузчик для всех ваших проектов.
Бесплатно, без регистрации и СМС.
@@VladimirMedintsev исходников я так понимаю нет?
Владимир, а на приходилось ли делать USB_HOST ? Задача - записать данные с микроконтроллера на флешку. Сделал тестовую прошивку без FreeRTOS - все работает замечательно. Перенес под FreeRTOS - уходит в HardFault_Handler при вызове f_mount. Залез во внутрь f_mount - вешается в функции USBH_MSC_RdWrProcess при добавлении чего-то в очередь (void)osMessagePut(phost->os_event, phost->os_msg, 0U). Как трудно жить :-(
Нет, такого не делал.
Вопрос - в ролике затронута тема- передача через USB пакетами по 512 байт. При настройке USB в кубе стоит 1000 байт. Вопрос: Можно ли передавать пакеты, например, по 2048 байт ? В кубе изменить 1000 на 2048 не дает...
Не знаю. Там ведь не совсем куб изменить не дает, там потом все в стек usb упирается. Там такие пакеты не предусмотрены.
@@VladimirMedintsev Стек аппаратный?
Нет, программный.
Здравствуйте Владимир, возможно ли на одной spi flash памяти иметь одновременно usb device при подключении к компьютеру (компьютер видет устройство как флешку и может читать и писать файлы) и fatfs (те же файлы читаются с помощью fatfs)
Читаются и пишутся микроконтроллером
Да, конечно, это возможно.
Добрый день! Не получается записать файл (или группу фалов), длиной более 12КБ. Подскажите пожалуйста, где может быть проблема. Микросхема AT45DB041 (2048 х 264), в настройках проекта указал 1024 страниц, 512 длина блока. Память в режиме 264 байт/страницу, но записываю по 256 байт.
Если файл до 12КБ (включительно), то записывается/читается нормально.
Более 12 КБ начинаются проблемы: на "флешку" записывается, можно тут же прочитать файл. Но как только переподлючаешь флешку к компьютеру, винда просит отформатировать диск.
Обычно такого рода ошибки возникают когда вы неправильно адреса считаете. Когда номера блоков в номера страниц переносите. Более подробного ответа не будет, т.к. вам как автору проще свой код отлаживать.
@@VladimirMedintsev да, вы правы! Я адреса передавал как uint16_t. При работе в режиме 264 байта/страницу нужно было двигать адрес на 9 влево. ВИдимо в определенный момент срывало логику. Как только я использовал в аргументе функции адрес uint32_t, всё заработало! Спасибо за ваше видео!
Оказывается не боги горшки обжигают :)
А как подключить внешнюю память к стм32?
Боюсь что я не смогу вам ответить прям вот в комментарии. Но на данном канале есть видео в котором показано как подобное делать.
Простите за глупый вопрос) но зачем на МК несколько SPI? Только ради возможности работы с разной скоростью?
С разной скоростью может и один. Чтобы работать одновременно, чтобы работать с разной периферией, чтобы работать с разными настройками
Владимир, приветствую. В какую сторону копать при разработке эмулятора CD-ROM привода на STM32?
В сторону понимания интерфейса IDE.
Владимир добрый день. А почему такой большой объем начальной программы сгенерировал CUBe - аж 13 кбайт? Хотя на данном этапе ( без основного кода программы) программа включает в себя только код инициализации периферии. Интересно, а если "ручками" написать инициализацию каждого регистра периферии в духе классического программирования контроллера REGA= 0X34DE, RECB- 0X2345 и т.п. названия регистров простая условность в данном случае) , то объем, я думаю, будет значительно меньше?
Да, разумеется размер будет гораздо меньше. Этот обьем - структуры инициализации библиотеки HAL. Последнее видео на канале посмотрите, там это пояснено.
Владимир здравствуйте. Не давно начал изучать stm есть вопрос по взаимодействию внешней памяти w25q16 и stm32 могу я к вам обратиться что б вы посмотрели в чем затык . Проблема в том что при подключении stm через usb к ПК память определяется но от форматировать и читать писать данные не могу хотя функции прописал. Могу я вам написать на почту?
Написать можете, почта для этого и оставлена, однако вы ведь понимаете, что тратить время на поиск ошибок не имея возможности даже попробовать и отладить код ну это абсолютно не продуктивно.
Увы, проблема древняя. У народстрима больше года назад обсуждалось. Кстати, по прошествию некоторого времени... CubeIDE. Есть ли смысл, или по старинке куб и кейл?
Я сделаю скоро видео и расскажу о впечатлениях. Есть там одна деталь делающая keil.
@@VladimirMedintsev ждем
Здравствуйте. Где посмотреть схему включения USB?
Для каждого mcu есть документ hardware development guide в нем описано как. А вообще на канале есть видео о разработке схем и там я интерфейс usb показываю.
Частота?)
2кб кучи и кило стека? Нунахер!
На работе под стмки тоже на ХАЛ пишите, или на чем-то другом ? Просто смотря ваши ролики возник такой вопрос
Да, 99% пишем под HAL. А почему нет?
@@VladimirMedintsev да нет, так по сути уменьшается время разработки девайса. Просто есть опыт общения с разработчиками в разных компаниях (в живую в Казани и через тырнет), большинство пишет на цмсис с ассемблер кодом (какие то свои разработанные кусочки кода, часто встречающиеся), а если говорить про АВР , то вообще иногда речь шла о чистом ассемблере так скажем написанном в нотпаде++ (мало кто сказал что пишет там через авр/атмел студио).
А так после ваших слов, на самом деле, появилась даже мотивация учить хал что-ли. Глядишь скоро перейдут все на хал или подобное, например LL, может работу ради интереса найду в этой сфере...
Нет разницы на чем вы пишете и какие инструменты используете. Важен только результат.
А что вы при этом используете нет ни какой разницы.
Не нужно спрашивать кто и что использует. Вы будете использовать то, что удобно именно вам.
Потому, что платят не за понты, платят за работающий продукт.
@@VladimirMedintsev Разница в быстродействии и в размере кода
Да,с этим никто не спорит, но вопрос в том, нужно ли это.
Как правило есть одна, ну может две секции кода скорость выполнения которых важна. Их (эти критические ко времени секции) можно и нужно писать оптимально с использованием самого низкого из доступных уровня. А остальной код в этом не нуждается.
Хотя еще раз, это личное мнение каждого и каждый выбирает как он создает продукт.
Главное чтобы продукт работал.
Есть ли какая то приличная среда разработки как AVRStudio ?
STM32CubeIDE, Keil Microvision, JAR
@@VladimirMedintsev Keil Microvision хотят денег ...
@@VladimirMedintsev Есть вообще какой-то смысл переходить с AVR процессоров на STM или может PIC ?
@@digitalspider7415 Есть. stm32 - европейский производитель. Поставки легко. Архитектура ARM. Ядро Cortex. Очень активно развивается. Новая линейка раз в 6 месяцев. Всего и не перечислить.
Как с Вами связаться? С целью перспективного сотрудничества в области микроконтроллеров и программирования.
vmedintsev (собака) yandex.ru
Ну и в описании канала указан адрес электронной почты.
Реально голову сломаешь)
Chat GPT нашел бы эту ошибку за 1 минуту и несколько других заодно тоже
Очевидно, что создатели куба переложили ответственность за размер кучи и стэка на Вас. На вкладке прожект менеджер в разделе эдванцед сеттингс.
Кэп вы ли это?
Где купить stm32?
В магазине.
@@VladimirMedintsev Очень смешно. На mouser, farnell и стоках пусто. В чип и дипе тоже. Или вам известен чудо-магазин, который не затронула глобальная нехватка чипов?
Ну если это единственные магазины, которые вы знаете, то согласен, смешно. Но другие как-то же находят. Или по вашему все производство стоит? Я в этом месяце достаточно свободно закупился в Элитане. Просто ответ четко соответствовал вопросу.
@@VladimirMedintsev Производство сейчас выполняет заказы для крупных концернов, а не поставщиков. Поэтому можно сказать что стоит. Распродажа остатков по двойным ценам.
Ну видимо вам виднее.
Програмування MCU в корені відрізняється від програмування високорівневих процесорів: там за стеком спостерігає ОС: ЦП має спеціальні вектори на випадок переповнення.
Смотрю на этот STMCube и что-то он мне очень напоминает ненавистный мне CodeVisionavr такая же ахинея как VisualBASIC ..