1 / 1 / 0
Регистрация: 22.06.2016
Сообщений: 94
|
||||||
1 | ||||||
Опрос нескольких регулярных каналов АЦП STM32F10020.11.2018, 09:17. Просмотров 5776. Ответов 30
Всем привет! Проблема с опросом нескольких регулярных каналов АЦП STM32F100 (Отл плата STM32F100VL Discouvery). На входы PA0 и PA1 повесил потенциометры. При пошаговой отладке в IAR данные из ADC1->DR в a[0] попадают, а вот a[1] по нулям, как потенциометр ни крути.
Читал, что такие вещи лучше делать через DMA, но хотелось бы для начала попробовать без него...
0
|
|
20.11.2018, 09:17 | |
Порядок оцифровки групп регулярных каналов АЦП в режиме dual mode Использование нескольких каналов АЦП AVR АЦП использование нескольких каналов АЦП несколько каналов |
|
845 / 518 / 169
Регистрация: 30.07.2015
Сообщений: 1,682
|
||||||||||||||||
20.11.2018, 11:58 | 2 | |||||||||||||||
Vozz, оптимизация включена? Если да, то попробуй
0
|
1 / 1 / 0
Регистрация: 22.06.2016
Сообщений: 94
|
|
20.11.2018, 12:50 [ТС] | 3 |
И правда, небольшая ссылочка под описанием бита SCAN в референс мануале
![]() Второй вариант с ногодрыгом как-то не вызывает доверия ))) Дело в том, что DMA еще не юзал ни разу, а тут сразу АЦП через него... Ну, попробую, благо примеров много
0
|
845 / 518 / 169
Регистрация: 30.07.2015
Сообщений: 1,682
|
|
20.11.2018, 12:53 | 4 |
Vozz, да там не особо есть разница АЦП или не АЦП запускать с DMA. Оно почти везде одинаково. Если что скидывай код поправим
0
|
19 / 19 / 2
Регистрация: 13.07.2012
Сообщений: 164
|
|
20.11.2018, 13:45 | 5 |
Vozz, вы меня конечно извините, но вот то что вы делаете это просто фантастика по современным меркам! Никогда в прикладных задачах не оперируют с аппаратной частью на уровне регистров, это чревато катастрофическими ошибками при увеличении объемов кода, а при работе с операционной системой на борту так вообще очень быстро приведет к серьезным гейзенбагам уже при двух-трех потоках. Прошивки пишут с использованием HAL(Hardware Abstraction Layer) - специального набора библиотек, задачей которого является максимальное абстрагирование от такого кода как у вас, сводя десятки строк подобного кода-лапши к функции HAL_ADC_GetValue(&hadc1). Самым мощным hal для stm32 на данный момент является оригинальный набор библиотек от ST Microelectronics идущий комплектом в пресловутом Stm32CubeMx. И изучать вопросы как работает ацп, нужно именно с позиции хала, попутно изучая код самих библиотечных функций, для общего понимания того, что же на самом делает низкоуровневый код.
Вот таких вот примеров кода в интернете масса, но проблема в том, что он не имеет никакой связью с реальностью, stm32 это довольно серьезные мк на которых решают прикладные задачи сильно отличающиеся от мигания светодиодом. У меня в практике есть прошивка состоящая из 22000 строк прикладного кода поверх HAL и FreeRTOS. Больше половины времени разработки были потрачены на отладочные мероприятия, если бы она писалась предлагаемыми методиками, то прошивка в релиз никогда бы и не вышла в принципе. Поэтому мой вам совет, если хотите писать на данных мк что-то более серьезные чем снятие значение с канала ацп, изучайте данные мк со стороны CubeMx.
0
|
1 / 1 / 0
Регистрация: 22.06.2016
Сообщений: 94
|
|
20.11.2018, 14:02 [ТС] | 6 |
Ну тут уж на вкус и цвет ... Я видел код для TFT-дисплея, написанный на CMSIS и ничего... Кто-то плюется от SPL и HAL, предпочитая CMSIS, кто-то наоборот.
Для меня понятнее, заглянув в reference manual, видеть регистры и непосредственно биты в них.
0
|
845 / 518 / 169
Регистрация: 30.07.2015
Сообщений: 1,682
|
|
20.11.2018, 14:08 | 7 |
Serbis, не вводите ТСа и начинающих в заблуждение.
Каким же образом функционирование/портирование FreeRTOS зависит от того какие либы ST вы используете? CMSIS как и HAL как и SPL это инструмент для работы с периферией контроллера. FreeRTOS из периферии использует только системный таймер. Остальное все - это софтварная оболочка. Это только ваши домыслы. HAL как и CMSIS как и SPL (до F7, L4 серии), LL являются равноправными инструментами которые поддерживает ST. Какой из них выбрать дело каждого. Не по теме: Топящих за CMSIS я уже видел, но ярые фаны HAL, да еще и в разработке - это что-то новенькое.
0
|
1 / 1 / 0
Регистрация: 22.06.2016
Сообщений: 94
|
||||||
21.11.2018, 11:56 [ТС] | 8 | |||||
Первая тренировка с DMA поставила в тупик
![]()
![]() Добавлено через 35 секунд
0
|
845 / 518 / 169
Регистрация: 30.07.2015
Сообщений: 1,682
|
||||||||||||||||
21.11.2018, 12:15 | 9 | |||||||||||||||
![]() Решение
Vozz, пока в регистры DMA не смотрел, а вот в настройке АЦП не увидел выставления бита разрешения DMA
Vozz, едем дальше
1
|
1 / 1 / 0
Регистрация: 22.06.2016
Сообщений: 94
|
||||||
21.11.2018, 14:11 [ТС] | 10 | |||||
Йесс, в CMAR1 появились данные от АЦП и загорелся зеленый светодиод на отладочной плате, что сигнализирует об окончании передачи 16 бит. В переменной Buffer валяются значения АЦП. Еще пару косяков у себя обнаружил, экпериментируем дальше)
Добавлено через 2 минуты Да, спасибо уже увидел косяки, отладчик подсказывал предупреждением Добавлено через 15 минут Все, добил код. Надеюсь, если такой же новичек, как я будет ломать голову, то мой пример ему поможет). На PA0 и PA1 у меня висит по потенциометру. запитал их тут же на отладочной плате от 3,3В оба канала опрашивается нормально, прерывание DMA добавил просто по факту, чтобы его отследить (срабатывает или нет).
Добавлено через 1 час 31 минуту Без DMA тут получилась бы солянка. Удобно тем, что DMA по настройкам сам формирует кольцевой буфер. Его можно зациклить, можно сделать один проход ... и заполнить массив ну и плюс процессор не напрягается
0
|
845 / 518 / 169
Регистрация: 30.07.2015
Сообщений: 1,682
|
|
21.11.2018, 14:14 | 11 |
Vozz,
Именно это является огромным плюсом STM. Практически к каждой периферии можно приделать так или иначе DMA. Если научиться с ним работать, то можно избежать многих костылей и косяков в будущем.
0
|
1 / 1 / 0
Регистрация: 22.06.2016
Сообщений: 94
|
|
21.11.2018, 14:25 [ТС] | 12 |
Хотел поначалу использовать инжектированные каналы АЦП, но их всего 4... EXTI тоже всего 4 входа можно сделать (для регулирования выходного напряжения приделать инкрементальные энкодеры), а нужно 12 каналов, вот DMA и помог.
0
|
1 / 1 / 0
Регистрация: 22.06.2016
Сообщений: 94
|
|
21.11.2018, 18:19 [ТС] | 14 |
Я думаю и через EXTIn можно ...
0
|
845 / 518 / 169
Регистрация: 30.07.2015
Сообщений: 1,682
|
|
21.11.2018, 20:35 | 16 |
Vozz, это как и ацп без дма, можно настраивать один канал и в прерывании перенастраивать. А можно использовать аппаратный ДМА.
Тут точно так же, зачем нагружать ядро, если есть специальный инструмент для работы с энкодерами.
0
|
1855 / 1180 / 114
Регистрация: 04.01.2010
Сообщений: 4,200
|
|
27.11.2018, 09:59 | 17 |
Не по теме: что называется, "приехали"... )) Как же удобно было раньше на SPL'е... Добавлено через 40 секунд Vozz, почему вы не используете SPL, HAL и или готовые библиотеки?
0
|
845 / 518 / 169
Регистрация: 30.07.2015
Сообщений: 1,682
|
|
27.11.2018, 10:07 | 18 |
0
|
1 / 1 / 0
Регистрация: 22.06.2016
Сообщений: 94
|
|
27.11.2018, 12:32 [ТС] | 19 |
Если пишешь через CMSIS, то приходится частенько заглядывать в мануал. Таким образом лучше запоминается принцип работы отдельных модулей контроллера, регистры, биты в них.
Да, это дольше, чем через библиотеки, но никаких срочных проектов у меня нет. Разбираться в коде легче, если что-то не прет. Вот так получилось, что полюбился мне CMSIS ![]()
1
|
1855 / 1180 / 114
Регистрация: 04.01.2010
Сообщений: 4,200
|
|
27.11.2018, 13:37 | 20 |
Та я в курсе ). Просто я так понимаю, идея с портацией кода от чипа к чипу (как у AVR) у STM32 с треском провалилась, ввиду невозможности реализации идеи - народ "не оценил" SPL. а так вообще - HAL и SPL - попытки сделать код универсальным, как на R_Pi, или еще что-то там.
PS: просто для новичка (на платформах ST) использование трушных регистров довольно муторное дело.
0
|
27.11.2018, 13:37 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. Переключение каналов АЦП atmega88 Большое количество АЦП каналов Защита каналов АЦП от импульсных помех Данные с двух каналов АЦП по очередно.[Решено] Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |