Quellcode |
![]() ![]() |
/*************************************************************************************************************************
Informationstechnik-Labor
**************************************************************************************************************************
i-u-Sensor Software
**************************************************************************************************************************
Erstellt von: Matthias Moldowan und Ahmad Tafserqa im SS 2014 im Rahmen des
Informationstechnik-Labors
Das Programm misst
Spannungswerte am analogen Input PC0 und gibt diese als float-Werte aus.
*************************************************************************************************************************/
//Einbinden der wichtighsten Bibliotheken
#include "stm32f4xx_adc.h"
#include
"stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include <stdio.h>
/************************************************************************************************************************/
//Variablen Definition und Deklaration
int Konvertierung = 0;
//Gelesener Wert aus der AD-Wandlung
int temp = 0; //Variable für den Zwischenspeicher
float Spannung = 0; //Variable mit dem Wert aus
der AD-Wandlung
/************************************************************************************************************************/
// Funktion für die Einstellung der Hardware auf
die AD-Wandlung
void adc_configure()
{
ADC_InitTypeDef ADC_init_structure; //Struktur für die Konfiguration der
AD-Wandlung
GPIO_InitTypeDef GPIO_initStructre; //Struktur für die Konfiguration der
IO-Pins
//Clock configuration
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//ADC1 ist mit de APB2
peripherie Bus verbunden, welches den sysclk benutzt
RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_GPIOCEN,ENABLE);//Clock für den ADC Port
//Analoge Pin
Konfiguration
GPIO_initStructre.GPIO_Pin = GPIO_Pin_0;//Kannal
10 ist mit dem PC0 verbunden
GPIO_initStructre.GPIO_Mode = GPIO_Mode_AN;
//Konfiguration des PC0 Pin als analoger Pin
GPIO_initStructre.GPIO_PuPd = GPIO_PuPd_NOPULL;
//Brauchen kein PushPull
GPIO_Init(GPIOC,&GPIO_initStructre);// Pins mit
dem vorgenommenen Einstellung initialisieren
//AD-Wandlung
Konfiguration
ADC_DeInit();
ADC_init_structure.ADC_DataAlign =
ADC_DataAlign_Right; //Rechtsverschiebung der konvertierten Werte
ADC_init_structure.ADC_Resolution =
ADC_Resolution_12b; //Eingangsawert wird zu einem 12bit Wert mit einem
maximalen Wert von 4096
ADC_init_structure.ADC_ContinuousConvMode =
ENABLE; //Dauerkonvertierung, Werte werden überschrieben
ADC_init_structure.ADC_ExternalTrigConv =
ADC_ExternalTrigConv_T1_CC1; // Konvertierung ist mit dem TIM1 und CC1
synchronisiert
ADC_init_structure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
//keine externe Triggerung der Wandlung
ADC_init_structure.ADC_NbrOfConversion = 1;
//Anzahl der Konvertierungen
ADC_init_structure.ADC_ScanConvMode = DISABLE;
//Scan als ein Kannalscan konfiguriert
ADC_Init(ADC1,&ADC_init_structure); //ADC1 mit den
vorgenommenen Einstellung initialisieren
//Schalte die AD-Wandlung
frei
ADC_Cmd(ADC1,ENABLE);
//Auswahl des Kannals aus
dem gelesen wird
ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_144Cycles);
}
/************************************************************************************************************************/
int adc_convert()
{
ADC_SoftwareStartConv(ADC1);//Startet die
Konvertierung
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));//Flag beobachten
return ADC_GetConversionValue(ADC1);
//AD-Wandlungswert übergeben
}
/************************************************************************************************************************/
int main(void)
{ // main-Start
adc_configure();//Start
der Konfiguration
while(1)
{ // while-Schleife-Start
{
Konvertierung =
adc_convert();
temp
= ((Konvertierung * 3000)/4095) ; // Zwischenspeicherwert
Spannung = ((float)temp) / 1000; //
Berechneterspannungswert als float
}
}
// while-Schleife-Ende
} // main-Ende
/*************************************************************************************************************************
Programm-Ende
**************************************************************************************************************************/