#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); }