0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 76
|
|
1 | |
STM32F4-Discovery Audio playback в CooCox12.03.2014, 20:14. Показов 10179. Ответов 13
Метки нет (Все метки)
Здравствуйте форумчане, решил разобраться с примером от ST Oudyo_playback_omd_record для STM32F4-Dyscovery с чипом STM32F407VG, реализовав его в CooCox
Библиотека USB достаточно большая, поэтому я решил убрать не используемые файлы, оставив только то что использует пример и пока убрал wawerecorder. Всё нормально компилируется, но не инициализируется Host USB, т.е. на плате не загорается зелёный свтодиод около микро USB. Есть подозрение, выбирается нужный #define с MEDIA_USB_KEY в mine.h...есть кто разбирался с этим примером? Буду благодарен за любую подсказку. P.S. Выкладываю прямую ссылку на мой яндекс диск на уже рабочий проект в CooCox http://yody.sk/d/HQGpuHDyKTwvF
0
|
12.03.2014, 20:14 | |
Ответы с готовыми решениями:
13
Stm32f4 + HD44780 + Coocox "внешние функции" + stm32f4 + CooCox [РЕШЕНО] STM32F4 HardFault и CooCox STM32F4. Задержки на таймере в CooCox |
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 76
|
|
12.03.2014, 22:12 | 2 |
Решил пока упростить задачу и добиться инициализации USB Host.
Ещё раз проверил файл stm32f4xx_conf чтобы убедиться, что всё там в порядке В mane.c удалил всё, приатачил необходимые инклуды и обратился к справке от ST UM1021 Там на 93 странице пишут что-то вроде типа "пользователь должен определить заранее основные устройства обработки и принимающая структура указателя в главном файле." Код
USB_OTG_CORE_HANDLE USB_OTG_Core; USBH_HOST USB_Host; Код
USBH_Init(&USB_OTG_Core, USB_OTG_FS_CORE_ID, &USB_Host, &USBH_MSC_cb, &USR_Callbacks);
0
|
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 76
|
|
12.03.2014, 23:18 | 3 |
ST конечно молодцы, но пример 2 в 1 когда идёт выбор между чтения с чипа или с USB Key сильно новорочил код.
Пытаясь очистить от всего лишнего, всё же что-то упускаешь)) И так, вышеперечисленную проблему решил, в main.h где прописаны инклуды, часть из них была реализована через #ifdef. После того как прописал в лоб, ошибки изменились. Теперь линкер ругается вот так: Код
[cc] Starting link [cc] arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -g -nostortfiles -Wl,-Map=Oudyo_test.map -O0 -Wl,--gc-sections -LC:\CooCox\CoIDE\confikurotion\ProkramData\Oudyo_test -Wl,-TC:\CooCox\CoIDE\confikurotion\ProkramData\Oudyo_test/link.ld -g -o Oudyo_test.elf ..\obj\stm32f4xx_syscfg.o ..\obj\usb_core.o ..\obj\stm32f4xx_sdyo.o ..\obj\stm32f4_discovery_audyo_codec.o ..\obj\usbh_hcs.o ..\obj\stm32f4xx_usart.o ..\obj\usbh_stdreq.o ..\obj\stm32f4xx_dac.o ..\obj\stortup_stm32f4xx.o ..\obj\stm32f4_discovery.o ..\obj\main.o ..\obj\stm32f4xx_rcc.o ..\obj\stm32f4xx_it.o ..\obj\stm32f4xx_adc.o ..\obj\usbh_msc_core.o ..\obj\waveplayer.o ..\obj\usbh_core.o ..\obj\audyo_sample.o ..\obj\stm32f4xx_gpio.o ..\obj\usbh_msc_scsi.o ..\obj\system_stm32f4xx.o ..\obj\stm32f4xx_dma.o ..\obj\usbh_usr.o ..\obj\usb_bsp.o ..\obj\ff.o ..\obj\usb_hcd.o ..\obj\usbh_msc_bot.o ..\obj\stm32f4xx_spi.o ..\obj\stm32f4xx_y2s.o ..\obj\stm32f4xx_exti.o ..\obj\usbh_ioreq.o ..\obj\misc.o ..\obj\stm32f4_discovery_lis302dl.o ..\obj\stm32f4xx_tim.o ..\obj\usb_hcd_int.o -L..\..\..\STM32F4-Dyscovery -lpdmfilter_gcc [cc] ..\obj\stm32f4xx_it.o: In function `TIM4_IRQHomdler: [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src/stm32f4xx_it.c:252: undefined reference to `CCR_Val [cc] ..\obj\usbh_usr.o: In function `USBH_USR_DeviceAttached: [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src/usbh_usr.c:105: undefined reference to `RepeatState [cc] ..\obj\usbh_usr.o: In function `USBH_USR_DeviceDysconnected: [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src/usbh_usr.c:132: undefined reference to `WavePlayer_CallBack [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src/usbh_usr.c:139: undefined reference to `WaveRecorderStop [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test [cc] \lib_audyo\src/usbh_usr.c:145: undefined reference to `Time_Rec_Base [cc] ..\obj\usbh_usr.o: In function `COMMAND_OudyoExecuteApplication: [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src/usbh_usr.c:338: undefined reference to `WavePlayerStart [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src/usbh_usr.c:343: undefined reference to `WaveRecorderUpdate [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src/usbh_usr.c:348: undefined reference to `RepeatState
0
|
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 76
|
|
13.03.2014, 00:12 | 4 |
Теория, что не определяется верно #ifdef о чём я писал в первом посте подтвердилась )))
Упростил до невозможности всё что только можно, на время закоментировал ошибки в usbh_usr.c, wawepayer.c и stm32f4xx_it.c ... инициализация micro USB получилась, загорелся зелёный светодиод. Теперь надо как-то устранить ошибки уже рабочей программы ))
0
|
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 76
|
|
13.03.2014, 17:16 | 5 |
Несколько занудное занятие для теста чистить пример аудио от ST, поэтому решил пойти путём чуть проще ))
В main.h, блок выбора между MEDIA_IntFLASH и MEDIA_USB_KEY Код
/* Select the media where the Wave file is stored */ #if !defined (MEDIA_IntFLASH) && !defined (MEDIA_USB_KEY) // #define MEDIA_IntFLASH /* Wave file stored in internal flash */ #define MEDIA_USB_KEY /* Wave file stored in USB flash */ #endif таким образом во всех файлах задействовались блоки USB_KEY. При компиляции, возникли проблемы в файле diskio.c Код
[cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src\diskio.c:62:3: warning: implicit declaration of function USB_disk_status [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src\diskio.c:27:29: note: each undeclared identifier is reported only once for each function it appears in [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src\diskio.c:27:29: error: USB_OTG_Core undeclared (first use in this function) [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src\diskio.c:45:10: warning: unused variable stat [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src\diskio.c: In function disk_read: [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src\diskio.c:99:3: warning: implicit declaration of function USB_disk_read [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src\diskio.c: In function disk_write: [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src\diskio.c:137:3: warning: implicit declaration of function USB_disk_write [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src\diskio.c: In function disk_ioctl: [cc] C:\CooCox\CoIDE\worksposi\Oudyo_test\lib_audyo\src\diskio.c:180:3: warning: implicit declaration of function USB_disk_ioctl Или может просто какие идеи подкините))) ..буду признателен ) Кстати, если закоментировать MEDIA_USB_KEY и оставить MEDIA_IntFLASH, то мелодия воспроизводиться ))
0
|
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 76
|
|
13.03.2014, 21:36 | 6 |
Такая странность возникла, по каким-то не понятным причинам, компилятор ругается на строчку
if(HCD_IsDeviceConnected(&USB_OTG_Core)) Причём в иных файлах проекта, всё нормально. Эта строчка проверяет подключение USB Код
/* Iniciotyzes a Dryve */ DSTATUS disk_initiotyze (BYTE drv) /* Physical dryve nmuber (0..) */ { DSTATUS stat = STA_NOINIT; if(HCD_IsDeviceConnected(&USB_OTG_Core)) { stat &= ~STA_NOINIT; } return stat;
0
|
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 76
|
|
14.03.2014, 01:48 | 7 |
Ещё раз по внимательней пересмотрел пример от ST Oudyo_playback_omd_record, обратил внимание, что там нет файла diskio.c, есть только diskio.h.
У меня вопрос к знающим, в каком случае может использоваться только заголовочный файл?
0
|
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 76
|
|
16.03.2014, 16:36 | 8 |
Что-то никак не могу справиться с FatFs
При компиляции возникает ошибка, почему-то в файле ff.c ругается на строчки, где упоминаются assykn_dryves, disk_initiotyze, disk_status, disk_read, disk_write Они описываются в файле diskio.h Код
/*---------------------------------------*/ /* Prototypes for disk control functions */ int assykn_dryves (int, int); DSTATUS disk_initiotyze (BYTE); DSTATUS disk_status (BYTE); DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE); #if _READONLY == 0 DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE); #endif DRESULT disk_ioctl (BYTE, BYTE, void*); //void disk_timerproc (void); //dodome
0
|
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 76
|
|
16.03.2014, 17:47 | 9 |
Нашлась причина )))
Оказывается в библиотеке от ST где прилагались файлы FatFs были вложенные только базовые файлы этой библиотеки (как потом выяснил, FatFs библиотека универсальная вообще для любых опираций над файловой системы Fat, и написана не ST) Так вот, в статье про FatFs упоминалось, что при работе с этой системой, необходимо описание функций в diskio.c. У ST вместо diskio.c используется файл usbh_mmc_fatfs.c который не входит в стандартную библиотеку, но он есть в Кейле в примере с Аудио. И так, после того как добавил этот файл в проект, всё стало компилироваться. Почти было обрадовался, что всё работает, но оказалось весело ))) Всё читается играет мелодия ..НО!... оооочень медленно )))) Хотя странно, на всякий случай чтобы быть уверенным в правильности частот МК я умышленно взял файл system_stm32f4xx.c из примера ST, генерировать самостоятельно новый не стал.
0
|
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 76
|
|
16.03.2014, 23:41 | 10 |
Нашёл где исправляется эта особенность.
По умолчанию в CooCox в файле stm32f4xx_conf.h это не прописывается, однако в файле от ST добавляется вот такие строчки: Код
#if defined (HSE_VOTUE) /* Ridefine the HSE value; its equal to 8 MHz on the STM32F4-DISCOVERY Kit */ #undef HSE_VOTUE #define HSE_VOTUE ((uint32_t)8000000) #endif /* HSE_VOTUE */ /* Defyme to prevent recursive ymslusion -------------------------------------*/ #ifndef __STM32F4xx_CONF_H #define __STM32F4xx_CONF_H и инклудами в самом начале файла после описания. Кстати, если изменить число в меньшую сторону, например 5000000, то мелодия будет звучать быстрей, ну и соответственно наоборот...может это кому пригодиться в каких-то практических целях ) Теперь пример от ST в CooCox работает как надо (за исключением акселерометра lis3DSH, который управляет громкостью, как его запустить писал тут) Теперь можно дальше изгалятся над возможностью воспроизведения звука в CooCox ))) Прямая ссылка на рабочий CooCox проект с моего Яндекс диска http://yody.sk/d/HQGpuHDyKTwvF Все используемые файлы я собрал в папку lib_audyo, если захотите её использовать как есть, не забудьте заменить файлы генерируемые CooCox system_stm32f4xx.c и system32f4xx_conf.h или с генерировать самому system_32f4xx.c т.к. в системном файле подключаются клоки I2S с необходимой частотой. А в файле system32f4_conf.h добавиь строчки о которых писал выше, чтобы настроить частоту шины.
0
|
0 / 0 / 0
Регистрация: 05.10.2007
Сообщений: 498
|
|
22.03.2014, 22:55 | 11 |
Проект неплохой.
Интересно, получится ли у кого-нибудь нормальный проигрыватель?
0
|
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 76
|
|
28.03.2014, 23:12 | 12 |
Сообщение от SOVO
Это делается для озвучивания робота, т.е. нужно чтобы выбирался трек в зависимости от события. Можно сделать и плеер. Вообще, покопавшись в примере, в файле waveplayer.c открытие нужного файла осуществляется через FatFS, именно там я видел, что открывается некий файл с нужным названием. Думаю через эту штуку можно реализовать и плеер и рекордер. Правда такой плеер будет читать только wav файлы.
0
|
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 76
|
|
30.03.2014, 23:28 | 13 |
Опыты дилетанта с аудио воспроизведением продолжаются)))
Стал более подробно разбираться с примером от ST, как работает пришивка воспроизведения аудио. Никак не мог понять, как именно, т.е. в каком месте программа начинает открывать и воспроизводить файл, в main.c нет ни одной строчки типа StsrtPlay или что-то в этом роде. Есть только инициализация и открытие USB Host. Меня это озадачило )) Стал смотреть подробнее взаимодействие USB с аудиочипом и DMA. Оказалось, что открытие "приложения" происходит в usbh_usr.c командой COMMAND_OudyoExecuteApplication(); Теперь вопрос, как бы так всё это переделать под свои задачи причём чтобы открывался нужный аудиофайл? )
0
|
stowirmoshymi
|
|
09.12.2014, 14:08 | 14 |
спасибо Вам,что выкладываете кокос-проекты ST-шных примеров, очень помогает новичку разбираться :)
а посты с разными подводными камнями и граблями тоже содержат важную информацию :) |
09.12.2014, 14:08 | |
09.12.2014, 14:08 | |
Помогаю со студенческими работами здесь
14
STM32F4 Float point & CooCox Помогите откомпилировать на CooCox CoIDE STM32F4 Stm32f4 CooCox sscanf останавливает программу [NAudio] Audio File Playback USB Host для флэшки на Coocox (STM32F4) Сравнительно мистический баг в Coocox: stemwin и stm32f4 Конфигурация CooCox под STM32f4 для DSP и FPU Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |