Dieses Projekt macht aus dem STM32F4-Discovery-Board ein USB MP3-Player.
Die MP3 Files müssen alle in einem Ordner auf dem USB-Stick gespeichert sein.
(In der Demo in “Root”, aber im H-File kann auch ein Ordnername angegeben werden)
Nach dem einschalten und dem einstecken des USB-Sticks am Discovery-Board werden automatisch alle MP3 Files hintereinander abgespielt.
Durch drücken vom User-Button kann zum nächsten MP3 gesprungen werden.
Hier der komplette CooCox-Projektordner zum download :
Hier ein MP3-File zum download :
Guten Tag,
ich komme aus der Tschechischen Republik also entschuldigen Sie meine schreckliche Deutsch, bitte. Ich habe diesen Projekt mit STM32F4 Discovery versuchen aber es arbeitet nicht. Build und debugging ist fertig ohne die Probleme, aber es spielt die mp3s nicht. Gibt es etwas, dass ich zuerst mit der Code machen muss? Oder gibt es ein spezielles Format fur die mp3 Namen? Danke schon.
Mit herzlichen Grussen Martin Krupicka
die MP3s müssen direkt im “Root” vom Stick liegen…also nicht in einem Unterordner. Die Namen sollten 8.3 Format sein also z.B. “Song1.mp3″. Das Format der MP3s muss 44,1kHz, Stereo sein !!
Hinweis : im Demo-53 : http://mikrocontroller.bplaced.net/wordpress/?page_id=436 ist ein Demo-MP3 dabei…das kann mit meinem Fileconverter von “C” in “MP3″ zurückgewandelt werden…das läuft zu 100%.
Guten Tag,
bin stm32f4Discovery Einsteiger, und wollte dieses Projekt probieren… Leider funktioniert es nicht! Die mp3′s sind genau so vorhanden wie du sie beschrieben hast (Stereo, 44,1kHz …). Beim kompilieren gab es auch keine Fehler! Nur beim anschließen des USB Stick’s hört man bei meinen angeschlossenen Kopfhörern nichts! In welchen Format muss der USB Stick formatiert werden? Was kann sonst noch falsch sein?
Danke Simon
probier erst mal ein anderes Projekt aus : Demo-32:
http://mikrocontroller.bplaced.net/wordpress/?page_id=383
damit kannst du die Hardware erstmal prinzipiell testen.
Wenn alles funktioniert, leuchtet da die grüne LED und auf dem Stick wird eine Text-Datei mit ein paar Texten angelegt die du am PC überprüfen kannst. Melde dich nochmal ob das geht.
Hallo,
einmal Danke für die schnelle Antwort!
Soweit würde alles funktionieren! Es leuchtet die Grüne LED und es wird eine Text Datei erstellt mit folgendem Inhalt:
“Test der WriteString-Funktion
hier Zeile zwei
ENDE”
Kann sein, dass es mit der Größe (ca. 9MB pro Lied) der Audio Datei zusammenhängt? Oder mit der Bitrate (320kbit/s)?
Danke Simon
bin mir nicht sicher woran das liegt, ich hab hier jetzt ein MP3 hochgeladen das zu 100% laufen muss. Vlt erkennst du am vergleich einen Unterschied.
Hallo,
Danke für deine Hilfe! Mit dem Mp3 hat es sofort funktioniert! Ich habe mit meinen Mp3s noch ein bisschen herumexperimentiert und konvertiert und auch zum laufen bekommen!
Danke
Simon
Hi ad,
I’m trying to convert your project to keil, but i doesn’t work.
Do you have a keil verion of this project ?
Phú.
no, sorry.
thanks for the code!
Hi,
How can I make this work on stm32f429I discovery? There is not a plug like in stm32f4 discovery board. How can I configure pins for that? I’d be glad if you could help me.
Regards
the easiest way is … buy a STM32F407-Disco Board
you need some kind of hardware to connect your headphone and to create and filter the sound. I am not sure if the I2S pins free to add an external CS43L22. You can’t use the two DACs for the output because only one is free. Two PWM-Channels are possible but here you need a hardware filter too. So…keep it simple and spent 10 bucks for a ready solution.
Hallo, habe probiert die Libs für das LCD Display SSD1289, den Touchcontroller ADS7834, LCD_Font, LCD_Graphic in dieses Projekt einzufügen. Funktioniert auch recht gut, bis auf den Touchscreen, der einfach nicht laufen will!
Meine main zum testen des Touchscreens:
SystemInit();
UB_USB_MSC_HOST_Init();
UB_MP3Player_Init();
UB_LCD_Init(); // Init vom LCD
UB_Touch_Init();
UB_LCD_SetMode(LANDSCAPE);
UB_LCD_FillScreen(RGB_COL_BLUE);
while(1)
{
if(Touch_Data.status==TOUCH_PRESSED)
{
UB_LCD_SetCursor2Draw(Touch_Data.pos.xp,Touch_Data.pos.yp);
LCD_RAM=RGB_COL_RED;
}
}
An was kann es liegen?
Gruß
was liefert den “UB_Touch_Init” für einen Rückgabewert ? prüfe nochmal alle 5 Leitungen vom Touch.
Versuch zuerst mal das Demo_09 zum laufen zu bekommen (da ist nur der Touch und das Display drinn)
In diesem Teil der Init gibt es den Fehler, also die werte stimmen nicht überein und die if wird übersprungen!
// Test ob Messung erfolgreich
if((Touch_Kal.raw.xp<=0x0FFF) && (Touch_Kal.raw.yp<=0x0FFF)) {
ret_wert=SUCCESS;
// Init vom Timer
P_Touch_InitTIM();
// Init vom Interrupt
P_Touch_InitNVIC();
}
Bei der Demo 09 passt alles!
vlt sind irgenwelche Pins vom Touch durch das restliche Programm doppelt belegt. Da musst du wohl Fehlersuchen an der Library liegt es nicht.
Ja PD4 hängt am LCD Display RD und am Reset bim USB host. Kann es daran liegen, auch wenn es nicht direkt etwas mit dem Touch zu tun hat?
this’s awesome. thank u so so much
Hello there,
Thank for your code
It work fine. But can u tell me how can this project play mp3 file?
I thought it uses DAC to convert from Digital-to-Analogue but i dont find this function?
sound output is the 3,5mm Mini-Jack (CN4) connected to sound-dac CS43L22.
In the project the lo-level library “cs43l22_mp3.c” is used to play the sound.
thanks for your answer i can ask one more question Im just a beginer in stm32. i dont find the function which turn on DAC. Can u tell me? thank u again
Thanks for your code. I have one question. in file stm32_ub_mp3Player.c line 100 why delay must be bigger than 10000? if users click user button when delay<=10000 it wont play next song? can u tell me? Im just very beginer
thats a software debounce function. you can use a smaller number but at some point you skip songs because of the bouncing.
@Hop, please use the debugger to step to the init process.
DAC setup is in “EVAL_AUDIO_Init”
Hi,
wie wäre es mit einer Lib für 433 Mhz ASK Module? Ich überlege schon die RadioHead als Grundlage zu nehmen. Und dann noch ein Tip: Die Libs wären unverändert verwendbar, wenn die Pins, Timer, SPI Nummer usw. durch #define überschrieben werden könnten und nicht im Sourcecode liegen würden.
#ifndef LCD_PORT
#define LCD_PORT GPIOD
#endif
Oder so
solch ein Modul habe ich nicht und blind programmieren kann ich noch nicht.