Advertisement
Guest User

Untitled

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