STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18776
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

VladislavS писал(а):Reflector давал ссылку
да прочитал я...

что-то мне не нравится этот геморрой... раньше ведь в Atollic True Studio эта плата отлаживалась! как обычно, сломали, что работает, и делай, что хош. придется покупать сторонний отладчик... :(

Добавлено after 2 minutes 51 second:
может кто-нибудь дать ссылку на Али с отладчиком, который сразу заработает, без всяких апгрейдов и т.п.? купил, включил, работает! есть такое вообще?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Второй отладчик полюбому нужен, чтобы первый "починять". Но лучше сразу Nucleo с интересуемым контроллером. Так и второй отладчик будет, и более интересный контроллер.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18776
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

ну ссылку дайте на готовое! я же все равно сам не смогу выбрать, поскольку слишком не в теме
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4349565#p4349565"]DMAMUX не забудь.[/uquote]
А зачем он нужен? Вот я читать начал было, думаю: о, как классно, это ж я одновременно могу задействовать вообще всю периферию по DMA. И вдруг такой облом:
1.Set and configure completely the DMA channel y, except enabling the channel y.
Ну и нафиг этот MUX, если я одновременно не смогу пользоваться DMA на периферии, завязанной на один и тот же канал? Бред какой-то.

Вообще никаких примеров в интернете, как правильно это использовать, не нашел. А в мануале прямо так "понятно" написали…
Последний раз редактировалось Eddy_Em Пт янв 06, 2023 23:23:19, всего редактировалось 1 раз.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="ARV",url="/forum/viewtopic.php?p=4349610#p4349610"]ну ссылку дайте на готовое! я же все равно сам не смогу выбрать, поскольку слишком не в теме[/uquote]На али в поиске NUCLEO-F072RB. Там по цене/доставке выбрать.

Добавлено after 2 minutes 28 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349611#p4349611"]А зачем он нужен?[/uquote]В новых контроллерах DMA-каналы не привязаны к периферии. Можно/нужно любой канал скоммутировать на нужную периферию с помощью DMAMUX.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Уж если ему нужна дешевая девборда на F072, то лучше купить отдельно камушек на али, да впаять вместо F103 в "пилюлю", не забыв выпаять жестко прифигаченную подтяжку USB DP.
Кстати, сами "пилюли" я тоже модернизирую: убираю эту подтяжку (там еще и вместо 1к5 пихают 10к) и припаиваю 1к5 поверх контактов гребенки между PA15 и PA12.

Добавлено after 1 minute 25 seconds:
В новых контроллерах DMA-каналы не привязаны к периферии.
Ну, возможно, в каких-то и не привязаны, а у этого прибиты гвоздями!
Да и все равно, даже у DMAMUX каналов слишком мало. Я неоднократно натыкался на нехватку каналов DMA при разработке всякой всячины. Их должно быть хотя бы 128!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349611#p4349611"]Вообще никаких примеров в интернете, как правильно это использовать, не нашел.[/uquote]Да какие там примеры, в один регистр записать номер периферии из таблицы.

Добавлено after 5 minutes 57 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349617#p4349617"]Ну, возможно, в каких-то и не привязаны, а у этого прибиты гвоздями![/uquote]Мы точно один и тот же RM читаем? :) В твоём контроллере 7 DMA-каналов. Любой из них на любую периферию можно подключить.

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349617#p4349617"]Да и все равно, даже у DMAMUX каналов слишком мало. Я неоднократно натыкался на нехватку каналов DMA при разработке всякой всячины. Их должно быть хотя бы 128![/uquote]Мне таблеток от жадности, да побольше, побольше!
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4349614#p4349614"]На али в поиске NUCLEO-F072RB.[/uquote]
Только зачем сейчас брать на F0, если за те же деньги можно взять NUCLEO-G071RB, а еще лучше доплатить и взять NUCLEO-G0B1RE. Или STM32G0B1CBT6/STM32G0B1RCT6 отдельно... Если конечно цель не просто поиграться и в стол положить, тогда без разницы.
Последний раз редактировалось Reflector Пт янв 06, 2023 23:41:13, всего редактировалось 1 раз.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

G071 без USB, а G0B1 дороже. Просьбу чтобы подешевле было не забываем. А так то да, G0B1 свежачок, с таким не стыдно в калашный ряд :)
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

Дешевле всего будет платку на G071 брать, или даже проще, как у Эдди. Это если и сами мк по отдельности потом дешевые нужны, иначе и Black Pill на F401 дешевле может выйти.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Дешевле всего у него уже вообще есть, но...
СпойлерА вот чтобы совсем не скучно было. Можно пропустить Cortex-M и с RISC-V развлечься. USB_FS, USB_HS, USB_OTG, Ethernet 10М/100М/1G на борту. Цена символическая. Язык перспективный заодно подучить можно :)
Изображение
RISC-V_.jpg
(188.06 КБ) 127 скачиваний
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4349619#p4349619"]Мне таблеток от жадности, да побольше, побольше![/uquote]
Ну, реально: несчастных 7 каналов DMA — это вообще ни о чем для такой мощи!
А уж когда смотрю на 100-ногие МК, так вообще не понимаю, какого хрена ST делают. Вот, хочется мне, скажем, четыре уарта, два SPI, два I2C и штук 7 таймеров повесить на DMA. А фиг вам! При том, что оперативы там — просто немерено (я вообще не понимаю, что можно делать аж с 40кБ - разве что мультики показывать). Вот, чем дрючить камень прерываниями, лучше б завезли побольше каналов DMA.
А еще не понимаю, какого черта у USB нет DMA. Хочу, скажем, пару килобайт передать - и приходится в прерывании очередные 64 байта отправлять... А то натравил бы DMA, да нехай оно само.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349617#p4349617"]припаиваю 1к5 поверх контактов гребенки между PA15 и PA12.[/uquote]
Зачем? Реконнектить USB можно и с обычным резистором на питание. Я сам не так давно разобрался как это делается, оказалось надо просто отключить порты от USB на время реконнекта.
я вообще не понимаю, что можно делать аж с 40кБ - разве что мультики показывать
Например, подгружать код с внешних носителей. Давно хочу с подобным поиграться...
Друг Кота
Аватара пользователя
Сообщения: 25498
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349659#p4349659"]Ну, реально: несчастных 7 каналов DMA — это вообще ни о чем для такой мощи![/uquote]
Кто мешает взять чип с двумя контроллерами ДМА по 8 стримов на каждом (итого 16)?
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349659#p4349659"]А уж когда смотрю на 100-ногие МК, так вообще не понимаю, какого хрена ST делают. Вот, хочется мне, скажем, четыре уарта, два SPI, два I2C и штук 7 таймеров повесить на DMA. А фиг вам![/uquote]
Какая связь у числа ног и площади кристалла? Если у чипа 100 ног, то из этого не следует, что это мощный МК. ДМА является весьма прожорливым модулем в топологии чипа, ибо он требует кидать из конца в конец топологии сигнальные линии и увеличивать сигнальную длину и топологический размер мультиплексоров подключенных к матрице шин. Кроме того, для задач с высокой плотностью транзакций ДМА блокирует исполнение кода в части доступа к ОЗУ.
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349659#p4349659"]При том, что оперативы там — просто немерено (я вообще не понимаю, что можно делать аж с 40кБ - разве что мультики показывать).[/uquote] Много ОЗУ сжирает вывод на экраны высокого разрешения (типа телематических терминалов), много ОЗУ сжирает обработка сигналов. Много ОЗУ сжирают логгеры - есть куча задач автономного накопления данных с последующим быстрым сбросом в коммуникации. Про исполнение из ОЗУ выше коллега уже упомянул...
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4349659#p4349659"]А еще не понимаю, какого черта у USB нет DMA. Хочу, скажем, пару килобайт передать - и приходится в прерывании очередные 64 байта отправлять... А то натравил бы DMA, да нехай оно само.[/uquote]
Вообще то любой модуль USB имеет выделенный персонально для него канал ДМА. И размер ОЗУ с которым ассоциирован этот ДМА определяется самим протоколом USB. Желание иметь конкретно для Эдика с Архыза автономный девайсный CDC канешна понять можно, но только правильным посонам на желание Эдика болт положить. У них в отношении USB совсем иные планы... А Эдик может свои хотелки либо реализовать на FPGA, либо заказать себе персональный чип с любой интересующей его архитектурой. Со 100%-ной предоплатой, канешна...
:music: :music: :music:
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

ARV писал(а):без всяких апгрейдов и т.п.?
Что-то вас совсем не пойму.
IAR не подходит, хотя V1 поддерживает.
Eclipse CubeIDE подходит, но V1 не поддерживает.
CoIDE тот же самый eclipse ему не подходит, хотя V1 поддерживает.

Хотя IAR по возможностям отладки куда лучше, поддерживает оба языка С и С++, но до eclipse IARу далеко, за-то работает из коробки без всяких танцев с бубном и прочей виртуальной лабуды, на поиграться хватит, а может и еще на что.
Это не хвост, это антенна
Сообщения: 1337
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

КРАМ писал(а):ДМА блокирует исполнение кода в части доступа к ОЗУ
Не всегда. Для этого делают несколько банков ОЗУ, причём к некоторым у DMA может не быть доступа. Тут уже нужно смотреть, в каком банке буфер какой периферии размещать.
Друг Кота
Аватара пользователя
Сообщения: 25498
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="tonyk",url="/forum/viewtopic.php?p=4349731#p4349731"]Не всегда. Для этого делают несколько банков ОЗУ[/uquote]
Это общеизвестно. Но привязка каналов ДМА к определенным сегментам, во-первых, есть только у самых старших МК, а во вторых частенько ограничивает возможности ее использования в конкретной задаче.
Еще в приснопамятных dsPIC33FJ для решения этой проблемы ДМА привязывали к фиксированной области памяти и делали эту область двухпортовой. Тоже решение.... :tea:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18776
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4349725#p4349725"]
ARV писал(а):без всяких апгрейдов и т.п.?
Что-то вас совсем не пойму.
IAR не подходит, хотя V1 поддерживает.
Eclipse CubeIDE подходит, но V1 не поддерживает.
CoIDE тот же самый eclipse ему не подходит, хотя V1 поддерживает.

Хотя IAR по возможностям отладки куда лучше, поддерживает оба языка С и С++, но до eclipse IARу далеко, за-то работает из коробки без всяких танцев с бубном и прочей виртуальной лабуды, на поиграться хватит, а может и еще на что.[/uquote]про CoIDE я ничего не говорил.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Dimon456",url="/forum/viewtopic.php?p=4349725#p4349725"]Что-то вас совсем не пойму.[/uquote]Всё просто. Если задача не сделать, а найти причину не делать - результат очевиден.
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Этот DMAMUX - просто жесть какая-то. Пробую отправлять через DMA. Настраиваю USART, DMA и DMAMUX:

Код: Выделить всё

void usart3_setup(){
    RCC->IOPENR |= RCC_IOPENR_GPIODEN; // enable PD
    RCC->AHBENR |= RCC_AHBENR_DMA1EN; // enable DMA1
    // set PD8 and PD9 as AF
    GPIOD->MODER = (GPIOD->MODER & ~(GPIO_MODER_MODE8 | GPIO_MODER_MODE9))
            | GPIO_MODER_MODER8_AF | GPIO_MODER_MODER9_AF;
    // AF0 for USART3 @ PD8/PD9
    GPIOD->AFR[1] = GPIOD->AFR[1] & ~(GPIO_AFRH_AFSEL8 | GPIO_AFRH_AFSEL9);
    // enable USART3 clocking
    RCC->APBENR1 |= RCC_APBENR1_USART3EN;
    // baudrate 115200
    USART3->BRR = 640000 / 1152;
    // eol character: '/n'
    USART3->CR2 = USART_CR2_ADD_VAL('\n');
    // charmatch interrupt, enable transmitter and receiver, enable usart
    USART3->CR1 = /*USART_CR1_CMIE |*/ USART_CR1_TE | USART_CR1_RE | USART_CR1_UE;
    // enable DMA transmission
    USART3->CR3 = USART_CR3_DMAT;
    // set up DMA channels: 2 - Tx, 3 - Rx
    // Tx channel: mem++, mem->periph, 8bit, compl.&err. irq
    DMA1_Channel2->CCR = DMA_CCR_MINC | DMA_CCR_DIR | DMA_CCR_TCIE | DMA_CCR_TEIE;
    DMA1_Channel2->CPAR = (uint32_t) &USART3->TDR; // peripherial address
    // set up DMAMUX channels: 55 - USART3_TX, 54 - USART3_RX
    DMAMUX1_Channel2->CCR = 55;
    DMAMUX1_RequestGenerator2->RGCR = DMAMUX_RGxCR_GE; // enable
    NVIC_EnableIRQ(USART3_4_IRQn);
    NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);
}
Далее у меня там где-то буфер заполняется, а потом отправляется:

Код: Выделить всё

void usart3_sendbuf(){
    if(!txrdy || txlen[tbufno] == 0) return;
    // set up DMA
    DMA1_Channel2->CMAR = (uint32_t)&tbuf[tbufno];
    DMA1_Channel2->CNDTR = txlen[tbufno];
    USART3->ICR |= USART_ICR_TCCF; // clear TC flag
    txrdy = 0;
    // activate DMA
    DMA1_Channel2->CCR |= DMA_CCR_EN;
    tbufno = !tbufno; // swap buffers
    txlen[tbufno] = 0;
}
Про очистку флага TC в мануале было.
Ну и прерывание DMA:

Код: Выделить всё

// ch2 - Tx, ch3 - Rx
void dma1_channel2_3_isr(){
    if(DMA1->ISR & (DMA_ISR_TCIF2 | DMA_ISR_TEIF2)){ // transfer complete or error
        DMA1->IFCR = DMA_IFCR_CTCIF2 | DMA_IFCR_CTEIF2; // clear flags
        txrdy = 1;
    }
}
И фигвам! Не пашет, собака!!! Я уж искал, где тактирование DMAMUX включить, но такого ключика не заметил. И таки как люди с этим работают?
Что интересно, в интернетах вообще не нашел никаких примеров кода - все быдлокодят на калокубе!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Ответить

Вернуться в «ARM»