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 :
Hier der komplette CooCox-Projektordner zum Download :