Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: Буфер данных Stm32f103c8

Ср авг 08, 2018 16:47:29

То есть все еще хуже.
Загуглите - Битовые операции

Да и читайте одновременно RM.
И еще - не всегда запись единицы в бит регистра устанавливает сей бит...

Re: Буфер данных Stm32f103c8

Ср авг 08, 2018 16:57:19

dosikus

Послушайте, я прошу в последний раз (наверное :))
Я понимаю что такое &, = , ~, ^ даже различаю порой среди всего этого английские цифры и буквы. Изредка они в мозгу складываются в слова.
Но я не понимаю где вот это
DMA_SxCR_PSIZE_0
DMA_SxCR_PSIZE_1

определено... В RM нет таких понятий. Да есть там эти 8и 9 биты регистра контроля.
Но где это у меня в проекте? Ведь, как я понимаю, это CMSIS?? Или..... опять!!!

Re: Буфер данных Stm32f103c8

Ср авг 08, 2018 17:11:28

Но где это у меня в проекте? Ведь, как я понимаю, это CMSIS??

нигде. Это CMSIS, но для другого контроллера - stm32f746

у вас это DMA_CCR_PSIZE_0 и DMA_CCR_PSIZE_1 в CMSIS, а так же DMA_PDATAALIGN_HALFWORD и DMA_PDATAALIGN_WORD в HAL

Re: Буфер данных Stm32f103c8

Ср авг 08, 2018 17:15:44

Эти константы определяющие биты прописаны в хэдере .
Типа stm32Fxxx.h , хэдер с определением регистров и их бит по стандарту CMSIS

Re: Буфер данных Stm32f103c8

Ср авг 08, 2018 17:46:19

В нормальных IDE можно на чём угодно вызвать в контекстном меню Go to declaration.

Re: Буфер данных Stm32f103c8

Ср авг 08, 2018 17:59:28

VladislavS
Кейл 5. Не вызывается

Re: Буфер данных Stm32f103c8

Ср авг 08, 2018 18:12:41

Значит кейл ненормальная IDE. :)))

VladislavS прав. :)

Изображение
Вложения
menu.png
(28.77 KiB) Скачиваний: 562

Re: Буфер данных Stm32f103c8

Ср авг 08, 2018 18:18:13

там просто нет этого макроса нигде. Говорю ж - та хабровская статья про другой контроллер.

Re: Буфер данных Stm32f103c8

Ср авг 08, 2018 18:35:35

arkhnchul
тот макрос, который в ыкинули мне после, для F103 тоже не вызвывается

Добавлено after 50 seconds:
То есть не то, чтобы не вызывается. Не находится просто в проекте.

Добавлено after 4 minutes 36 seconds:
Нашел. Он оказывается на ищет во всем проекте. Только в текущем файле. Ж)

Re: Буфер данных Stm32f103c8

Ср авг 08, 2018 20:39:04

VladislavS
Кейл 5. Не вызывается


После успешной компиляции...

Re: Буфер данных Stm32f103c8

Ср авг 08, 2018 20:51:38

А ещё в нормальных IDE есть команда Find in files...

Re: Буфер данных Stm32f103c8

Ср авг 08, 2018 21:32:54

все прочитал, все выучил... Загрузил для Cube и Keil все моменты по 476 контроллеру, чтоб наверняка :)
Дошел до
//Bits 15:0 NDT[15:0]: Number of data items to transfer
//1000 point x 4 channel
DMA2_Stream3-> NDTR = 4000;

//Bits 31:0 PAR[31:0]: Peripheral address
DMA2_Stream3->PAR = (uint32_t) &(ADC2->DR);

//Bits 31:0 M0A[31:0]: Memory 0 address
DMA2_Stream3->M0AR = (uint32_t) ADC2_array;

//Bits 0 EN: Stream enable / flag stream ready when read low
DMA2_Stream3->CR |= DMA_SxCR_EN;

NVIC_EnableIRQ (DMA2_Stream0_IRQn);

И понял, что нихрена не понял. Я даже представил себе, как конфигурировать биты на ассемблере, на котором и одной буквы кода в жизни не набрал.
Но так и не смог представить себе вживую, как DMA раскидывает по выделенному массиву мои данные...
Ладно, с утра продолжу.

Re: Буфер данных Stm32f103c8

Ср авг 08, 2018 22:09:12

Еще надо

Код:
DMA2_Stream3->CCR = (uint32_t)(DMA_CCR1_DIR | DMA_CCR1_CIRC | DMA_CCR1_MINC);


DMA_CCR1_DIR - направление из периферии в память.
DMA_CCR1_MINC - инкремент памяти (указателя) после каждого трансфера (по умолчанию на 1 байт, управляется битами DMA_CCR1_MSIZE). Эти биты и отвечают за то как "раскидывать" данные в память

Это если для 103 контроллера. Для F4 названия будут отличаться, но смысл тот же.

Re: Буфер данных Stm32f103c8

Чт авг 09, 2018 07:05:49

[uquote="Myp3ik",url="/forum/viewtopic.php?p=3434368#p3434368"]DMA_CCR1_DIR - направление из периферии в память.
с этим проблем нет. Очевидных. Пока.
DMA_CCR1_MINC - инкремент памяти (указателя) после каждого трансфера (по умолчанию на 1 байт, управляется битами DMA_CCR1_MSIZE). Эти биты и отвечают за то как "раскидывать" данные в память
- а вот тут хотелось бы понять смысл происходящего.

Из RM0008:
MINC: Memory increment mode
This bit is set and cleared by software.
0: Memory increment mode disabled
1: Memory increment mode enabled

Насколько я понял, он завязан также на DMA channel x number of data register ??
то есть в зависимости от размера DMA_CCR1_MSIZE он инкрементируется на 8,16,32 бита, пока в DMA channel x number of data register ?? заданый размер от 0 до 65535 не декрементируется до нуля. Так?
Но тогда ведь должен быть еще один счетчик, который будет считать номер элемента массива, который я задал, считать адрес.... Это уже не может быть аппаратно. Как это реализовано?

Re: Буфер данных Stm32f103c8

Чт авг 09, 2018 07:29:33

Это уже не может быть аппаратно. Как это реализовано?

Может. Аппаратно.

Re: Буфер данных Stm32f103c8

Чт авг 09, 2018 07:31:24

[uquote="khch",url="/forum/viewtopic.php?p=3434425#p3434425"]
Может. Аппаратно.

А если я задам не массив для буфера а перечисление или структуру!
Как он тогда догадается?

Re: Буфер данных Stm32f103c8

Чт авг 09, 2018 07:42:52

Вы задаёте адрес в памяти. Что, по вашему мнению, по этому адресу лежит ему сугубо фиолетово.

Re: Буфер данных Stm32f103c8

Чт авг 09, 2018 07:48:37

Да... ответил на отбь....сь. И на том спасибо ...
Однако вынужден признать, общение с вами, выглядящее в практическом аспекте совершенно бессмысленным, таки приносит свои плоды.
Честно говоря, когда я регистрировался, не ожидал, что хотя бы один человек будет общаться нормально.
А тут их целых двое :)

Re: Буфер данных Stm32f103c8

Чт авг 09, 2018 07:49:34

khch, сперва определитесь с камнем, пока не запутались . То у вас F1 то F4.


А если я задам не массив для буфера а перечисление или структуру!
Как он тогда догадается?



Возможно имелось ввиду не "перечисление или структуру!" а массив структур.
Контроллеру DMA естественно фиолетово на то как определен вами участок памяти.
Вы задаете ему начальный адрес этого участка
с каким шагом ему шагать по памяти
и сколько шагов делать
Последний раз редактировалось dosikus Чт авг 09, 2018 07:58:19, всего редактировалось 1 раз.

Re: Буфер данных Stm32f103c8

Чт авг 09, 2018 07:59:46

у меня stm32f103c8t6. board stm32_smart v2.0
F4 был в ссылке, которую мне дали изучить. Чтоб не путаться я скачал все для него и создал проект - смотреть в нем все это дело.

Добавлено after 4 minutes:
khch,
Вы задаете ему начальный адрес этого массива
с каким шагом ему шагать по памяти
и сколько шагов делать

ага...
То есть, если я укажу буфером массив типа uint8_t , а в регистрах настрою на работу с 32 битами, то он и писать туда будет все равно по 32?
Или когда я создам сей буфер, покажу на него указателем, который уже определен проектом и, если будет несовпадение - кейл ткнет меня носом???
Ответить