|
-26 / 4 / 0
Регистрация: 26.09.2024
Сообщений: 128
|
||||||
Передача данных по i2c через DMA STM32F401CUE608.10.2025, 13:46. Показов 4768. Ответов 95
Метки нет (Все метки)
Добрый день. При попытки передать данные на устройство по i2c через DMA нифига не выходит, DMA не в какую не хочет работать.
Адрес устройства определяется как надо, условие Старт и отправка адреса тоже происходит нормально но DMA не стартует и нет прерывания от DMA. В отладке видно что бит DMA1_Stream6->CR |= DMA_SxCR_EN; устанавливается.
Нашёл ошибку DMA1_Stream6->CR |= DMA_CHANNEL_6; исправил на DMA1_Stream6->CR |= DMA_CHANNEL_1; как в таблице всё равно не хочет заводиться.
0
|
||||||
| 08.10.2025, 13:46 | |
|
Ответы с готовыми решениями:
95
ADC->DMA->SDIO (или NAND через FSMC) без остановки в обработчике прерываний DMA на STM32F407VG, реально или нет? USART2(RX+IDLE+DMA)+USART3(TX DMA) STM32F4Discovery - ADC DMA и FSMC DMA |
|
-26 / 4 / 0
Регистрация: 26.09.2024
Сообщений: 128
|
||
| 09.10.2025, 13:38 [ТС] | ||
|
0
|
||
|
349 / 147 / 10
Регистрация: 19.07.2024
Сообщений: 825
|
||
| 09.10.2025, 13:41 | ||
|
0
|
||
|
1516 / 532 / 77
Регистрация: 22.09.2023
Сообщений: 1,694
|
|
| 09.10.2025, 13:42 | |
|
0
|
|
|
349 / 147 / 10
Регистрация: 19.07.2024
Сообщений: 825
|
||
| 09.10.2025, 13:44 | ||
|
0
|
||
|
-26 / 4 / 0
Регистрация: 26.09.2024
Сообщений: 128
|
||||
| 09.10.2025, 14:39 [ТС] | ||||
|
Добавлено через 29 минут Всё разобрался, совсем забыл про сброс флагов DMA вот этих
Добавлено через 5 минут Теперь хоть знаю как DMA юзать всё никак руки не доходили разобраться.
0
|
||||
|
349 / 147 / 10
Регистрация: 19.07.2024
Сообщений: 825
|
||
| 09.10.2025, 15:18 | ||
|
Да - сейчас у вас наверное используется только один DMA-канал, и потому оно работает. Но завтра же захотите ещё один канал DMA и снова будете писать "Сбоит DMA". Хотя проблема будет опять в вашем коде.
1
|
||
|
-26 / 4 / 0
Регистрация: 26.09.2024
Сообщений: 128
|
|
| 09.10.2025, 15:26 [ТС] | |
|
jcxz, это да я потом исправлю.
0
|
|
|
-26 / 4 / 0
Регистрация: 26.09.2024
Сообщений: 128
|
||||||
| 10.10.2025, 08:43 [ТС] | ||||||
|
jcxz, в случаи фигни на линии i2c товарищ Dushevny, предложил идею двух регистров, как вы считаете на сколько такая идея работоспособна или можно ещё добавить какой нибудь костыль?
0
|
||||||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,086
|
||||
| 10.10.2025, 10:06 | ||||
|
Проблема в том, что я с Кубом не работал и не знаю как это там выглядит.
0
|
||||
|
Нарушитель
|
|||
| 10.10.2025, 13:09 | |||
|
Добавлено через 40 секунд
0
|
|||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,086
|
||
| 10.10.2025, 13:16 | ||
|
0
|
||
|
349 / 147 / 10
Регистрация: 19.07.2024
Сообщений: 825
|
|||
| 10.10.2025, 13:54 | |||
|
Добавлено через 19 минут Если что: Мой I2C-драйвер в проекте с STM32F429 построен на простом конечном автомате (в ISR). Он работает с 5-ю ведомыми, сидящими на единой шине I2C. С некоторыми - через DMA (там, где большие транзакции), с некоторыми - через программный I/O внутри ISR (если транзакции короткие). Ни Куб ни HAL - не использую. Вся работа - исключительно на регистрах. Работа автомата состояний драйвера I2C осуществляется внутри 4-х ISR: 2-х ISR от I2C-периферии + 2-х от DMA-контроллера. Костылей нет. Зачем они там? Без них всё прекрасно работает. Согласно RM на МК. Единственное что может быть подобно костылю в моём коде: При старте прошивки, на SCL/SDA подаю серию импульсов (ногодрыгом) для завершения всех незавершённых пересылок во всех I2C-слэйвах. Это на случай, если старт программы произошёл после перезапуска устройства во время пересылки по I2C (незавершённой). Но если это называть "костылём", то он не для I2C микроконтроллера, а для автоматов состояний I2C в ведомых. Для их сброса. И делаю такое не только на STM32F4xx, но и на других МК.
0
|
|||
|
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,717
|
||||||
| 10.10.2025, 20:24 | ||||||
|
COKPOWEHEU, ой не знаю все куб обсерают ОХ как зря.
Добавлено через 4 минуты Выкладываю для истории да и сам когда нибудь вернусь
0
|
||||||
|
349 / 147 / 10
Регистрация: 19.07.2024
Сообщений: 825
|
||||
| 10.10.2025, 20:42 | ||||
|
Читаем мануал и пытаемся начать думать. Строки с багами выделил. Впрочем - там почти все строки с багами. ![]() И так: Типичный кубокодинг!
0
|
||||
|
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,717
|
|
| 10.10.2025, 20:55 | |
|
jcxz, не надо ля ля это лишь пример вот и всё дальше конечно кому надо доработают. А если у меня МК только как драйвер для GLCD то вообще пофиг чего там в прерывании делается. Я вообще передачу данных не завязываю на прерывание только прим. Конечно ожидания конца потока DMA лучше вынести в суперлуп. Я потом допишу выложу сюда для смеха.
0
|
|
|
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,717
|
|||||||
| 12.10.2025, 14:59 | |||||||
|
jcxz, вообще бы хотелось все эти ожидания флагов осуществлять с пользой то есть пока ждём флаг выполняем в лупе другую часть кода.
Добавлено через 1 минуту
0
|
|||||||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,086
|
||
| 12.10.2025, 15:13 | ||
|
Скажем, в моей реализации на прерываниях, но без DMA, есть функция i2cm_isready, которая проверяет, закончилась ли уже предыдущая передача или, может, отвалилась по таймауту. Там же и ожидание сформировалось ли состояние STOP, на которое, к сожалению, нет прерывания.
0
|
||
|
349 / 147 / 10
Регистрация: 19.07.2024
Сообщений: 825
|
|||
| 12.10.2025, 15:17 | |||
|
Зачем вообще тут прикостылено DMA если не используется его главное предназначение: разгрузка CPU?
0
|
|||
|
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,717
|
|||
| 12.10.2025, 15:32 | |||
|
Добавлено через 2 минуты COKPOWEHEU, выходит всё же придётся задействовать таймер для исправления ошибок в передачи по i2c но это самое оно гарантирует 100% выход из зависания i2c и последующей его переинициализации.
0
|
|||
|
349 / 147 / 10
Регистрация: 19.07.2024
Сообщений: 825
|
||||
| 12.10.2025, 15:41 | ||||
|
Или наоборот - выход из этого цикла может произойти преждевременно. До завершения пересылки. Так как при инициализации передачи вы не удосужились почистить флаги DMA, и если от предыдущей передачи остался стоять флаг - цикл выше завершится преждевременно. Нужно чистить все флажки прерываний данного потока после завершения передачи или/и (лучше) - перед каждым стартом новой DMA-передачи. И куча других багов ещё в коде:
0
|
||||
| 12.10.2025, 15:41 | |
|
stm32f407+ADC+DMA. Проблема с DMA STM32F4 I2C DMA CMSIS stm32 SPI+DMA или I2C внешнее АЦП передача данных USART + DMA и непонятные иероглифы stm32f4 SPI приём и передача данных по DMA Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|