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

Поділитися
Вставка
  • Опубліковано 5 лют 2025
  • Пример настройки DMA для регулярных каналов АЦП на микроконтроллере STM32F4 discovery. Используем 3 канала АЦП.

КОМЕНТАРІ • 27

  • @ivane1168
    @ivane1168 9 років тому +2

    отлично, 7 минут и всё встаёт на свои места, чего вечно не хватает в ST "документации"(им кажется, мы рождены для чтения неделями их мутных пдфов)!

  • @Jdivanchik
    @Jdivanchik 8 років тому +1

    Все отлично, но лучше подобный урок сокращать до 3 минут!

    • @ElectroHobby1
      @ElectroHobby1  8 років тому

      +Сергей Филимонов да к сожалению с монтажом видео пока не все гуд.

    • @wldevru
      @wldevru 8 років тому

      я увеличиваю скорость воспроизаведения

  • @sovchem1275
    @sovchem1275 5 років тому

    Привет ! Насчет DMA, по моему тут косяк. Вчера возился с АЦП DMA и до меня дошло...
    При использовании DMA у нас то показания с АЦП летят в память , т.е и забирать их нужно из памяти ?!
    Иначе выходит мы не пользуемся DMA, если забираем так HAL_ADC_GetValue(&hadc1) , или из регистра
    с cmsis в ручную. *Вопрос как забрать из памяти ?!* DMA то на то и дма, что бы не отвлекать ядро на обращение к регистрам периферии и при необходимости брать данные сразу из памяти! DMA за нас забирает показания из регистра!
    И бляха, как назло!, ни одного примера в кубах :((( Хотя по стандартному методу и IRQ есть в EVALовских примерах.
    (это второй ак - ali ali00ff, мы списывались. Лень было переключать :) C этого обычно троллей и власть хуесошу :)) )

  • @al_0xff_phreaker_us53
    @al_0xff_phreaker_us53 9 років тому

    Вообще молодец наконец то прогрессивные ролики на РУ !
    Делай больше HAL, скоро у sapiess (уркои STM32) инициативу перхватишь :) тому хоть в лоб стреляй, что SPL - УТИЛЬ :) Япошка с st/e2e ясно сказал больше эту шнягу не поддерживаем !, тем более сейчас HAL сделали под все семейства, вкл дешевку 1 и 0.

    • @ElectroHobby1
      @ElectroHobby1  9 років тому

      +ali ali00ff Sappise оч нравятся его уроки.Но блин пропал он где-то .Давно уже видео небыло.

  • @al_0xff_phreaker_us53
    @al_0xff_phreaker_us53 9 років тому

    Заметил у тебя STM Studio стоит оч. наглядно можно показывать что где, как раз для видео роликов.
    Сейчас сам случайно запустил, считай осциллограф 8 канальный вышел :)

    • @ElectroHobby1
      @ElectroHobby1  9 років тому

      +ali ali00ff Осциллограф наврятли. Там все тормозит если напрямую выводить данные в программу .К примеру выводил синус на осциллографе синус отправляю значения в программу там уже треугольники рисовало.Все красиво если частота маленькая .Там в настройках указано макс. время. сканирования 1мс помоему может и ошибаюсь .

  • @DAMIRSALAKHOV
    @DAMIRSALAKHOV 4 роки тому

    Мне нужно получить максимальное быстродействие при измерении двух параметров. Как Вы полагаете, не будет ли быстрее измерять двумя АЦП?
    Как вообще измерить скорость считывания?

  • @Тяжелыйгод
    @Тяжелыйгод 9 місяців тому +1

    А нет ли ошибки в этой строке "HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_value, 3);"??? Учитывая, что ADC_value массив и его имя и есть адрес. Не лишний ли знак "&"? И автор так уверенно, мол смотрите как все работает, цифирки бегают!! Ха-ха-ха!

  • @al_0xff_phreaker_us53
    @al_0xff_phreaker_us53 9 років тому

    Привет ! Столкнулся тут с небольшой неприятностью - что типа дребезга АЦП . т.е. при регулярном измерении
    тысячные и сотые вольта, а то десятые скачут ! типа 2,0156; 2,0745; 2,0004 :( Попробовал емкостей навешать и чуть чуть стало лучше,но все же молотит :( . Как бороться ? Может наводка с соседнего висящего в воздухе ?
    у меня 8 регулярных в ряд, пока 4 использую. Вот не помню - пробовал я отключить инициализацию не используемых или нет, кажется да, но еще раз попробую. Подскажи чего полезного пожалуйста !
    Может ф-цию написать для вывода усредненного результата ?

  • @ArtemKuchin
    @ArtemKuchin 8 років тому +5

    Что-то я не понял. Функция ожидает массив unit32 - Каждый элемент 4 байта. Авто сделал массив unit16 (каждый элемент 2 байта) и явно преобразовав тип передал его в функцию. По моему это явный косяк, функция будет писать за пределы массива, а обращение к элементам массива будет возвращать чушь.

    • @ElectroHobby1
      @ElectroHobby1  8 років тому

      +Artem Kuchin до конца видео смотрели ? Все показывало правильно.Но никто вам не мешает передать массив uint32_t в функцию без преобразования.У меня так)

    • @ArtemKuchin
      @ArtemKuchin 8 років тому +2

      +ElectroHobby (BARYS ILKAVETS) До конц, конечно. Вижу что вроде работает. Но допускаю, что это совпадение. Бывало такое много раз, что работает, но не должно. Ну например, буфер оверфлоу имеет место быть, но никуда в страшное место не попали данные и потом процедуры вывода опять нужный тип ожидает. Но тут отладчик, так что скорее совпадание. Интересно было бы объявить массив uint16 на 6 элементов и посмотреть что происходит с элементами 3-5. Ну и разумеется, никто не мешает сделать все правильно :) Посмотрел другие туториалы, там массив 32бита. Зачем он такой, если порты 16 битные, АЦП 12битный - хрен знает. А вообще, конечно, спасибо. Мигрирую с AVR на STM32.

    • @ElectroHobby1
      @ElectroHobby1  8 років тому

      +Artem Kuchin мне больше SPL по душе).

    • @timmsagd
      @timmsagd 4 роки тому

      Не будет писать за пределы массива.
      В кубе настроили передачу 16 бит на канал.
      ДМА 3 раза положит эти 16 бит по указателю на ADC_value подряд (16+16+16).
      Для эстетически красивого кода надо в кубе настроить передачу 32 бит (раз уж функция так хочет получить указатель на 32 битную переменную) вместо 16 бит (поставить word вместо half word), объявить массив из 32 битных величин, и передать без преобразования типов указатель на первый элемент массива.

  • @НикитаМальцев-н8в
    @НикитаМальцев-н8в 9 років тому

    Спасибо за видео! Просто супер. А как делать непрерывное преобразование, что бы в отладке постоянно кнопки не дёргать, а что бы всё непрерывно считывалось. Я пытался делать, но у меня теперь на все ноги мусор приходит. Хотелось бы знать как это сделать по науке.

    • @ElectroHobby1
      @ElectroHobby1  9 років тому

      +Никита Мальцев все просто не используй отладчик KEIL, а закидывай нужные перемеренные в STMStudio там наглядно можно график можно в виде таблицы.

    • @НикитаМальцев-н8в
      @НикитаМальцев-н8в 9 років тому

      +Борис Ильковец (BARYS ILKAVETS) Ну эта же штука не должна от среды разработки зависеть..

    • @ElectroHobby1
      @ElectroHobby1  9 років тому

      Зайди ко мене в ВК.Напиши подробно,что тебе нужно сделать.Я постараюсь помочь.

  • @al_0xff_phreaker_us53
    @al_0xff_phreaker_us53 9 років тому

    Спасибо огромное тебе !
    ....надеюсь :)
    Тут то все понятно, а вот самое сложное за кадром осталось. Забирать то как ?!
    3ий день ебусь с эти ADC+DMA. Уже научным таком начал все калбаки из hal_adc тыкать
    И никак :( случайным образом данные хватаються то с 1ого то со 2ого канала ацп.
    Хотя вроде и стопорю dma, и прерывания торможу, сгружаю поочередно в буфера, а не :(
    Уууй уже чердак свистит. Гору примеров EVAL-овских перебрал, даже старые на кривом SPL
    и как сговорились все - 1 ацп на проект.
    С 1им как раз то проблем нет !
    HAL_ADC_Start_DMA(хуемаё (uint32_t*) VALUE ) и все Oк
    Надеюсь дальше покажешь ! :)
    ps : радует что люди по чуть цивилизации приобщаются, я имею ввиду HAL
    Зачет ! пойду смотреть твой плейлист дальше.
    Спасибо !

    • @ElectroHobby1
      @ElectroHobby1  9 років тому

      +ali ali00ff
      uint16_t ADC_1 = ADC_value[0];
      uint16_t ADC_2 = ADC_value[1];
      uint16_t ADC_3 = ADC_value[2];
      Так чтоли не работает?

  • @valerayudin7826
    @valerayudin7826 7 років тому

    Как называются такие коннекторы?

  • @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) не используется в данном видео?