DMA2 не поддерживается на STM32F103CX?

Рана
Ср 13 сентября 2017 г., 22:57
Привет
Блю, синяя таблетка STM32F103 не поддерживает DMA2 ?
Потому что я получаю ошибку ошибки: «DMA2» не был объявлен в этой области

В основном из 3 PINS SPI TX PA7, PB15, PB5 Я должен использовать PB5, потому что другие заняты.

#define spi1_dma_ch dma_ch3 // dma chan для spi1 dma_ch3 pa7
#define spi2_dma_ch dma_ch5 // dma chan для spi 2 dma_ch5 pb15
#define spi3_dma_ch dma2_ch2 // dma chan для spi 3 dma_ch2 pb5

#define spi_dma dma1 // dma для spi
#define spi_dma2 dma2 // dma для spi

Я получаю вышеуказанную ошибку в объявлении ошибки DMA2: «DMA2» не был объявлен в этом объеме

Поэтому я хочу позвонить в DMA_ATTACH_INTERRUPT для PB5
dma_attach_interrupt (dma2, spi3_dma_ch, &Dma_do_something);

PS Я включаю #include <SPI.час>

victor_pv
Чт 14 сентября 2017 г. 5:21 утра
Bluepill MCU, или любой из этого размера вспышки (64/128 КБ) не имеет DMA2.
Пожалуйста, проверьте справочное руководство для получения подробной информации. В основном у MCU нет периферийных устройств, которые использовали бы DMA2, поэтому я думаю, что для STM не имело смысла включать контроллер DMA только для M2M

Рана
Чт 14 сентября 2017 г. 6:36 утра
ОК, это имеет смысл

Я пытаюсь вывести данные с использованием DMA SPI, могу ли я изменить PIN -код для канала DMA для SPI1 DMA_CH3
Не PA7, потому что занят, но с PB5 или чем -то еще, есть ли другой способ сопоставить на другую булавку?

У нас есть 3 SPI Правильно?
Изображение

Rogerclark
Чт 14 сентября 2017 г. 6:55 утра
Afik На F103CX есть только 2 устройства SPI

Диаграмма показывает только 2 устройства SPI, но она показывает SPI1 как на своих обычных выводах PA5, PS6 и PA7, так и на альтернативных выводах E.глин. PB5

По умолчанию SPI1 на PA5,6,7

Примечание. NSS (выбор аппаратного устройства) очень глюка в оборудовании STM32, поэтому его не включено в ядро ​​Libmaple.

Я не уверен, почему вы возитесь с каналами DMA, вам нужно будет прочитать собственное справочное руководство STM на 1000+ страниц, чтобы получить полную информацию о каналах DMA

http: // www.ул.com/content/ccc/resource/ ... 171190.PDF

Рана
Чт 14 сентября 2017 г. 7:33 утра
Я нашел проект, который отвечает моим потребностям
Выходы данных проекта с использованием DMA SPI

  dma_setup_transfer
  dma_set_num_transfers
  dma_enable
  Spi_dmasend
   dma_attach_interrupt

Все эти функции питаются SpidMadev (DMA1), DMACHANLEN (DMA_CH3, DMA_CH5, DMA_CH2)

Когда я использую DMA_CH3, мой штифт TX - PA7
Когда я использую DMA_CH5, мой штифт TX - PB15
но
Когда я использую DMA_CH2 Обычно мой штифт TX - PB5 (я хочу этот конкретный штифт), но он не работает, потому что принадлежит DMA2


Моя проблема в том, что PA7 & PB15 занят чем -то другим в моем проекте



Внутри arduino_stm32/blob/master/STM32F1/библиотеки/spi/src/spi.CPP я вижу эту часть кода

// init вещи, специфичные для каждого устройства SPI
// Настройка часов немного взлома и должна быть улучшена позднее.
_Settings [0].spi_d = spi1;
_Settings [0].clockdivider = deform_baud_rate (_settings [0].spi_d, _settings [0].часы);
_Settings [0].spidmadev = dma1;
_Settings [0].spitxdmachannel = dma_ch3;
_Settings [0].spirxdmachannel = dma_ch2;
_Settings [1].spi_d = spi2;
_Settings [1].clockdivider = deform_baud_rate (_settings [1].spi_d, _settings [1].часы);
_Settings [1].spidmadev = dma1;
_Settings [1].spitxdmachannel = dma_ch5;
_Settings [1].spirxdmachannel = dma_ch4;
#if board_nr_spi >= 3
_Settings [2].spi_d = spi3;
_Settings [2].clockdivider = deform_baud_rate (_settings [2].spi_d, _settings [2].часы);
_Settings [2].spidmadev = dma2;
_Settings [2].spitxdmachannel = dma_ch2;
_Settings [2].spirxdmachannel = dma_ch1;
#endif



Я также нашел эти примеры DMA, что используя DMA2
http: // www.STM32duino.com/viewtopic.PHP ... 9&начало = 30

Rogerclark
Чт 14 сентября 2017 г. 7:46 утра
[Рана - Чт 14 сентября 2017 г. 7:33 утра] -
....


Я также нашел эти примеры DMA, что используя DMA2
http: // www.STM32duino.com/viewtopic.PHP ... 9&начало = 30
КСТАТИ.

Вы имеете в виду DMA1 -канал 2.

Рана
Чт 14 сентября 2017 г. 7:58 утра
http: // www.STM32duino.com/viewtopic.PHP ... t = 30#p5548
dma_init(DMA2); spi_tx_dma_enable(SPI3); dma_attach_interrupt(DMA2, DMA_CH2, DMAEvent);

Rogerclark
Чт 14 сентября 2017 г. 8:15 утра
Этот код относится к I2S, который не поддерживается на F103CX

victor_pv
Чт 14 сентября 2017 г. 12:57
Рана, я бы посоветовал вам потратить некоторое время на проверку справочного руководства, чтобы узнать, что доступно в MCU и как это работает. Серия STM32F103 включает в себя множество различных версий с некоторыми разницами в аппаратном обеспечении, а не только размером памяти.
Вам не нужно полностью читать каждую страницу каждого раздела, но, по крайней мере, разделы, которые связаны с периферийными устройствами, которые вы хотите использовать, поэтому вы их понимаете. Это сэкономит вам много времени, а не просто пытаться найти и тестовый код, который может работать или не работать в точной версии MCU, которую вы используете.
Контроллер и каналы DMA не имеют ничего общего с булавками. Они проводятся внутренне на разные периферийные устройства. Некоторые выводы периферийных устройств могут быть перепутаны на различные контакты GPIO в MCU, но когда вы перемещаете периферийное устройство, они все еще подключены к одному и тому же контроллеру DMA и каналу.
Конечно, все это объясняется гораздо лучше и более подробно в справочном руководстве, поэтому нет смысла пытаться объяснить всю тему в посте.

Рана
Пт 15 сентября 2017 г. 9:10 вечера
После большого чтения я наконец нашел решение
afio_cfg_debug_ports(AFIO_DEBUG_SW_ONLY); // release PB3 and PB5 afio_remap(AFIO_REMAP_SPI1); // remap SPI1 gpio_set_mode(GPIOB, 5, GPIO_AF_OUTPUT_PP);

victor_pv
Пт 15 сентября 2017 г. 11:03
[Рана - Пт 15 сентября 2017 г. 9:10 вечера] - У меня также есть в моем проекте ALED SSD1306
SDA PB7
SCL PB6
Вы можете проверить, можно ли перемещать i2c1 на другие контакты, а в противном случае попробуйте использовать i2c2, а не i2c1. Вам придется изменить объявление объекта провода, чтобы использовать второй порт вместо первого, он находится где -то в конце файлов CPP библиотеки проводов, либо в проводе.CPP или проволочная база.CPP. Я помню, потому что я использовал эту библиотеку на днях.

Рана
Сб 16 сентября 2017 г. 10:56 утра
О, спасибо.
Вы имеете в виду в конце провода.CPP есть эта линия Hardwire Wire (1, i2c_fast_mode) ;;
Я не могу изменить булавки OLEDS, он должен оставаться там
OLED SSD1306
SDA PB7
SCL PB6

Я не понимаю, почему I2C1 влияет на PB5

ZMEMW16
Сб 16 сентября 2017 г. 15:46
Посмотрите PB5 в таблице данных, таблица 4, P29 из 98 STM32F100XC STM32F100XD STM32F100XE 'Линия значения высокой плотности, 32-разрядная MCU на основе ARM на основе ARM с от 256 до 512 КБ, 16 таймеров, ADC, DAC & 11 коммунальных интерфейсов
DOC ID 15081 Rev 7
По умолчанию I2C1_SMBA
Google 'i2c smba'
Ранний результат Различия между i2c и smbus SRP