21-ADC_Injected-Group-Library (STM32F4)

Diese Library betreibt die AD-Wandler im Injected-Group-Mode.

In diesem Mode können bis zu 4 AD-Kanäle in einer Liste angelegt werden,
die dann zyklisch gemessen werden. Die CPU muss dann nur noch die Messwerte abfragen.

die ADC-Pins die benutzt werden sollen, müssen im H-File deklariert und im C-File den entsprechenden Port-Pins zugeordnet werden.

es gibt zwei identische Libs einmal für ADC1 und einmal für ADC2
(sie unterscheiden sich nur in den verwendeten Variabelnnamen)

im Beispiel wurden 3 Pins als Analog-IN definiert und per ADC2 gemessen

1
PA3, PC4, PC5

Voraussetzungen :

1
2
Benutzte Module der CooCox-IDE : GPIO, ADC
Benutzte Librarys : keine

Enumerationen (für ADC1) :

1
2
3
4
5
typedef enum {
  ADC_PA3 = 0,  // PA3
  ADC_PC4 = 1,  // PC4
  ADC_PC5 = 2   // PC5
}ADC1i_NAME_t;

Funktionen (für ADC1) :

1
2
void UB_ADC1_IG_Init(void);                       // zum initialisieren und starten
uint16_t UB_ADC1_IG_Read(ADC1i_NAME_t adc_name);  // zum auslesen von einem AD-Kanal

Beispiel :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//--------------------------------------------------------------
// File     : main.c
// Datum    : 22.03.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der ADC-Injected-Group-Library
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------
 
#include "main.h"
#include "stm32_ub_adc2_ig.h"
#include "stm32_ub_led.h"
 
int main(void)
{
  uint16_t adc_wert;
 
  SystemInit(); // Quarz Einstellungen aktivieren
 
  // Init vom ADC2 und start der Dauermessung
  UB_ADC2_IG_Init();
  // Init der LEDs
  UB_Led_Init();
 
  while(1)
  {
    // ADC-Kanal an PA3 messen und die Blaue LED entsprechend schalten
    adc_wert=UB_ADC2_IG_Read(ADC_PA3);
    if(adc_wert>2048) UB_Led_On(LED_BLUE); else UB_Led_Off(LED_BLUE);
    // ADC-Kanal an PC4 messen und die rote LED entsprechend schalten
    adc_wert=UB_ADC2_IG_Read(ADC_PC4);
    if(adc_wert>2048) UB_Led_On(LED_RED); else UB_Led_Off(LED_RED);
    // ADC-Kanal an PC5 messen und die gruene LED entsprechend schalten
    adc_wert=UB_ADC2_IG_Read(ADC_PC5);
    if(adc_wert>2048) UB_Led_On(LED_GREEN); else UB_Led_Off(LED_GREEN);
  }
}

Hier die Library zum Download :

ub_stm32f4_adc_injected_v100

Hier der komplette CooCox-Projektordner zum Download :

Demo_21_ADC_InjGroup


Wie hat Dir dieser Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Noch keine Bewertungen)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert