STM32 Webradio Player

Вассилис
Солнце 31 мая 2015 г., 17:51
Мне успешно удалось объединить VS1053B MP3 Декодер и ENC28J60 модуль Ethernet и воспроизводился веб -радиостанции!
Для тех, кто не знает, что похоже на мой новый проект STM32, пожалуйста, посетите мой веб -сайт, чтобы увидеть тот же проект, который я создал несколько месяцев назад, используя Arduino Pro Mini

http: // www.Serasidis.GR/Circuits/Arduin ... игрок.htm

Оставайтесь с нами для исходного кода !

Ахулл
Солнце 31 мая 2015 г. 9:11 вечера
Может ли STM32F103 управлять 128 кбит -аудио?

Mrburnette
Солнце 31 мая 2015 г., 22:33
Ахулл написал:Может ли STM32F103 управлять 128 кбит -аудио?

victor_pv
Пн июня 01, 2015, 2:33 утра
Vassilis, я посмотрел на библиотеку 1003, и я вижу, что она отправляет блоки данных на устройство.
STM32F1 имеет контроллер DMA, который может быть настроен на отправку блока данных из памяти на периферийное устройство SPI.
Если вы думаете, что ваши приложения могут извлечь из этого выгоду, я могу дать вам некоторую информацию о том, как это работает. Libmaple включает в себя ряд функций низкого уровня для настройки передачи DMA, и сверху мы включили некоторые функции в библиотеку STM SPI. Хотя они могут быть перенесены в отдельную библиотеку, но использование будет оставаться почти таким же.
Прямо сейчас блокируют функции передачи DMA в библиотеке SPI, потому что большинство приложений не ожидают, что передача SPI вернется до его завершения, и сразу же переключит линию CS. Но используя низкий уровень DMA в вашем коде, если вы знаете, что есть что -то еще, не связанное с SPI, которое вы хотите сделать (например, передачи USART, или IO с другим интерфейсом и т. Д.), Вы можете написать функцию DMA SPI, которая является Не блокировка, поэтому он запускает перенос в 1003 и выпускает процессор, чтобы сделать что -то другое.

Кроме того, не уверен, что RTO может иметь какую -либо пользу для вашего приложения, но я протестировал Freertos и COO, и они работают довольно хорошо. Это может помочь в планировании других материалов в процессоре, в то время как контроллер DMA использует периферийную передачу SPI A, например, обновление экрана или получение данных из сети.

РЕДАКТИРОВАТЬ: Похоже, ENC28J60 также использует SPI. Не уверен, что вы уже знали, но у STM32F1 есть 2 порта SPI, так что вы можете использовать второй порт для одного периферийного устройства, если собираетесь использовать оба одновременно. Таким образом, их легче держать на разных скоростях, и вы можете использовать оба одновременно, в то время как кто -то читает в буфере, тогда другой может писать из другого буфера.

Вассилис
Пн, 01 июня 2015 г., 7:55 утра
Виктор, спасибо, что помог мне!
Проблема, в которой есть Arduino Веб -радиоплеер Имеет то, что буфер оперативной памяти слишком мал, чтобы охватить любую сетевую задержку (время передачи данных от сервера ICECAST в игрока WeBradio).
Результатом является получение случайных коротких трещин в звуке. F103 имеет 20 КБ ОЗУ и функцию DMA. С этими двумя функциями я думаю, что могу преодолеть эту проблему (я надеюсь).

Я должен использоваться RAM_BUFFER в качестве стека FIFO (сначала, сначала).

Я знаю о втором SPI. Я буду изучать предыдущие библиотеки, которые используют DMA.

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

victor_pv
Пн июня 01, 2015, 14:31
Звучит как хорошая идея, вы можете сделать FIFO с DMA и оба порта SPI, так как вы можете самостоятельно установить адрес начала и длину.
Я думаю, что был один пример формы Leaflabs, показывающих буфер FIFO DMA с периферическим устройством, но я не помню ссылку.

