39 lines
905 B
C
39 lines
905 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);
|
|
}
|