УРОК STM32Cube ADC DMA (СТМ32 АЦП настройка DMA)

  Рет қаралды 15,651

ElectroHobby

ElectroHobby

9 жыл бұрын

Пример настройки DMA для регулярных каналов АЦП на микроконтроллере STM32F4 discovery. Используем 3 канала АЦП.

Пікірлер: 27
@ivane1168
@ivane1168 8 жыл бұрын
отлично, 7 минут и всё встаёт на свои места, чего вечно не хватает в ST "документации"(им кажется, мы рождены для чтения неделями их мутных пдфов)!
@al_0xff_phreaker_us53
@al_0xff_phreaker_us53 8 жыл бұрын
Заметил у тебя STM Studio стоит оч. наглядно можно показывать что где, как раз для видео роликов. Сейчас сам случайно запустил, считай осциллограф 8 канальный вышел :)
@ElectroHobby1
@ElectroHobby1 8 жыл бұрын
+ali ali00ff Осциллограф наврятли. Там все тормозит если напрямую выводить данные в программу .К примеру выводил синус на осциллографе синус отправляю значения в программу там уже треугольники рисовало.Все красиво если частота маленькая .Там в настройках указано макс. время. сканирования 1мс помоему может и ошибаюсь .
@Jdivanchik
@Jdivanchik 8 жыл бұрын
Все отлично, но лучше подобный урок сокращать до 3 минут!
@ElectroHobby1
@ElectroHobby1 8 жыл бұрын
+Сергей Филимонов да к сожалению с монтажом видео пока не все гуд.
@wldevru
@wldevru 7 жыл бұрын
я увеличиваю скорость воспроизаведения
@al_0xff_phreaker_us53
@al_0xff_phreaker_us53 8 жыл бұрын
Привет ! Столкнулся тут с небольшой неприятностью - что типа дребезга АЦП . т.е. при регулярном измерении тысячные и сотые вольта, а то десятые скачут ! типа 2,0156; 2,0745; 2,0004 :( Попробовал емкостей навешать и чуть чуть стало лучше,но все же молотит :( . Как бороться ? Может наводка с соседнего висящего в воздухе ? у меня 8 регулярных в ряд, пока 4 использую. Вот не помню - пробовал я отключить инициализацию не используемых или нет, кажется да, но еще раз попробую. Подскажи чего полезного пожалуйста ! Может ф-цию написать для вывода усредненного результата ?
@DAMIRSALAKHOV
@DAMIRSALAKHOV 4 жыл бұрын
Мне нужно получить максимальное быстродействие при измерении двух параметров. Как Вы полагаете, не будет ли быстрее измерять двумя АЦП? Как вообще измерить скорость считывания?
@al_0xff_phreaker_us53
@al_0xff_phreaker_us53 8 жыл бұрын
Вообще молодец наконец то прогрессивные ролики на РУ ! Делай больше HAL, скоро у sapiess (уркои STM32) инициативу перхватишь :) тому хоть в лоб стреляй, что SPL - УТИЛЬ :) Япошка с st/e2e ясно сказал больше эту шнягу не поддерживаем !, тем более сейчас HAL сделали под все семейства, вкл дешевку 1 и 0.
@ElectroHobby1
@ElectroHobby1 8 жыл бұрын
+ali ali00ff Sappise оч нравятся его уроки.Но блин пропал он где-то .Давно уже видео небыло.
@sovchem1275
@sovchem1275 5 жыл бұрын
Привет ! Насчет DMA, по моему тут косяк. Вчера возился с АЦП DMA и до меня дошло... При использовании DMA у нас то показания с АЦП летят в память , т.е и забирать их нужно из памяти ?! Иначе выходит мы не пользуемся DMA, если забираем так HAL_ADC_GetValue(&hadc1) , или из регистра с cmsis в ручную. *Вопрос как забрать из памяти ?!* DMA то на то и дма, что бы не отвлекать ядро на обращение к регистрам периферии и при необходимости брать данные сразу из памяти! DMA за нас забирает показания из регистра! И бляха, как назло!, ни одного примера в кубах :((( Хотя по стандартному методу и IRQ есть в EVALовских примерах. (это второй ак - ali ali00ff, мы списывались. Лень было переключать :) C этого обычно троллей и власть хуесошу :)) )
@ArtemKuchin
@ArtemKuchin 8 жыл бұрын
Что-то я не понял. Функция ожидает массив unit32 - Каждый элемент 4 байта. Авто сделал массив unit16 (каждый элемент 2 байта) и явно преобразовав тип передал его в функцию. По моему это явный косяк, функция будет писать за пределы массива, а обращение к элементам массива будет возвращать чушь.
@ElectroHobby1
@ElectroHobby1 8 жыл бұрын
+Artem Kuchin до конца видео смотрели ? Все показывало правильно.Но никто вам не мешает передать массив uint32_t в функцию без преобразования.У меня так)
@ArtemKuchin
@ArtemKuchin 8 жыл бұрын
+ElectroHobby (BARYS ILKAVETS) До конц, конечно. Вижу что вроде работает. Но допускаю, что это совпадение. Бывало такое много раз, что работает, но не должно. Ну например, буфер оверфлоу имеет место быть, но никуда в страшное место не попали данные и потом процедуры вывода опять нужный тип ожидает. Но тут отладчик, так что скорее совпадание. Интересно было бы объявить массив uint16 на 6 элементов и посмотреть что происходит с элементами 3-5. Ну и разумеется, никто не мешает сделать все правильно :) Посмотрел другие туториалы, там массив 32бита. Зачем он такой, если порты 16 битные, АЦП 12битный - хрен знает. А вообще, конечно, спасибо. Мигрирую с AVR на STM32.
@ElectroHobby1
@ElectroHobby1 8 жыл бұрын
+Artem Kuchin мне больше SPL по душе).
@timmsagd
@timmsagd 3 жыл бұрын
Не будет писать за пределы массива. В кубе настроили передачу 16 бит на канал. ДМА 3 раза положит эти 16 бит по указателю на ADC_value подряд (16+16+16). Для эстетически красивого кода надо в кубе настроить передачу 32 бит (раз уж функция так хочет получить указатель на 32 битную переменную) вместо 16 бит (поставить word вместо half word), объявить массив из 32 битных величин, и передать без преобразования типов указатель на первый элемент массива.
@al_0xff_phreaker_us53
@al_0xff_phreaker_us53 8 жыл бұрын
Спасибо огромное тебе ! ....надеюсь :) Тут то все понятно, а вот самое сложное за кадром осталось. Забирать то как ?! 3ий день ебусь с эти ADC+DMA. Уже научным таком начал все калбаки из hal_adc тыкать И никак :( случайным образом данные хватаються то с 1ого то со 2ого канала ацп. Хотя вроде и стопорю dma, и прерывания торможу, сгружаю поочередно в буфера, а не :( Уууй уже чердак свистит. Гору примеров EVAL-овских перебрал, даже старые на кривом SPL и как сговорились все - 1 ацп на проект. С 1им как раз то проблем нет ! HAL_ADC_Start_DMA(хуемаё (uint32_t*) VALUE ) и все Oк Надеюсь дальше покажешь ! :) ps : радует что люди по чуть цивилизации приобщаются, я имею ввиду HAL Зачет ! пойду смотреть твой плейлист дальше. Спасибо !
@ElectroHobby1
@ElectroHobby1 8 жыл бұрын
+ali ali00ff uint16_t ADC_1 = ADC_value[0]; uint16_t ADC_2 = ADC_value[1]; uint16_t ADC_3 = ADC_value[2]; Так чтоли не работает?
@user-vi3rc7jr3n
@user-vi3rc7jr3n 8 жыл бұрын
Спасибо за видео! Просто супер. А как делать непрерывное преобразование, что бы в отладке постоянно кнопки не дёргать, а что бы всё непрерывно считывалось. Я пытался делать, но у меня теперь на все ноги мусор приходит. Хотелось бы знать как это сделать по науке.
@ElectroHobby1
@ElectroHobby1 8 жыл бұрын
+Никита Мальцев все просто не используй отладчик KEIL, а закидывай нужные перемеренные в STMStudio там наглядно можно график можно в виде таблицы.
@user-vi3rc7jr3n
@user-vi3rc7jr3n 8 жыл бұрын
+Борис Ильковец (BARYS ILKAVETS) Ну эта же штука не должна от среды разработки зависеть..
@ElectroHobby1
@ElectroHobby1 8 жыл бұрын
Зайди ко мене в ВК.Напиши подробно,что тебе нужно сделать.Я постараюсь помочь.
@valerayudin7826
@valerayudin7826 6 жыл бұрын
Как называются такие коннекторы?
@ElectroHobby1
@ElectroHobby1 6 жыл бұрын
Не знаю (
@user-nu2eb5cm3h
@user-nu2eb5cm3h 3 ай бұрын
А нет ли ошибки в этой строке "HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_value, 3);"??? Учитывая, что ADC_value массив и его имя и есть адрес. Не лишний ли знак "&"? И автор так уверенно, мол смотрите как все работает, цифирки бегают!! Ха-ха-ха!
@sovchem1275
@sovchem1275 5 жыл бұрын
Привет ! Насчет DMA, по моему тут косяк. Вчера возился с АЦП DMA и до меня дошло... При использовании DMA у нас то показания с АЦП летят в память , т.е и забирать их нужно из памяти ?! Иначе выходит мы не пользуемся DMA, если забираем так HAL_ADC_GetValue(&hadc1) , или из регистра с cmsis в ручную. *Вопрос как забрать из памяти ?!* DMA то на то и дма, что бы не отвлекать ядро на обращение к регистрам периферии и при необходимости брать данные сразу из памяти! DMA за нас забирает показания из регистра! И бляха, как назло!, ни одного примера в кубах :((( Хотя по стандартному методу и IRQ есть в EVALовских примерах. (это второй ак - ali ali00ff, мы списывались. Лень было переключать :) C этого обычно троллей и власть хуесошу :)) )
@ElectroHobby1
@ElectroHobby1 5 жыл бұрын
Привет. Так в видео вроде как раз и используется ДМА. Ложатся показания с АЦП в массив.В основном цикле программы ничего нет?HAL_ADC_GetValue(&hadc1) не используется в данном видео?
Red❤️+Green💚=
00:38
ISSEI / いっせい
Рет қаралды 76 МЛН
Slow motion boy #shorts by Tsuriki Show
00:14
Tsuriki Show
Рет қаралды 6 МЛН
Became invisible for one day!  #funny #wednesday #memes
00:25
Watch Me
Рет қаралды 59 МЛН
STM32Cube encoder  STM32F407 discovery (СТМ32 Энкодер)
19:23
STM32CubeIDE basics - 10 ADC DMA TIM HAL lab
31:32
STMicroelectronics
Рет қаралды 58 М.
STM, HAL and CubeMx
22:19
Home Made
Рет қаралды 18 М.
STM32. CMSIS. Урок#04: Настройка: ADC + DMA. Прерывания.
36:16
Исследование сигма дельта АЦП ADS1220
20:31
Dmitry Kuznetsov
Рет қаралды 1,6 М.
Red❤️+Green💚=
00:38
ISSEI / いっせい
Рет қаралды 76 МЛН