Это видео недоступно.
Сожалеем об этом.

Файловый менеджер на микроконтроллере: stm32 + sd-card spi + st7789 + кнопки

Поделиться
HTML-код
  • Опубликовано: 7 июн 2022
  • Файловый менеджер на микроконтроллере? Легко. В этом видео на основе ранее написанных модулей, библиотек и драйверов для подключения SD-карты, дисплея и кнопок напишем свой простой файловый менеджер, который позволит наглядно выбирать файлы в каталогах SD-карты для последующей работы с ними.
    Основные возможности файлового менеджера:
    - вывод менеджера в окне, параметры (координата верхнего левого угла, ширина и высота окна, шрифт, цвет) которого задает пользователь;
    - "умное" сокращение имен файлов и каталогов, если они не помещаются в окне;
    - нет ограничений на количество файлов и подкаталогов в каталоге;
    - запоминание позиции курсора в вышестоящем каталоге и восстановление этой позиции при возврате на него с вложенного подкаталога;
    - вывод иконок (значков) файлов и каталогов в зависимости от типа файла, определяемого расширением;
    - поддержка вложенных каталогов с уровнем вложенности, ограниченным только размером оперативной памяти микроконтроллера.
    Скачать проект можно по ссылке: github.com/vad...
    Поддержать канал:
    donate.qiwi.co...
    yoomoney.ru/to...
    Покупал на Алиэкспресс:
    программатор ST-Link alii.pub/6fdujg
    плата разработки stm32f401ccu6 alii.pub/6fdumy
    плата разработки stm32f411ceu6 alii.pub/6fduop
    аудио-ЦАП pcm5102a alii.pub/6fdurf
    макетная плата alii.pub/6fduuq
    провода для макетной платы alii.pub/6fduwo
    3.2" дисплей с тачскрином ILI9341 spi alii.pub/6fdvcf
    1.3" дисплей ST7789 spi alii.pub/6fdvks
    модуль микро SD карты alii.pub/6fdvoh
    stm32, stm32 file manager, sd-card stm32, spi stm32, st7789, stm32 st7789, stm32 buttons, кнопки stm32, stm32 файловый менеджер
    #stm32
    #программирование

Комментарии • 41

  • @VadRov
    @VadRov  2 года назад

    Проект доступен для скачивания по ссылке: github.com/vadrov/stm32-filemanager-sd-fatfs-display-buttons
    Подключение дисплея st7789 по spi c dma на CMSIS и LL рассмотрено в видео ruclips.net/video/8tIJ16riJqo/видео.html
    Подключение SD-карты по spi с dma на CMSIS и LL рассмотрено в видео ruclips.net/video/z99bLhlnukM/видео.html
    Подключение кнопок на таймере с прерыванием на CMSIS и LL с устранением дребезга, автоповтором и буферов ввода (прямо как на PC 😉) рассмотрено в видео ruclips.net/video/e-w5HS75neg/видео.html
    Файловый менеджер (структура и код) рассмотрен в видео ruclips.net/video/4c_PwnasQvs/видео.html
    Подключение аудио-цап (audio dac) по интерфейсу i2s на CMSIS и LL рассмотрено в видео ruclips.net/video/p0IhX-XiiiQ/видео.html
    К каждому из перечисленных видео есть ссылка в описании на проект для скачивания.
    Поддержать канал:
    donate.qiwi.com/payin/VadRov
    yoomoney.ru/to/4100117522443917
    Покупал на Алиэкспресс:
    программатор ST-Link alii.pub/6fdujg
    плата разработки stm32f401ccu6 alii.pub/6fdumy
    плата разработки stm32f411ceu6 alii.pub/6fduop
    аудио-ЦАП pcm5102a alii.pub/6fdurf
    макетная плата alii.pub/6fduuq
    провода для макетной платы alii.pub/6fduwo
    3.2" дисплей с тачскрином ILI9341 spi alii.pub/6fdvcf
    1.3" дисплей ST7789 spi alii.pub/6fdvks
    модуль микро SD карты alii.pub/6fdvoh

  • @ebjikkolu4757
    @ebjikkolu4757 2 года назад +1

    Поганый ютуб прятал Вас тщательно .Я рад что обнаружил Ваш канал

  • @dmitriynikiforov1890
    @dmitriynikiforov1890 Год назад +1

    Просто супер! Дисплей кнопки и SD-карта есть. Фактически это база для любого устройства автоматизации. Думаю, для полного счастья нужна еще RTOS, чтобы легче было прикручивать разные девайсы и организовывать их взаимодействие.

  • @igoriskarolaitis3392
    @igoriskarolaitis3392 Год назад +1

    Благодарю за нужный контент.

  • @ismailalhajji
    @ismailalhajji 6 месяцев назад

    Thank You VADROV

  • @ar_oak
    @ar_oak Год назад

    Спасибо! В моём приборе (на канале есть видео) тоже есть реализация файлового менеджера. Пока что простенькая. Ух, запарился я с ней :) Буду изучать теперь и вашу реализацию.

  • @kokotmkokot4926
    @kokotmkokot4926 Год назад

    Большое спасибо!

  • @xxxx9320
    @xxxx9320 Год назад

    Попробовал на F103 (правда SD без DMA).
    1. При использовании FatFS опции USE_LNF вылетает HardFault_Handler... (хз, может что-то недонастроил), без LNF стабильней работает.
    2. Почему-то с подключенным отладчиком (ST-LINK) не работает часть кнопок (пробовал менять выводы), без отладчика - норм.
    3. Иногда случались фейлы инициализации SD (либо она не успевала включиться (при первой подаче питания), либо случалось какое-то подвисание, хз), возможно нужно предусмотреть хард-резет на такой случай.
    4. Ну и самое пока непонятное: на одной из флешек (новая SDSQUNR-032G-ZN3MN) filemanager не видит части папок и файлов. Причем сперва вроде как видел, потом я подредактировал файлы (названия не менял) и все, пропали. На других устройствах все файлы/папки нормально работают и отображаются и редактируются. Файлы не скрытые, не системные (да и в коде выключил их скрытие).
    Потом создавал новый файлы - он их видит (старые пропавшие нет), потом что-то совсем сломалось, и теперь видит только два файла.
    Ни старые ни новые не видит совсем (только два файла в корне). На других устройствах все ок, т.е. проблема не во флешке.

    • @VadRov
      @VadRov  Год назад +1

      Попробуйте внести изменения в код (файл user_diskio_spi.c):
      1. Функция spi_rw :
      static BYTE spi_rw(BYTE wval)
      {
      *((volatile uint8_t *)&SPI_SD->DR) = wval;
      while(!(SPI_SD->SR & SPI_SR_RXNE)) ;
      while (SPI_SD->SR & SPI_SR_BSY) ;
      return SPI_SD->DR;
      }
      2. Функция spi_r_multi:
      static void spi_r_multi(BYTE *rval, uint16_t cnt)
      {
      uint8_t* pRxData = (uint8_t*)rval;
      uint16_t txCnt = cnt;
      while(txCnt > 0)
      {
      *((volatile uint8_t *)&SPI_SD->DR) = 0xFF;
      txCnt--;
      while(!(SPI_SD->SR & SPI_SR_RXNE));
      *pRxData = *((volatile uint8_t *)&SPI_SD->DR);
      pRxData++;
      }
      while (SPI_SD->SR & SPI_SR_BSY) ;
      }
      3. Добавьте в самый конец функции SPI_DMA_TransmitReceive строчку:
      while (SPI_SD->SR & SPI_SR_BSY) ; //ждем когда SPI освободится
      С DMA там все просто. Можете посмотреть код драйвера дисплея для F103 и сделать по аналогии.

    • @xxxx9320
      @xxxx9320 Год назад

      Обновил FatFS и Filemanager из последних исходников - заработало, файлы вернулись :)

  • @xxxx9320
    @xxxx9320 Год назад

    А есть какие-то рекомендации по продлению жизни microsd? Например, при постоянной записи нескольких байт (в один лог-файл) есть ли смысл в предварительной буферизации и т.п.?

    • @VadRov
      @VadRov  Год назад +3

      Действенная рекомендация: использовать карту значительно большего объема, чем требуется.
      И, естественно, необходимо сократить количество обращений к карте для записи данных, используя для этого по мере возможности соответствующий RAM-буфер, по мере заполнения которого записывать данные на карту.

  • @vsosacordeev
    @vsosacordeev 7 месяцев назад

    проблема однако у меня, флешка не переициалируется, только если физически разамкнуть контакты, и кнопку резет делать, то появлется видится мк , как так сделать, что бы на горячею можно было переподключать? и ещё вопрос, куда вожней чем первый, в высокоуровненневых языках я не спец (да и в других не особо ))))поробую описать что мне нужно, как это можно было бы разрешить . Вот функция
    fres = f_open(&fil, "Xman.bin", FA_READ);
    if(fres != FR_OK)
    {
    printf("File opening Error : (%i)
    ", fres);
    break;
    }
    //если файл есть то читаем
    f_gets(buf, sizeof(buf), &fil);
    sizeof(buf) - это сколько прочитать
    а вот как указать с кого одреса нужно начать считывать?
    Уменя двоичный файл, он весит 8 мешков, его надо на другую шлешку перекинуть, нужно сделать промежуточный буфер, на pic я там на асм всё по байту перекинул , бы и проблем нет. А тут какая то засада для меня.

    • @VadRov
      @VadRov  7 месяцев назад

      FRESULT f_lseek (
      FIL* FileObject, /* Указатель на структуру файлового объекта */
      DWORD Offset /* Смещение по файлу относительно начала в байтах */
      );

    • @vsosacordeev
      @vsosacordeev 7 месяцев назад

      Good ща попробую.@@VadRov

  • @kokotmkokot4926
    @kokotmkokot4926 Год назад

    Что-то подсказывает мне, что будет куда удобнее организовать управление Вашим менеджером энкодером с кнопкой на оси. Как предложение добавить в обработчик менеджера таймер для энкодера или пины GPIO для программной реализации обработчика энкодера.

    • @VadRov
      @VadRov  Год назад +1

      Можно реализовать и с touch. Все на усмотрение пользователя. Это просто простейший пример использования для демонстрации работы связки различной периферии МК и внешних устройств.

    • @kokotmkokot4926
      @kokotmkokot4926 Год назад

      @@VadRov Конечно можно, только тач на таких экранах, как в библиотеке - очень спорное решение с точки зрения удобства эксплуатации... Решающую роль для удобства играет размер экрана и вполне может быть, что монохромный графический дисплей, в том же бюджете, но большего размера будет предпочтительнее.
      Имею желание попробовать реализовать .. потому вопрос.
      Сможет ли Ваша графическая библиотека обеспечить работу монохромного графического LCD по SPI без глобальной переделки функций графической библиотеки? Все же она заточена под работу с цветом., но очень привлекает лаконичностью и стилем кода. 💪 Или разумнее прикрутить готовую стороннюю библиотеку монохромного lcd непосредственно к Вашему менеджеру. Какой путь выбрать?

    • @VadRov
      @VadRov  Год назад +1

      ​@@kokotmkokot4926, однозначно сказать не могу, как Вам поступить. Если использовать стороннюю библиотеку, то просто придется переписать/дописать и т.п. либо адаптировать имеющиеся в библиотеке аналоги функций: DrawIcon, LCD_WriteString, LCD_FillWindow, LCD_DrawRectangle, LCD_DrawFilledRectangle.
      Если использовать мою библиотеку, то, во-первых, придется написать драйвер под требуемый контроллер; во-вторых, модернизировать механизм работы с цветом. Это несложно, но первый путь короче. Естественно, в первом случае также придется немного вникнуть в код сторонней библиотеки. Лично я люблю "изобретать велосипеды". 😉

    • @kokotmkokot4926
      @kokotmkokot4926 Год назад

      @@VadRov спасибо !

    • @kokotmkokot4926
      @kokotmkokot4926 Год назад +1

      Забрал сегодня картридеры. Запустил Ваш проект файлового менеджера на 411. Шикарно все отрабатывает. Поставил бы 10 лайков за такой прекрасный проект!