Projet-Voilier-3/projet-voilier/Driver_ADC.c

40 rindas
907 B
C

#include "Driver_ADC.h"
#include "stm32f10x.h"
#include "stdio.h"
void init_adc1 (void)
{
//Activation de l'external trig
ADC1->CR2 |= ADC_CR2_EXTTRIG;
//Activation SWSTART
ADC1->CR2 |= ADC_CR2_EXTSEL;
//On règle la fréquence à 12Mhz
RCC->CFGR |= RCC_CFGR_ADCPRE_DIV6;
//Activation de l'ADC
ADC1->CR2 |= ADC_CR2_ADON;
//Fixe le nb de conversion, ici 1
ADC1->SQR1 &= ADC_SQR1_L;
//Numéro de voie à convertir
ADC1->SQR3 |= 1;
//Lancement de la calibration
ADC1->CR2 |= ADC_CR2_CAL;
//Attente de la fin de la calibration
while((ADC1->CR2 & ADC_CR2_CAL));
//Activation de l'intéruption sur le flag EOC
ADC1->CR1 |= ADC_CR1_EOCIE;
}
void launch_read_adc1 (void)
{
//Lancement de la conversion
ADC1->CR2 |= ADC_CR2_SWSTART;
}
int read_adc1 (void)
{
//On abaisse le flag pour la prochaine lecture
ADC1->SR &= ~ADC_SR_EOC;
//Retour de la conversion
return ADC1->DR &~ ((0x0F) << 12);
}