Easyelectronics.ru

Электроника для всех
Текущее время: 10 авг 2020, 04:21

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 3340 ]  На страницу Пред.  1 ... 111, 112, 113, 114, 115, 116, 117 ... 134  След.
Автор Сообщение
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 03 ноя 2019, 22:14 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Я же уже ответил - DMA не может самостоятельно проводить арифметических операций. Невозможно значение из счетчика таймера (35) преобразовать в адрес ОЗУ (0x2000'007A + 35) силами одного только DMA, без программного вычисления этого адреса методом инструкций суммирования в АЛУ ядра Кортекс. Плюс к этому - невозможно изменить какой-либо управляющий регистр DMA (адрес источника, число передач) на включенном канале (потоке) DMA. Любые изменения - только после выключения канала (потока).

Newexe писал(а):
PS. разницы в работе ДМА в режимах м2м и с периферией же нет?! загонять в ячейку памяти CMAR, при помощи другого ДМА м2м, значение массива с аппаратным смещением, это просто еще один посредник, результат не получится?!

Есть разница. В режиме Mem-to-Mem передача байтов происходит пачкой и запускается сразу после программного включения канала (потока) установкой бита EN.
В отличие от этого, передача Mem-to-Periph осуществляется только по запросу из периферии, и только по одной передаче за один запрос (варианты с упаковкой при разных размерностях сейчас не рассматриваем).
Таким образом, передача Mem-to-Mem в периферию невозможна.


Последний раз редактировалось BusMaster 03 ноя 2019, 22:26, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 03 ноя 2019, 22:26 
Только пришел

Зарегистрирован: 29 авг 2019, 15:32
Сообщения: 12
BusMaster писал(а):
Я же уже ответил - DMA не может самостоятельно проводить арифметических операций. Невозможно значение из счетчика таймера (35) преобразовать в адрес ОЗУ (0x2000'007A + 35) силами одного только DMA, без программного вычисления этого адреса методом инструкций суммирования в АЛУ ядра Кортекс. Плюс к этому - невозможно изменить какой-либо управляющий регистр DMA (адрес источника, число передач) на включенном канале (потоке) DMA. Любые изменения - только после выключения канала (потока).

тоесть ДМА встает в поле на адрес 0x2000'007A, оттуда по порядку начинает брать "клубнику", брать сколько поместится в пакет, отправляет в конвейер, идет прямо по полю адресов, и в уме отсчитывает сколько коробок у него осталось, как только ничего не осталось, он или остановится (не идет дальше по полю) или возвращается обратно.
я несколько неправильно понял DMA_CNDTR, спасибо за разъяснение, я предположил, что ДМА на основании начала массива и остатка пакетов определяет какой адрес отправлять, спасибо еще раз


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 03 ноя 2019, 22:38 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 6905
Сдается мне, вы хотите странного.
Как и любой "только что начал", вы пытаетесь микроскопом забивать гвозди с помощью ногодрыга. ))
Опишите то, что вам нужно - словами, а не последовательностью работы с регистрами.
Для справки - STM32, даже самый дешевый, способен обрабатывать прерывания на каждом тике ШИМ. При этом ШИМ может быть и 200 кГц.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 03 ноя 2019, 22:44 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Я дополнил предыдущий пост.
Пакетный режим передачи с упаковкой при разных размерностях (Burst Mode) сейчас не рассматриваем. Он не доступен в F1.
DMA в режиме Mem-to-Periph работает следующим образом:
Есть стартовый адрес источника - адрес в ОЗУ. Есть адрес регистра периферии - например SPI DR. Есть число передач - 12 штук в регистре CNDTR. Адрес источника (ОЗУ) инкрементируется, адрес назначения неизменен. Размер передачи 8/8 бит. Итого, 12 байт.
Запускаем канал (поток), включаем SPI и разрешаем запросы DMA. Сразу возникает запрос от SPI на передачу - пошел первый байт из ОЗУ в SPI DR. Счетчик CNDTR уменьшился на единицу. Адрес источника в ОЗУ увеличился на единицу.
При следующем запросе от SPI пойдет второй байт и всё повторится до тех пор, пока счетчик CNDTR не станет = 0.

Я пока что не понимаю, вкуда конкретно вы хотите передавать из массива. Чтобы инициировать очередную передачу, нужен запускающий сигнал. Этим сигналом может быть импульс от таймера по событию обновления или сравнения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 03 ноя 2019, 23:20 
Только пришел

