Рана
Ср 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.час>
Блю, синяя таблетка 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
Пожалуйста, проверьте справочное руководство для получения подробной информации. В основном у MCU нет периферийных устройств, которые использовали бы DMA2, поэтому я думаю, что для STM не имело смысла включать контроллер DMA только для M2M
Рана
Чт 14 сентября 2017 г. 6:36 утра
ОК, это имеет смысл
Я пытаюсь вывести данные с использованием DMA SPI, могу ли я изменить PIN -код для канала DMA для SPI1 DMA_CH3
Не PA7, потому что занят, но с PB5 или чем -то еще, есть ли другой способ сопоставить на другую булавку?
У нас есть 3 SPI Правильно?
Я пытаюсь вывести данные с использованием 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
Диаграмма показывает только 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
Выходы данных проекта с использованием 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 и каналу.
Конечно, все это объясняется гораздо лучше и более подробно в справочном руководстве, поэтому нет смысла пытаться объяснить всю тему в посте.
Вам не нужно полностью читать каждую страницу каждого раздела, но, по крайней мере, разделы, которые связаны с периферийными устройствами, которые вы хотите использовать, поэтому вы их понимаете. Это сэкономит вам много времени, а не просто пытаться найти и тестовый код, который может работать или не работать в точной версии 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Вы можете проверить, можно ли перемещать i2c1 на другие контакты, а в противном случае попробуйте использовать i2c2, а не i2c1. Вам придется изменить объявление объекта провода, чтобы использовать второй порт вместо первого, он находится где -то в конце файлов CPP библиотеки проводов, либо в проводе.CPP или проволочная база.CPP. Я помню, потому что я использовал эту библиотеку на днях.
SDA PB7
SCL PB6
Рана
Сб 16 сентября 2017 г. 10:56 утра
О, спасибо.
Вы имеете в виду в конце провода.CPP есть эта линия Hardwire Wire (1, i2c_fast_mode) ;;
Я не могу изменить булавки OLEDS, он должен оставаться там
OLED SSD1306
SDA PB7
SCL PB6
Я не понимаю, почему I2C1 влияет на PB5
Вы имеете в виду в конце провода.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
DOC ID 15081 Rev 7 По умолчанию I2C1_SMBA
Google 'i2c smba'
Ранний результат Различия между i2c и smbus SRP