Ich möchte bei meinem STM32L4xx die Versorgungspannung (VCC = VDDA) des
Analogwandlers berechnen. Ich habe hier folgendes Beispiel im Netz
gefunden und auf mich angepasst
1 | #define VREFINT_CAL_ADDR 0x1FFF75AA
|
2 | #define VREFINT_CAL_VAL ((uint16_t*) VREFINT_CAL_ADDR)
|
3 |
|
4 | void checkVoltage(void){
|
5 | uint16_t adc_val = get_ADC_DMA(3); //4ten Arraywert aus ADC-DMA Wandlung
|
6 | uint32_t vdda = 3300UL * *VREFINT_CAL_VAL / adc_val;
|
7 | printf("VREFINT=%lu; VREFINT_CAL=%lu; VDDA=%lu mV\n",
|
8 | (unsigned long)adc_val,
|
9 | (unsigned long)*VREFINT_CAL_VAL,
|
10 | (unsigned long)vdda);
|
11 | }
|
Die Versorgungspannung ist 3.363V (mit gutem DMM gemessen)
Die Referenz des ADC vom STM32L4xx ist 1.212V (Datenblatt)
Ausgegeben wird mir aber folgendes:
1 | VREFINT=368; VREFINT_CAL=1649; VDDA=14787 mV
|
Was mache ich falsch?
Kopiert habe ich von hier:
https://stackoverflow.com/questions/58328342/calibrating-stm32-adc-vrefint
Jedoch ist dort ein Beispiel in reinem C und ohne DMA. Mein ADC hat aber
DMA. Der ADC funktioniert jedoch einwandfrei, die anderen DMA
Registerwerte (0,1,2) ergeben Spannungen welche der Realität nahe sind
(+-100mV)