Зарегистрирован: 29 авг 2019, 15:32
Сообщения: 12
u37 писал(а):
Опишите то, что вам нужно - словами, а не последовательностью работы с регистрами.

например:
есть таймер1 в режиме энкодера, считает от 0 до 9.
есть массив Data[10] = {0,1,2,3,4,5,6,7,8,9}
есть таймер2 в режиме ШИМ.
я хачу чтобы на таймере2 была скважность ШИМ соответствующая Data[TIM1->CNT], тоесть я кручу энкодер, а на выходе ШИМ скважность меняется, но не через расчет в ядре, а аппаратно
а еще без прерываний чтобы, то есть энкодер не крутим, там постоянно 3, через ДМА постоянно в таймер2 задается скважность Data[3], ДМА отправил 32бита, таймер2 производит ШИМ и готов получить следующий пакет, ДМА видит готовность и отправляет Data[3] так как энкодер в том же положении, таймер2 запускает следующий период ШИМ и готов получить следующий пакет, в это время энкодер сменил таймер1 на 4, ДМА видит готовность и отправляет Data[4], и так и далее, тоесть ни одного прерывания, всё зациклено на аппаратных возможностях
я уж понял что никак, BusMaster объяснил как работает у ДМА смещение адреса, спасибо всем кто отозвался, просто хотел у знающих людей уточнить


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 03 ноя 2019, 23:58 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 6905
Предполагаю, что "энкодер" тоже принимается "аппаратно"? Хорошо, но у "энкодера" есть такой неприятность, как "дребезг". Для механических, это неустойчивость соединения контактных поверхностей, у оптических - неустойчивость сигнала при переходе через 0. Т.е., любой тип энкодера может давать сбои. Как вы собираетесь их фильтровать? Если вы надеетесь на аппаратный фильтр, то эта надежда пустая - дребезг (особенно механических "энкодеров") может продолжаться долго (а никак не 1-5 мс), иногда - постоянно, если поверхности приработались.
Так что, программный фильтр нужен, иначе устройство будет работать "сейчас", но не "потом". ;)
Ну, а если есть программный фильтр, то DMA здесь совсем не к месту.
/IMHO

Remark
Если хотите полностью аппаратной реализации - поставьте переменный резистор 0-Vcc (... 0-Vcc/8) на вход ADC и натравите его на постоянную оцифровку с запуском DMA. Сам DMA будет брать ADC->DR (ADC->JDATA*) и пихать в соответствующий регистр нужного таймера. Вот вам и переменная скважность (или частота, как захотите).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 04 ноя 2019, 00:16 
Только пришел

Зарегистрирован: 29 авг 2019, 15:32
Сообщения: 12
u37 писал(а):
Предполагаю, что "энкодер" тоже принимается "аппаратно"? Хорошо, но у "энкодера" есть такой неприятность, как "дребезг". Для механических, это неустойчивость соединения контактных поверхностей, у оптических - неустойчивость сигнала при переходе через 0. Т.е., любой тип энкодера может давать сбои. Как вы собираетесь их фильтровать? Если вы надеетесь на аппаратный фильтр, то эта надежда пустая - дребезг (особенно механических "энкодеров") может продолжаться долго (а никак не 1-5 мс), иногда - постоянно, если поверхности приработались.
Так что, программный фильтр нужен, иначе устройство будет работать "сейчас", но не "потом". ;)
Ну, а если есть программный фильтр, то DMA здесь совсем не к месту.

/IMHO

Энкодер с открытым коллектором, я даже без аппаратного фильтра не видел проблем пока, потерь при работе не было, наводки пока не рассматриваем. Спасибо за подсказку, учту. Обычно чем дальше в лес, тем больше дров, а тут вместо дров уже грабли, дрова тоже есть, но граблей больше.
Вообще в идеале я хотел взять абсолютный энкодер, бит так на 12, посадить их на ножки одного порта и забирать полностью состояние всего порта, а не побитам состояние каждой ножки. Только ещё не придумал как мк понять что состояние входов стабилизировалось, можно забирать данные, опять таки посылать шим без использования ядра никак
Цитата:
Если хотите полностью аппаратной реализации - поставьте переменный резистор 0-Vcc (... 0-Vcc/8) на вход ADC и натравите его на постоянную оцифровку с запуском DMA. Сам DMA будет брать ADC->DR (ADC->JDATA*) и пихать в соответствующий регистр нужного таймера. Вот вам и переменная скважность (или частота, как захотите).

