Hallo, hat jemand Erfahrung mit dem Audio DAC (CS43L22) auf dem STM32F4 Discovery-Board? Es gibt dazu zwei Dateien unter STM32F4-Discovery_FW_V1.1.0\Utilities\STM32F4-Discovery stm32f4_discovery_audio_codec *.h und *.c Leider bekomme ich die "Lib" nicht richtig zum Laufen. Hat jemand vllt. ein Beispiel für mich? Die Bsp. von ST funktionieren irgendwie anders. Moritz
STM32F4-Discovery_FW_V1.1.0\Project\Audio_playback_and_record Da findest du alles was du brauchst.
Hallo, ja das Beispiel kenne ich aber da werden die EVAL_AUDIO Funktionen nicht direkt verwendet. Ich poste einfach mal meinen ersten Versuch vllt. findet ja jemand den Fehler.
1 | #include "stm32f4xx.h" |
2 | #include "stm32f4_discovery_audio_codec/stm32f4_discovery_audio_codec.h" |
3 | #include "audio_sample.h" |
4 | |
5 | |
6 | |
7 | int main(void) |
8 | {
|
9 | SystemInit(); |
10 | |
11 | EVAL_AUDIO_SetAudioInterface(AUDIO_INTERFACE_I2S); |
12 | EVAL_AUDIO_Init(OUTPUT_DEVICE_HEADPHONE, 50, 32000); |
13 | |
14 | EVAL_AUDIO_Play((uint16_t*)AUDIO_SAMPLE, sizeof(AUDIO_SAMPLE)); |
15 | EVAL_AUDIO_PauseResume(AUDIO_RESUME); |
16 | |
17 | while(1) |
18 | {
|
19 | }
|
20 | |
21 | return 1; |
22 | }
|
23 | |
24 | uint16_t EVAL_AUDIO_GetSampleCallBack(void) |
25 | {
|
26 | return 1; |
27 | }
|
28 | |
29 | void EVAL_AUDIO_TransferComplete_CallBack(uint32_t pBuffer, uint32_t Size) |
30 | {
|
31 | }
|
32 | |
33 | void EVAL_AUDIO_HalfTransfer_CallBack(uint32_t pBuffer, uint32_t Size) |
34 | {
|
35 | }
|
36 | |
37 | void EVAL_AUDIO_Error_CallBack(void* pData) |
38 | {
|
39 | while(1); |
40 | }
|
41 | |
42 | uint32_t Codec_TIMEOUT_UserCallback(void) |
43 | {
|
44 | while(1); |
45 | return 1; |
46 | }
|
Hallo noch einmal, muss die I2S Clock noch irgentwie eingestellt werden? Moritz
>muss die I2S Clock noch irgentwie eingestellt werden?
Ja. Das wird hier gemacht:
STM32F4-Discovery_FW_V1.1.0\Project\Audio_playback_and_record\src\system
_stm32f4xx.c
Hallo, vielen Dank! Das hab ich übersehen. Funktioniert trotzdem noch nicht. Moritz
Hallo, jetzt funktioniert es! Ich poste einfach mal den Code. Moritz PS: Sorry das im Anhang ist beides das gleiche!
Ich bekomme bei deinem Beispiel keine Audioausgabe. Warum hat es denn bei dir zum Schluss funktioniert? Thomas
Bei mir funktioniert das letzte obige Projekt: 3 Sekunden Musik, die sich ständig wiederholen. Ich habe noch nicht tief in den Code reingeschaut - aber ist das so ok?
Ich habe CoIde 1.62 und gcc 4.6 2012q4 benutzt. Hast du eventuell ältere Versionen?
Ich habe verwendet: CooCox CoIDE Version: 1.5.0 Build id: 20120720-1757 GNU-Compiler: arm-none-eabi-gcc-4_6
Program Size: text data bss dec hex filename 1014808 68 2196 1017072 f84f0 AudioPlayer1.elf BUILD SUCCESSFUL Total time: 22 seconds
Könntest du mir den Compiler und Linkeraufruf auch noch posten? Vielleicht gibt es da ja noch ein Problem. Ich habe meine Ausgabe jetzt mit dem q2 mal angehängt.
Vielen Dank. Das sieht alles sehr gleich aus. Die Optimierungsstufe hatte ich noch verändert. Das hat aber auch nichts gebracht.
Anbei mal meine (bin Quicktest) erzeugten Files. Vielleicht helfen sie dir weiter.
Dein File läuft. Dann fällt die Hardware als Fehlerquelle aus.
Bin gerade auf diesen thread gestoßen da ich dasselbe Problem habe. Hardwarefehler kann ich ausschließen da das Audio-Demo der STM32 Firmware den Kopfhörer zum dudeln bringt. Nur mein eigener Code nicht. Bei einer kurzen drübersicht sind mir an meinem Code keine weiteren Fehler aufgefallen, aber ich werd es zuhause (hab die HW gerade nicht zur Hand) mal genauer unter die Lupe nehmen was bei mir anders ist. Aber schön das ich nicht der einzige bin. Dachte schon ich bin zu doof die mundgerechten API-Funktionen zu nutzen bzw vom Demo her zu portieren um was eigenes draus zu machen. Bei Fragen melde ich mich. Danke schonmal
Irgendwie schein ich zu doof zu sein ... Das kurze Progrämmchen von Moritz funktioniert ja, und spielt das Sample auch ab. Kein Problem. Wenn ich aber einen RAM-Buffer (den ich mit ner Wellenform initialisiere) abspiele, kommt nur noch Rauschen. Ich habe mir den Quellcode auch schon vom MP3-Player für das Discovery, und kann da auch keine wirklichen Fehler entdecken. Auch die Sourcen der Library geben nicht viel Auschluß darüber ob bzw was man bei EVAL_AUDIO_Play und deren Parameter beachten muß. Irgendwie steh ich aufm Schlauch .... Angehängt hab ich mal die main.c, der Rest ist wie bei AudioPlayer1.zip Edit : Ich bin mal von einem Stereo-Signal ausgegangen. Aber egal was bzw wie ich mache, immer nur Rauschen.
Niemand ne Idee ? Also das vorgegebene Wave-File zu ändern ist kein Thema. Aber Ausgabe aus dem RAM klappt immer noch nicht. Ich versteh einfach nicht warum das nicht funktioniert.
>Aber Ausgabe aus dem RAM klappt immer noch nicht. >Ich versteh einfach nicht warum das >nicht funktioniert. EVAL_AUDIO_Play(); macht einen Fehler wenn weniger als 0xFFFF Samples gespielt werden sollen. Es werden dann mehr Samples irgendwo aus dem Speicher abgespielt (das Rauschen). Nimm mal den Anhang. Dann kannst du dir deinen scheusslichen Ton anhören;)
@holger Ey, sach nix gegen meinen (fast) perfekten 440Hz Kammer-Säger-Test-Ton. Sons gibbet Ärger :D Erstmal Danke. Da hätte ich ja lange probieren können :( Werds gleich mal testen. In dem Zusammenhang vllt nochmal eben ne kurze Frage. Mir ist aufgefallen das der am Ende des Wave-Files "springt". Ich hab z.b. eine Loop erstellt. Aber am Ende hat der sich immer "verschluckt", bzw die Loop war nicht sauber und hat "gesprungen". Könnte das vllt auch mit einer 64KByte Grenze zu tun haben ?
>Könnte das vllt auch mit >einer 64KByte Grenze zu tun haben ? Ich denke auch da ist noch mehr faul. Habe diese Zeile Audio_MAL_Play((uint32_t)pBuffer, (uint32_t)(DMA_MAX(Size/4))); geändert in Audio_MAL_Play((uint32_t)pBuffer, (uint32_t)(DMA_MAX(Size))); und schon ist dein Ton nicht mehr ganz so scheusslich.
So, noch Änderung für DMA_MAX_SZE. 0xFFFF lässt sich ja ganz schlecht durch zwei teilen;)
>Genial: Planloses verändern von Sourcen.
An meinen Änderungen ist nichts planlos.
Genau hinsehen, Unsinn finden, ändern.
Ich bin auf der suche nach code wo ich die samples des Microphones auf dem CS43L22 direkt ausgeben kann ?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.