{"id":227,"date":"2017-11-23T00:01:54","date_gmt":"2017-11-22T23:01:54","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=227"},"modified":"2023-03-04T23:38:05","modified_gmt":"2023-03-04T22:38:05","slug":"14-adc_dma-mode-stm32f4","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=227","title":{"rendered":"14-ADC_DMA-Mode (STM32F4)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=225\" title=\"13-FATFS_SDIO-Library (STM32F4)\"><span class=\"meta-nav\">\u2190<\/span> 13-FATFS_SDIO-Library (STM32F4)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=229\" title=\"15-SPI_LoLevel-Library (STM32F4)\">15-SPI_LoLevel-Library (STM32F4) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>-mit dieser Library kann der ADC per DMA zyklisch ausgelesen werden um die CPU last zu senken. Es k\u00f6nnen maximal 16 ADC-Kan\u00e4le pro AD-Wandler festgelegt werden.<\/p>\n<p>-die Einstellung erfolgt (wie in der ADC-Single-Conversation-Library) als Struktur im C-File. Dort \u00a0m\u00fcssen die ADC-Pins den Port-Pins zugeordnet werden.<\/p>\n<p>-es sind wieder zwei LIBs getrennt f\u00fcr ADC1 und ADC2. Die k\u00f6nnen aber auch gleichzeitig benutzt werden falls mehr als 16 ADC-Kan\u00e4le notwendig sind.<\/p>\n<p><strong>Beispielbild :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/03\/adc_dma.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-674\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/03\/adc_dma-179x300.jpg\" alt=\"adc_dma\" width=\"179\" height=\"300\" \/><\/a><\/p>\n<p>-im Beispiel werden nur 3 Kan\u00e4le benutzt um das Prinzip zu verdeutlichen.<\/p>\n<pre lang=\"c\" line=\"1\">PA3, PC4, PC5<\/pre>\n<p><strong>Voraussetzungen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">Benutzte Module der CooCox-IDE : GPIO, ADC, DMA\r\nBenutzte Librarys : keine<\/pre>\n<p><strong>Enumerationen (f\u00fcr ADC1) :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">typedef enum {\r\n  ADC_PA3 = 0,  \/\/ PA3\r\n  ADC_PC4 = 1,  \/\/ PC4\r\n  ADC_PC5 = 2   \/\/ PC5\r\n}ADC1d_NAME_t;<\/pre>\n<p><strong>Funktionen (f\u00fcr ADC1) :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">void UB_ADC1_DMA_Init(void);                       \/\/ zum initialisieren und starten\r\nuint16_t UB_ADC1_DMA_Read(ADC1d_NAME_t adc_name);  \/\/ zum auslesen eines ADC-Kanals<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 03.03.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 ADC-DMA-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_adc2_dma.h\"\r\n\r\nint main(void)\r\n{\r\n  uint16_t adc_wert;\r\n\r\n  SystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  UB_Led_Init(); \/\/ Init der LEDs\r\n  UB_ADC2_DMA_Init(); \/\/ Init vom ADC2 im DMA-Mode\r\n\r\n  while(1)\r\n  {\r\n    \/\/ ADC-Messwert auslesen und LED entsprechend schalten\r\n    adc_wert=UB_ADC2_DMA_Read(ADC_PA3);\r\n    if(adc_wert&lt;2048) UB_Led_On(LED_GREEN); else UB_Led_Off(LED_GREEN);\r\n\r\n    \/\/ ADC-Messwert auslesen und LED entsprechend schalten\r\n    adc_wert=UB_ADC2_DMA_Read(ADC_PC4);\r\n    if(adc_wert&lt;2048) UB_Led_On(LED_RED); else UB_Led_Off(LED_RED);\r\n\r\n    \/\/ ADC-Messwert auslesen und LED entsprechend schalten\r\n    adc_wert=UB_ADC2_DMA_Read(ADC_PC5);\r\n    if(adc_wert&lt;2048) UB_Led_On(LED_BLUE); else UB_Led_Off(LED_BLUE);\r\n  }\r\n}\r\n<\/pre>\n<p>Hier die Library zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/03\/ub_stm32f4_adc_dma_v101.zip\">ub_stm32f4_adc_dma_v101<\/a><\/p>\n<p>Hier der komplette CooCox-Projektordner zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/03\/Demo_14_ADC_DMA.zip\">Demo_14_ADC_DMA<\/a><\/p>\n<h3 id=\"comments-title\">2 Antworten auf <em>14-ADC_DMA-Mode (STM32F4)<\/em><\/h3>\n<ol class=\"commentlist\">\n<li id=\"li-comment-1443\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-1443\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/34ffb3dfb5997f2ff992c15104df1523?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\">Sepp Obermair<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">4. M\u00e4rz 2014 um 09:53<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Zun\u00e4chst ein Dickes Lob f\u00fcr deine Seite und deine Libs \u2013 die mir den Einstieg sehr erleichtert haben um vom PIC auf den STm32 zu kommen.<\/p>\n<p>Ich habe versucht das obige Beispiel soabzu\u00e4ndern das nur ein Kanal ausgelesen und per DMA gespeichert wird. Jedoch eine bestimmt Anzahl an Werten z.B. 100.<\/p>\n<p>Hierzu habe ich bei den Enumerationen (f\u00fcr ADC1) nur einen Channel eingetragen und die Anzahl der Conversions auf 100 gesetzt.<br \/>\nDie Gr\u00f6\u00dfe des Buffers habe ich nat\u00fcrlich auch angepasst. Jedoch fehlt hier noch irgendetwas, ich erhalte zwar 100 Werte, aber nur jeder 6 Wert macht Sinn.<\/p>\n<p>Hast du hier einen Tipp?<\/p>\n<p>gr\u00fc\u00dfe Sepp<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1444\" class=\"comment byuser comment-author-admin_ub bypostauthor odd alt depth-2\">\n<div id=\"comment-1444\">\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\">5. M\u00e4rz 2014 um 19:48<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>hast du im H-File die \u201cADC1d_ANZ\u201d auf \u201c1\u2033 runtergesetzt ?<\/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 ADC per DMA zyklisch ausgelesen werden um die CPU last zu senken. Es k\u00f6nnen maximal 16 ADC-Kan\u00e4le pro AD-Wandler festgelegt werden. -die Einstellung erfolgt (wie in der ADC-Single-Conversation-Library) als Struktur im C-File. Dort \u00a0m\u00fcssen die &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=227\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":14,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[128],"tags":[20,149,9,7],"class_list":["post-227","page","type-page","status-publish","hentry","category-stm32f4","tag-adc","tag-dma","tag-library","tag-stm32f4"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/227","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=227"}],"version-history":[{"count":4,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/227\/revisions"}],"predecessor-version":[{"id":3662,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/227\/revisions\/3662"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/144"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=227"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=227"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}