Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Conversione Tasto User
- #include "stm32f30x.h"
- float v=0; //tensione di uscita
- float quanto=3.0/4096.0;//Q=LSB= Vdd/2^n,Fs=VDD=3V, N=12bit
- void main(void)
- {
- RCC->AHBENR |= RCC_AHBENR_GPIOAEN|RCC_AHBENR_ADC12EN; //abilitazione bus porta A(per PA0) e ADC1
- GPIOA->MODER |= 0x3; //PA0 Analogico
- ADC1->CR &= ~ADC_CR_ADVREGEN_1; //Vreg : 10->00
- ADC1->CR |= ADC_CR_ADVREGEN_0; // VReg: 00->01
- for (int i=0;i<10000;i++); //attesa >10ยตs
- ADC1_2->CCR |= ADC12_CCR_CKMODE_0; //CKMODE = 01 = Bus AHB, 72 MHz
- ADC1->DIFSEL &= ~1; //DIFSEL=0, single ended
- ADC1->CR &= ~ADC_CR_ADCALDIF; //ADCALDIF =0 per calibrazione su misure single ended
- ADC1->CR |= ADC_CR_ADCAL; //ADCAL=1, avvia calibrazione
- while((ADC1->CR & ADC_CR_ADCAL)==ADC_CR_ADCAL); //Aspetta ADCAL torni a 0
- ADC1->CR |= ADC_CR_ADEN; //Abilitazione ADC, ADEN=1
- while ((ADC1->ISR & ADC_ISR_ADRD)!=ADC_ISR_ADRD); //Aspetta che ADRD=1
- ADC1->SMPR1|=ADC_SMPR1_SMP1; //SMP1= 111 =601.5 ADCck
- ADC1->SQR1 =ADC_SQR1_SQ1_0; // Sequenza di conversione =00001, converte dal canale 1, PA0
- ADC1->SQR1&=~ADC_SQR1_L; //L=0->lunghezza una conversione
- while (1)
- { ADC1->CR |= ADC_CR_ADSTART; //ADCSTART=1, inizio conversione
- while((ADC1->ISR& ADC_ISR_EOC)!=ADC_ISR_EOC); //Attende che termini la conversione aspettando che EOC=1
- v=(float)ADC1->DR*quanto; //Lettura del risultato
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement