Projet_voilier2/Drivers/Src/ADC.c
2023-03-22 18:06:33 +01:00

137 lines
3 KiB
C

#include "ADC.h"
void MyADC_init(MyADC_Struct_TypeDef* myADC)
{
MyGPIO_Struct_TypeDef Port_ADC;
RCC->CFGR |= RCC_CFGR_ADCPRE_DIV6;
if(myADC->ADC==ADC1)
{
RCC->APB2ENR |= 0x01<<9;
ADC1->CR2|= 0x01; // on active l'adc
ADC1->SQR1&= ~(0x0F<<20);// 1 convertion
ADC2->SQR3&= ~0x1F;// on met 0 la séquance 1
ADC1->SQR3|= myADC->channel;// on indique le channel a convertir
}
else if(myADC->ADC==ADC2)
{
RCC->APB2ENR |= 0x01<<8;
ADC2->CR2|= 0x01; // on active l'adc
ADC2->SQR1&= ~(0x0F<<20);// 1 convertion
ADC2->SQR3&= ~0x1F;// on met 0 la séquance 1
ADC2->SQR3|= myADC->channel;// on indique le channel a convertir
}
switch (myADC->channel)
{
case 0:
Port_ADC.GPIO=GPIOA;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=0;
MyGPIO_Init(&Port_ADC);
break;
case 1:
Port_ADC.GPIO=GPIOA;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=1;
MyGPIO_Init(&Port_ADC);
break;
case 2:
Port_ADC.GPIO=GPIOA;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=2;
MyGPIO_Init(&Port_ADC);
break;
case 3:
Port_ADC.GPIO=GPIOA;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=3;
MyGPIO_Init(&Port_ADC);
break;
case 4:
Port_ADC.GPIO=GPIOA;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=4;
MyGPIO_Init(&Port_ADC);
break;
case 5:
Port_ADC.GPIO=GPIOA;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=5;
MyGPIO_Init(&Port_ADC);
break;
case 6:
Port_ADC.GPIO=GPIOA;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=6;
MyGPIO_Init(&Port_ADC);
break;
case 7:
Port_ADC.GPIO=GPIOA;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=7;
MyGPIO_Init(&Port_ADC);
break;
case 8:
Port_ADC.GPIO=GPIOB;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=0;
MyGPIO_Init(&Port_ADC);
break;
case 9:
Port_ADC.GPIO=GPIOB;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=1;
MyGPIO_Init(&Port_ADC);
break;
case 10:
Port_ADC.GPIO=GPIOC;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=0;
MyGPIO_Init(&Port_ADC);
break;
case 11:
Port_ADC.GPIO=GPIOC;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=1;
MyGPIO_Init(&Port_ADC);
break;
case 12:
Port_ADC.GPIO=GPIOC;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=2;
MyGPIO_Init(&Port_ADC);
break;
case 13:
Port_ADC.GPIO=GPIOC;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=3;
MyGPIO_Init(&Port_ADC);
break;
case 14:
Port_ADC.GPIO=GPIOC;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=4;
MyGPIO_Init(&Port_ADC);
break;
case 15:
Port_ADC.GPIO=GPIOC;
Port_ADC.GPIO_Conf=In_Analog;
Port_ADC.GPIO_Pin=5;
MyGPIO_Init(&Port_ADC);
break;
}
}
int conversion(MyADC_Struct_TypeDef* myADC)
{
if()
{
}
ADC1->CR2 |= ADC_CR2_ADON; // lancement de la conversion
While(!(ADC1->SR & ADC_SR_EOC) ) {} // attente de la fin de conversion
ADC1->SR &= ~ADC_SR_EOC; // validation de la conversion
return ADC1->DR & ~((0x0F) << 12); // retour de la conversion
}