Последняя библиотека SPI является хорошим примером того, как использовать DMA с периферийным устройством SPI. Вы можете в значительной степени скопировать функции DMA, и ISR, который запускает, когда передача DMA завершена, а затем изменить их в соответствии с вашими точными потребностями с буферами FIFO.

Rogerclark
Пн июня 01, 2015, 21:23
DMA имеет круглый буферный режим.

Это звучит наиболее применимо к тому, что вы делаете. Хотя я не уверен, как вы контролируете скорость.

Использование двух различных каналов SPI, вероятно, также поможет, но вам, вероятно, потребуется изменить Ethernet LIB, чтобы использовать SPI 2, поскольку он, вероятно, жестко закодирован. Ну, лучше сделать версию, где вы проходите в классе SPI (указатель).

victor_pv
Чт, 04 июня 2015, 14:06
Вассилис, интересно, есть ли там хорошая бесплатная библиотека декодирования MP3, и вы можете использовать STM с 2 ЦАП и модуль Ethernet.
Я просто читаю ранее о библиотеке STM, но не бесплатно, они говорят, что она использует около 20 MIP для декодирования. После декодированного вывода в ЦАП с DMA практически свободен от процессора. Как сказал Роджер. Для SPI, который может быть сложным, потому что он не останавливается, когда он достигает конца буфера, вам необходимо следить за этим и остановить его вручную, но для вывода ЦАП вы можете использовать таймер для подачи ЦАП при 22 кГц, 44 кГц... Какова бы ни была скорость, установите его в круговой середина буфера).

Вассилис
Чт, 04 июня 2015 г., 16:10
Есть две проблемы:
1. Нет бесплатной библиотеки декодеров MP3
2. STM32, имеющие ЦАП, слишком дороги (по крайней мере, на eBay) по сравнению с комбинацией STM32F103C8T + VS1053B

Я постараюсь подключить ENC28J60 и VS1053B, чтобы отделить порты SPI и использовать функцию DMA.
Я надеюсь, что это сработает ...

victor_pv
Чт, 04 июня 2015 г. 18:16
Я вижу в другой ветке, что у вас уже работал SPI2.

SPI2 использует 2 разных канала DMA, чем SPI1, поэтому вы должны иметь возможность перенести с DMA в оба одновременно.
Прямо сейчас функции DMA в библиотеке SPI жестко закодированы для каналов, используемых SPI1, но вы можете использовать их в качестве базы для ваших собственных функций для SPI2 и просто изменить код.

Помимо функции, настраивающей DMA, в библиотеке SPI вы можете найти функцию DMA ISR, которая запускает после завершения DMA DMA. Вам также понадобится второй из этого для второго порта.

Настройки DMA в Libmaple в некоторой степени объясняются в документах Leaglabs, если вы выполняете поиск в Google, но чтобы полностью понять, прочитайте раздел в таблице данных. Я думаю, что DMA - это та часть, которую мне нравится больше всего, это маленький макис.

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

РЕДАКТИРОВАТЬ: только что проверил и выглядит как устройства STM32F103RC/D/E имеют 2 ЦАП. Ахалл опубликовал недавно на дешевой плате RCT на eBay. Там и в Aliexpress у вас есть несколько вариантов примерно за 10 долларов, если вы когда -нибудь захотите получить один из них.

Вассилис
Чт 17 сентября 2015 г., 18:15
Плейер STM32 Webradio готов и играет очень хорошо потоки до 320 кбит / с без DMA или любого дополнительного буфера. Модуль Ethernet, который я использовал, - W5500 с внутренним 32 кбит -буфером ОЗУ.
В данный момент я могу показать вам только тот же веб-игрок, который у меня есть, но вместо использования STM32 я использовал плату Wizwiki-W7500 Cortex M0.
Для этого проекта я использовал онлайн -mbed.

Мой новый проект был опубликован на моем веб -сайте:
http: // www.Serasidis.GR/Circuits/W7500_ ... VS1053.PHP

Я тоже опубликую версию STM32F103 (на этот раз Arduino IDE), но, как вы уже знаете, разработке веб -страницы требует некоторое время.