Массив который хочу отправлять, он нелинейный, да, правы, запутал ещё и форумчан в примере показав линейный массив, уже дня три ищу варианты, в голове каша, забываю указать моменты некоторые


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 04 ноя 2019, 00:48 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 6905
На переменном резисторе тоже можно сделать нелинейную регулировку (даже при "линейном" потенциометре). Наличие проволочных многооборотных переменников решает вопрос с расширенным диапазоном. Однако, при этом теряется вся прелесть "переменника" - взаимно однозначное видимое положение. Но, "положение" сохраняется и при выключении. ))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 04 ноя 2019, 13:04 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Господа, вы углубились невтуда.
Массив конечно же имеет линейное возрастание адресов элементов массива, элементы массива расположены по порядку (для 16-битного элемента):
0х2000'0000, 0х2000'0002, 0х2000'0004, 0х2000'0006, 0х2000'0008, 0х2000'000A, 0х2000'000C...
Значения в элементах могут быть совершенно произвольными, например вот такими:
uint16_t array[7] = {1000, 1250, 1500, 2000, 3000, 8000, 16000};
И программно выбор элемента массива по значению в счетчике энкодера и передача его дальше выполняется несложно. Надо только не забыть добавить проверку на допустимые значения счетчика энкодера, выполняющего роль индекса массива, чтобы не вылететь за границы массива и не получить ошибку.

Ситуация с переменным резистором и АЦП - а зачем тут микроконтроллер вообще, когда есть схемы на том же 555-м таймере, работающем по тому же принципу.
Короче говоря, не усложняйте там, где и так всё просто.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 04 ноя 2019, 20:42 
Заглядывает иногда

Зарегистрирован: 03 фев 2019, 06:33
Сообщения: 75
stm32f405rgt

Я так понял можно подстроить LSI для тактирования RTC . Как происходить захват начинается с фронта захват и заканчивается спадом с подсчетом тактирования TIM5 ?


Вложения:
2019-11-04_23-38-01.png
2019-11-04_23-38-01.png [ 91.68 Кб | Просмотров: 931 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 21 ноя 2019, 09:25 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2872
Вопрос "детский", но что-то засел на нём.
Имеется F103C8:
Вложение:
2019-11-21_103002.jpg
2019-11-21_103002.jpg [ 87.73 Кб | Просмотров: 773 ]

OLED подключенный на SPI1, используется только Tx.
Ради удобства разводки, кинул выход на шим нагревателя на TIM3_CH1, который висит на PA6, там же где и MISO.
Проблема в том, что стоит мне включить тактирование SPI1, то у меня тут же отрубается ШИМ на PA6. Не настраивая пины и SPI. Пробовал настроить SPI в transmit-only mode, и согласно ДШ тогда пин MISO я могу без проблем использовать под свои нужды:
Вложение:
2019-11-21_103539.jpg
2019-11-21_103539.jpg [ 40.5 Кб | Просмотров: 773 ]

Однако ШИМа так и нет.
UPD: походу MISO можно испозовать только как GPIO. Т.е. ногодрыг без проблем работает, но стоит его перевести в Alternate Function Push-Pull для таймера, то PA6 видимо переключается на SPI. Обидно. В errata явно нет упоминаний, что так нельзя делать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 21 ноя 2019, 11:47 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1515
AFIO->MAPR


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 21 ноя 2019, 11:58 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2872
Про ремап то понятно. Но нельзя ремапнуть только MISO, чтобы закинуть его на неиспользуемую ногу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 21 ноя 2019, 12:10 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1515
Скальпелеграфия.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 21 ноя 2019, 13:22 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Просто настройте SPI в режим Half-duplex Master, Bidirectional + Out Enable, тогда MISO освободится. В доках смотреть абзац чуть выше того, что приложили.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 21 ноя 2019, 14:00 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2872
А вот не освобождается. Точнее ногодрыгом можно дергать, но натравить на AF другой периферии нельзя. Биты SPI_CR1_BIDIMODE и SPI_CR1_BIDIOE выставлял.
Код:
SPI1->CR1 = SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE | SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_BR_2 | SPI_CR1_MSTR;

Да и не сказано там явно, что при этом MISO можно будет под свои нужны использовать в режиме мастера, хотя это казалось бы логичным.
Вложение:
2019-11-21_155110.jpg
2019-11-21_155110.jpg [ 42 Кб | Просмотров: 711 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 22 ноя 2019, 00:57 
Старожил

Зарегистрирован: 06 июн 2018, 22:30
Сообщения: 529
Откуда: Киев
Как вы считаете можно ли изолировать питание аналоговой части через DC/DC а соединятся земли будут внутри корпуса. Для уменьшения помех.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 22 ноя 2019, 09:27 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1515
DC/DC и уменьшение помех взаимоисключающие вещи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 06 янв 2020, 01:48 
Старожил

Зарегистрирован: 05 дек 2017, 18:17
Сообщения: 231
Добрый день.
STM32F072, SPI в режиме мастера. Аппаратный CS работает в такой конфигурации или надо "в ручную" дергать CS? Тут блок SPI вроде не как на F4 (где не работало), но и не такой как на H7 (где работает). Прикол с обращением к SPI->DR в 8 битном режиме я уже знал, но FIFO Treshold для флага RXNE было сюрпризом :)
Я попробовал конечно :) В ручном режиме работает.
В случае аппаратного управления, CS почему-то постоянно в 0. Подтяжка встроенными резисторами (PUPDR) не помогает. На осцилографе вижу передачу, но CS в 0 без всяких движений и соответственно не работает ничего. Это так и запланировано (как на F4) или я налажал?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 06 янв 2020, 01:53 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1515
А почему ты это нас, а не RM спрашиваешь?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 06 янв 2020, 01:59 
Старожил

Зарегистрирован: 05 дек 2017, 18:17
Сообщения: 231
VladislavS писал(а):
А почему ты это нас, а не RM спрашиваешь?


Ну с RM не получилось пока разобраться, прямого ответа в RM я не нашел. А если оно изначально не рабочее, то можно долго биться.
Собственно я не прошу лезть в RM, искать примеры кода или делать какие-то трудозатратные вещи. Вопрос простой - оно вообще работает?
Если Вы с этим работали и у Вас оно работало, ответа "Да, все отлично работает" будет достаточно. Или же наоборот потратив кучу времени выяснили, что по сути оно не работает, и ответа "Нет, используй ручное управление CS" будет также достаточно.

Частично проблема решилась установкой бита NSSP в CR2. CS в неактивном положении 1, на передаче опускается. Но при передаче нескольких байт, как и описано в RM поднимается между ними. В моем случае это все ломает.

PS: вообщем можно сказать разобрался. Я посмотрел почему в H7 работало - там в CR2 можно указать сколько байт будет передача. В F0 этого нет, поэтому либо CS дергается аппаратно, но после каждого байта, либо руками.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 06 янв 2020, 02:36 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1515
Ну вот видишь, в RM всё таки полезно заглядывать. И что, NCS становится неактивным когда TXFIFO не пустой? Не верю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 05 фев 2020, 18:19 
Только пришел

Зарегистрирован: 17 май 2012, 17:46
Сообщения: 7
Здравствуйте, товарищи.
Вопрос по компаратору (конкретно в 373, но думаю, везде будет схожая ситуация).
На инвертированный вход компаратора можно подать выход ЦАП, напр. как это указано в ReferenceManual, PA4(DAC1_OUT1).
Правильно ли я понимаю, что коммутация происходит внутренняя, и сам порт PA4 при этом не используется? Скорее "да", но тогда есть ли требования к тому, чтобы сам порт (ножка) были свободными и не использовалась как GPIO?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 05 фев 2020, 18:26 
Старожил

Зарегистрирован: 06 июн 2018, 22:30
Сообщения: 529
Откуда: Киев
в каких-то были ошибки уточните по эррате. Коммутация да внутренняя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 для чайников
СообщениеДобавлено: 05 фев 2020, 19:18 
Только пришел

Зарегистрирован: 17 май 2012, 17:46
Сообщения: 7
MasterElectric писал(а):
в каких-то были ошибки уточните по эррате. Коммутация да внутренняя.

Ну эррата на данный чип молчит. Но если ошибок нет, как должно быть? Задействовав и GPIO на выход и вход на компаратор с ЦАП, должен ли я увидеть на ноге напряжение цапа?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3340 ]  На страницу Пред.  1 ... 111, 112, 113, 114, 115, 116, 117 ... 134  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB