137 lines
3 KiB
C
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
|
|
}
|
|
|
|
|