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 drei identische Libs für ADC1, ADC2 und ADC3
(sie unterscheiden sich nur in den verwendeten Variabelnnamen)
im Beispiel wurden 2 Pins als Analog-IN definiert und per ADC2 gemessen
1 | PA5, PC3 |
Enumerationen (für ADC1) :
1 2 3 4 | typedef enum { ADC_PA5 = 0, // PA5 ADC_PC3 = 1 // PC3 }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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | //-------------------------------------------------------------- // File : main.c // Datum : 31.10.2013 // Version : 1.0 // Autor : UB // EMail : mc-4u(@)t-online.de // Web : www.mikrocontroller-4u.de // CPU : STM32F429 // IDE : CooCox CoIDE 1.7.4 // GCC : 4.7 2012q4 // Module : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der ADC-Injected-Library // Hinweis : Diese zwei Files muessen auf 8MHz stehen // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" // In Configuration diese Define hinzufügen : // "STM32F429_439xx" , "__ASSEMBLY__" , "USE_STDPERIPH_DRIVER" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_lcd_ili9341.h" #include "stm32_ub_font.h" #include "stm32_ub_adc1_ig.h" #include <stdio.h> int main(void) { uint16_t adc_wert; char buf[20]; SystemInit(); // Quarz Einstellungen aktivieren // Init vom LCD UB_LCD_Init(); // Init vom ADC (Injected-Group) UB_ADC1_IG_Init(); // Init der Layer UB_LCD_LayerInit_Fullscreen(); // auf Hintergrund schalten UB_LCD_SetLayer_1(); // Hintergrund komplett mit einer Farbe füllen UB_LCD_FillLayer(RGB_COL_WHITE); // auf Vordergrund schalten UB_LCD_SetLayer_2(); // Vordergrund komplett mit einer Farbe füllen UB_LCD_FillLayer(RGB_COL_GREEN); // Ueberschrift UB_Font_DrawString(10,10,"Demo_11 : ",&Arial_11x18,RGB_COL_WHITE,RGB_COL_RED); UB_Font_DrawString(10,30,"ADC-Injected ",&Arial_11x18,RGB_COL_WHITE,RGB_COL_RED); while(1) { // ADC-Wert auslesen adc_wert=UB_ADC1_IG_Read(ADC_PA5); sprintf(buf,"PA5 = %4d",adc_wert); UB_Font_DrawString(10,100,buf,&Arial_11x18,RGB_COL_BLACK,RGB_COL_GREEN); // ADC-Wert auslesen adc_wert=UB_ADC1_IG_Read(ADC_PC3); sprintf(buf,"PC3 = %4d",adc_wert); UB_Font_DrawString(10,150,buf,&Arial_11x18,RGB_COL_BLACK,RGB_COL_GREEN); } } |
Hier die Library zum Download :
Hier der komplette CooCox-Projektordner zum Download :