Высказывания и цитаты:

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

  • 17Янв

    Здравствуйте, друзья! Воспроизведение mp3 файлов используется давно и этим никого не удивить, но воспроизведение речевой информации во многих современных устройствах просто необходимо!

    Моя цель: при питании от зарядного устройства идет проигрывание файла на устройстве HY-Smart STM32. При питании от компьютера, намеренно сделано, чтобы устройство было флешкой.

    Вот как происходит работа mp3 проигрывателя:

    Микроконтроллер считывает mp3 файл блоками с micro SD карты, данные декодируются в Helix декодере (спасибо разработчикам за то, что бесплатно выложили исходные коды). Декодированные данные поступают на микросхему аудио кодека c с частотой дискретизации mp3 файла в виде 16 битных чисел, и на выходе получается звук. Частота дискретизации, моно-стерео режим и другие данные хранятся в самом mp3 файле.
    Теперь подробнее о моем проекте: микроконтроллер считывает данные с micro SD без использования DMA через прерывания (DMA бы очень ускорили процесс поблочной передачи, но скорости такой вполне хватает). Я использовал программу CubeMX, который сгенерировал код с библиотекой HAL 2016 года, а на тот момент в ней не был реализован обмен с micro SD посредством DMA. Эта возможность появилась c марта 2017 года при генерации проекта. Если микроконтроллер в данный момент подключен к USB порту компьютера, то он распознается как Mass Storage (USB флешка) и вот здесь скорость передачи режима Full Speed 1,5 Мегабайта (12 Мегабит) в секунду не достигается именно поэтому. Сам микроконтроллер не поддерживает режим USB 2.0 (HS), только USB 1.1 (FS).

    Проверка – сконфигурировано ли наше устройство выполняется так:
    if (hUsbDeviceFS.dev_state == USBD_STATE_CONFIGURED) {AUDIO_Playback_Stop(); }

    Если микроконтроллер подключен к блоку питания (зарядному устройству), то наш проигрыватель не может быть сконфигурирован как USB устройство, и начинается процесс инициализации периферии и воспроизведения файла. Эта процедура работает надежно, но я не знаю, куда воткнуть данную проверку, так как процесс воспроизведения файла иногда мешает самому обмену при подключении к компьютеру — но это всё реализуемо.

    Весь процесс проигрывания происходит в функции

    PlayAudioFile( &mp3FileObject ,»0:/Music/test.mp3″ );

    Здесь микроконтроллер Stm32F103VCT6 настраивает аудио кодек WM8731 через шину I2C (I2C реализован программно, не аппаратный), через шину I2S посылает звуковые данные из памяти в периферию посредством DMA. Сам аудио кодек это условно цифро-аналоговый преобразователь.
    В принципе, можно было обойтись без внешнего аудио кодека, но разрядность собственного ЦАП (DAC) у микроконтроллера 12 бит и часть данных была бы потеряна.

    Как только данные, передаваемые по DMA из памяти микроконтроллера, закончились в нижней половине буфера (Half Transmit) или в верхней (Transmit Complete), происходит прерывание, в котором выставляется соответствующий флаг (HT) или (TC), и в основном коде вызывается подпрограмма наполнения части буфера новой порцией данных. В то время, как из другой части буфера происходит передача данных на аудио кодек для непрерывного воспроизведения музыки. Так происходит до тех пор, пока не будет достигнут конец файла.
    Полный архив проекта для Keil 5 c исходными кодами скачать здесь mp3_smart.zip.
    Электрическая схема платы HY-Smart STM32 прилагается, дисплей можно убрать, это не отразится на работе устройства. Описание WM8731 здесь.

    Проект я делал на основе другого проекта MP3Player(Helix), который был на диске с платой hy-smart stm32.
    Китайцы – молодцы, очень впечатлило!!! Их проект имеет красивое графическое оформление, но сделан на UCOS OS (Free RTOS более популярна сейчас) и на устаревшей библиотеке StdPeriph (сейчас библиотека HAL считается современной). Для его работы файл *.bin надо скопировать в корень micro SD. При включении запустится калибровка touchscreen, а затем сам плеер.

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

Ваш ответ

Внимание: Модератор оставляет за собой право редактировать или удалять комментарии.

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: