Подключение SD к SPI с DMA STM32 без HAL: регистры, LL - код меньше, программа быстрее. STM32CubeIDE

preview_player
Показать описание
Подключение SD к SPI с DMA STM32 без библиотеки HAL: регистры и LL - код меньше, программа быстрее. В прошлом видео подключал микро SD карту к STM32F401CCU6 по интерфейсу SPI. Драйвер позволял, в том числе, использовать DMA для обмена данными SD и STM32. Причем, реализация совмещала регистры для некоторых настроек потоков DMA и возможности высокоуровневой библиотеки HAL для включения такого обмена. В этом видео реализую тоже самое, но откажусь от HAL настолько, насколько это позволяет сама среда разработки STM32CubeIDE. Проект в этот раз будет основан на низкоуровневой библиотеке LL, ориентированной на регистры. Правда, от LL лично я буду использовать только один массив со смещениями потоков DMA, относительно базовых адресов контроллеров DMA и функцию переключающую состояние пина с высокого уровня на низкий и наоборот, которую при желании также можно заменить на пару строчек кода на регистрах.
В папке проекта схема подключения модуля SD к плате разработки STM32F401CCU6.
Поддержать канал:
Комплектующие в видео:
плата разработки stm32f401ccu6
модуль микро SD карты

#stm32
#программирование
#sdcard
Рекомендации по теме
Комментарии
Автор

К каждому из перечисленных видео есть ссылка в описании на проект для скачивания.
Поддержать канал:
Комплектующие в видео:
плата разработки stm32f401ccu6
модуль микро SD карты

VadRov
Автор

3:10 Создаем новый проект
5:21 RCC Включаем внешний источник тактов для ST32
6:35 SYS Включает выводы для отладки
5:40 В Clock Configuration устанавливаем частоту ядра и проверку CSS
6:50 Включаем SPI в режиме Full-Duplex Master
7:50 Настраиваем SPI включаем DMA для RX и TX
11:30 Настраиваем GPIO SPI переназначение выводов
14:10 Пере обзываем выводы для SPI
17:24 Подключаем и настраиваем FatFS
18:55 Меняем HAL на LL в Project Manager
20:40 Вставляем готовый драйвер SPI в папку проекта FATFS\Target\
22:21 Изменения в файлах FATFS для успешной работы с драйвером SPI
22:51 Изменения для diskio.c ( вставляются названия функции из драйвера SPI )
27:00 Настройки драйвера SPI
32:25 Куда мы будем попадать при прерывании DMA - В обработчик :)
38:16 Идем в функцию main()
39:15 Какие функции использовал HAL
40:15 Монтируем логический диск f_mount();
40:47 Что в библиотек fatfs.c
42:08 Открываем файл f_open();
43:05 Мигание светодиодом в качестве отладки (я при отладке мигал длинная пауза между 3 коротких и закидывал инфу в CDC )
45:45 Настройки проекта для оптимизации кода под наименьший размер и создание отдельных бинарников
47:00 Прошиваем
47:44 Смотрим что получилось

alexshu
Автор

Класс! Я но в названии NO_HAL режет глаз. Я недавно делал прооект из которого выкинули QT и поначалу назвали так же _noQT, в последствии меня это всё-таки выморозило и мы придумали с группой нормальное название для модулей 😆

canisminor
Автор

спасибо, но откровенно говоря при отказе от прерываний дма и ожидания флагов окончания в цикле -теряется смысл его использования

kokotmkokot
Автор

Резервные явки, если явка на ютуб будет провалена:

VadRov