{"id":436,"date":"2017-11-24T23:28:25","date_gmt":"2017-11-24T22:28:25","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=436"},"modified":"2019-08-19T22:06:50","modified_gmt":"2019-08-19T20:06:50","slug":"53-cs43l22_mp3-library-stm32f4","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/53-cs43l22_mp3-library-stm32f4\/","title":{"rendered":"53-CS43L22_MP3-Library (STM32F4)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/52-encoder-library-stm32f4\/\" title=\"52-Encoder-Library (STM32F4)\"><span class=\"meta-nav\">\u2190<\/span> 52-Encoder-Library (STM32F4)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/54-cs43l22_mp3_usb-library-stm32f4\/\" title=\"54-CS43L22_MP3_USB-Library (STM32F4)\">54-CS43L22_MP3_USB-Library (STM32F4) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>Mit dieser Library kann der Audio-DAC (CS43L22) vom Discovery-Board benutzt werden um MP3-Files aus dem Flash abzuspielen.<br \/>\n<em>(es gibt auch noch eine andere Lib um MP3 vom USB-Stick abzuspielen)<\/em><\/p>\n<p>Die MP3-Files m\u00fcssen mit einer Sampling-Frq von 44,1 kHz vorliegen.<\/p>\n<p>Mit meinem PC-Programm \u201c<a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=140#P03\">FileConverter<\/a>\u201d k\u00f6nnen beliebige MP3-Files in ein C-Format umgewandelt werden um dieses dann im Projekt hinzuf\u00fcgen zu k\u00f6nnen.<em><br \/>\n<\/em><\/p>\n<p>Mit dem Online-Converter \u201ccut-mp3.com\u201d k\u00f6nnen MP3-Files online geschnitten werden.<\/p>\n<p>Das MP3 kann entweder nur einmal \u201csingle\u201d oder endlos \u201cloop\u201d abgespielt werden. Es gibt noch Funktionen f\u00fcr Pause, Resume, Stop und Volume.<\/p>\n<p><span style=\"text-decoration: underline;\">Hinweis<\/span> : Der I2S-Clock und der notwendige PLL muss nicht im \u201csystem_stm32f4xx.c-File\u201d eingestellt werden, das wird von der Library erledigt.<\/p>\n<p><span style=\"text-decoration: underline;\">MP3-Decoder :<\/span><br \/>\nAls MP3-Decoder habe ich Helix-MP3 benutzt (der Link dazu steht im Quellfile)<\/p>\n<p><span style=\"text-decoration: underline;\">Fehlerkorrektur :<\/span><br \/>\nFalls beim umwandeln eines Frames ein Fehler erkannt wird, \u00fcberspringt die Software einfach 1000 Bytes\u2026das funktioniert f\u00fcr mich und ich habe auch im Netz keine einheitliche L\u00f6sung gefunden. Falls da jemand was \u201celeganteres\u201d hat\u2026bitte melden.<br \/>\nMit der Funktion \u201cUB_CS43L22_GetMP3Err\u201d kann der letzte Fehler ausgelesen werden.<\/p>\n<p><strong>Benutzte Pins :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">PB9  = SDA\r\nPB6  = SCL\r\nPA4  = WS\r\nPC7  = MCLK\r\nPC10 = SCK\r\nPC12 = SD\r\nPD4  = Reset<\/pre>\n<p><strong>Voraussetzungen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">Benutzte Module der CooCox-IDE : SPI, DMA, MISC\r\nBenutzte Librarys : STM32_UB_I2C1<\/pre>\n<p><strong>Enumerationen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">typedef enum {\r\n  MP3_OK = 0,       \/\/ kein Fehler\r\n  MP3_INIT_ERR,     \/\/ Fehler beim init\r\n  MP3_MALLOC_ERR,   \/\/ nicht genug RAM frei\r\n  MP3_SYNC_ERR,     \/\/ kein Sync gefunden\r\n  MP3_FRQ_ERR,      \/\/ Fehler bei Samplefrq\r\n  MP3_FRAME_ERR,    \/\/ sonstiger Frame fehler\r\n  MP3_IDATA_ERR,    \/\/ INDATA_UNDERFLOW\r\n  MP3_MDATA_ERR,    \/\/ MAINDATA_UNDERFLOW\r\n  MP3_DECODE_ERR    \/\/ sonstige Dekoder fehler\r\n}MP3_ERR_t;<\/pre>\n<p><strong>Funktionen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">ErrorStatus UB_CS43L22_InitMP3(void);                             \/\/ init vom CS43L22\r\nMP3_ERR_t UB_CS43L22_PlayMP3Single(UB_MP3 *mp3, uint8_t Volume);  \/\/ PLAY (einmal)\r\nMP3_ERR_t UB_CS43L22_PlayMP3Loop(UB_MP3 *mp3, uint8_t Volume);    \/\/ PLAY (Endlos)\r\nvoid UB_CS43L22_PauseMP3(void);                                   \/\/ PAUSE\r\nvoid UB_CS43L22_ResumeMP3(void);                                  \/\/ WEITER (nach Pause)\r\nvoid UB_CS43L22_StopMP3(void);                                    \/\/ STOP\r\nvoid UB_CS43L22_SetVolumeMP3(uint8_t Volume);                     \/\/ zum einstellen der Lautst\u00e4rke\r\nMP3_ERR_t UB_CS43L22_GetMP3Err(void);                             \/\/ zum auslesen der Fehlernummer<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 12.08.2013\r\n\/\/ Version  : 1.0\r\n\/\/ Autor    : UB\r\n\/\/ EMail    : mc-4u(@)t-online.de\r\n\/\/ Web      : www.mikrocontroller-4u.de\r\n\/\/ CPU      : STM32F4\r\n\/\/ IDE      : CooCox CoIDE 1.7.0\r\n\/\/ Module   : CMSIS_BOOT, M4_CMSIS_CORE\r\n\/\/ Funktion : Demo der MP3-Library\r\n\/\/ Hinweis  : Diese zwei Files muessen auf 8MHz stehen\r\n\/\/              \"cmsis_boot\/stm32f4xx.h\"\r\n\/\/              \"cmsis_boot\/system_stm32f4xx.c\"\r\n\/\/--------------------------------------------------------------\r\n\r\n#include \"main.h\"\r\n#include \"stm32_ub_led.h\"\r\n#include \"stm32_ub_cs43l22_mp3.h\"\r\n\r\nint main(void)\r\n{\r\n  ErrorStatus check;\r\n\r\n  SystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  \/\/ init der LEDs\r\n  UB_Led_Init();\r\n\r\n  \/\/ init vom CS43L22 (als MP3)\r\n  check=UB_CS43L22_InitMP3();\r\n  if(check==SUCCESS) {\r\n    UB_Led_On(LED_GREEN);\r\n    \/\/ abspielen der MP3 in einer Endlosloop\r\n    UB_CS43L22_PlayMP3Loop(&amp;skinny_mp3, 70);\r\n  }\r\n  else {\r\n    UB_Led_On(LED_RED);\r\n  }\r\n\r\n  while(1)\r\n  {\r\n\r\n  }\r\n}\r\n<\/pre>\n<p>Hier die Library zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/08\/ub_stm32f4_cs43l22_mp3_v101.zip\">ub_stm32f4_cs43l22_mp3_v101<\/a><\/p>\n<p>Hier der komplette CooCox-Projektordner zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/08\/Demo_53_MP3.zip\">Demo_53_MP3<\/a><\/p>\n<p>Hier das PC-Programm zum umwandeln von MP3-Files in C-Files\u00a0zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/09\/FileConverter_UB_v103.zip\">FileConverter_UB_v103<\/a><\/p>\n<h3 id=\"comments-title\">2 Antworten auf <em>53-CS43L22_MP3-Library (STM32F4)<\/em><\/h3>\n<ol class=\"commentlist\">\n<li id=\"li-comment-1268\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-1268\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/9d610652beedc80aae50b1cbc602a3ef?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\"><a class=\"url\" href=\"http:\/\/www.kooltek.net\/\" rel=\"external nofollow\">Tobias<\/a><\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">14. Januar 2014 um 12:05<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo,<br \/>\nhabe gerade den Code mal ausprobiert, respektive in mein eigenes Projekt integriert. Eine Hardware zum Testen habe ich zwar noch grade nicht zur Hand, aber es compiliert schon mal (die wenigen Warnungen, die ausgegeben werden, stammen vom Helix selber, das habe ich korrigiert) und ich denke es wird laufen. Danke f\u00fcr den Code!<\/p>\n<p>was mir allerdings auff\u00e4llt: der gesamte Code basiert auf Fixpoint Arithmetik. Ich frage mich, ob man da noch etwas mehr Performance rausholen k\u00f6nnte, indem man Floating Point verwendet und die FPU des CM4 zum Einsatz bringt? schliesslich ist die doch f\u00fcr solche Berechnungen da <img decoding=\"async\" class=\"wp-smiley\" src=\"wp-includes\/images\/smilies\/icon_wink.gif\" alt=\";-)\" \/> Ausserdem k\u00f6nnte man vermutlich viele interne Berechnungen des Helix an den CM4 anpassen, es gibt ja da sehr spezialisierte Instruktionen z.B. f\u00fcr MAC usw.<\/p>\n<p>Hast du da eine Idee dazu?<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1269\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-1269\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">14. Januar 2014 um 19:15<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>nein, da hab ich mich noch nicht mit besch\u00e4ftigt. Aber Helix gibt es auch als \u201cfloating point decoder\u201d schau mal bei deren Webseite vorbei.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Mit dieser Library kann der Audio-DAC (CS43L22) vom Discovery-Board benutzt werden um MP3-Files aus dem Flash abzuspielen. (es gibt auch noch eine andere Lib um MP3 vom USB-Stick abzuspielen) Die MP3-Files m\u00fcssen mit einer Sampling-Frq von 44,1 kHz vorliegen. Mit &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/53-cs43l22_mp3-library-stm32f4\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":53,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[128],"tags":[193,9,201,7],"class_list":["post-436","page","type-page","status-publish","hentry","category-stm32f4","tag-cs43l22","tag-library","tag-mp3","tag-stm32f4"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/436","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/comments?post=436"}],"version-history":[{"count":4,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/436\/revisions"}],"predecessor-version":[{"id":2619,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/436\/revisions\/2619"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/144"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/media?parent=436"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/categories?post=436"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/tags?post=436"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}