Измерение VDD на stm32 в Ардуино

Raskol
Offline
Зарегистрирован: 27.11.2021

Всем привет. Есть ли возможность измерить напряжение питания камня STM32F103C8T6 в Среде Ардуино, ядро использую - https://github.com/stm32duino/Arduino_Core_STM32. Тут реализация через DMA -  https://github.com/stm32duino/Arduino_Core_STM32

Raskol
Offline
Зарегистрирован: 27.11.2021
b707
Offline
Зарегистрирован: 26.05.2017

что через ДМА? Измерение одного напряжения??? - зачем?

Непосредственно как измерить - описано буквально в первых трех абзацах по вашей ссылке. Переключаете АЦП на канал ADC1_IN17 и получаете напряжение внутреннего референса платы относительно напряжения питания. Зная напряжение референса - напряжение питания считается по формуле

 VDD = (4095/x) * Vref,  где x - результат измерения 17-канала во внутренних "попугаях" ADC

как именно в вашем конкретном ядре переключить АЦП на канал ADC1_IN17 - смотрите в справке или в исходниках

Raskol
Offline
Зарегистрирован: 27.11.2021

Спасибо, большое. Буду пробовать 

Raskol
Offline
Зарегистрирован: 27.11.2021

Все получилось. Оставлю свой пример здесь, если  у кого-то возникнет такая-же необходимость измерять напряжение питания  

#include "stm32yyxx_ll_adc.h" // Библиотека встроена в пакет c ядром
#include <SoftwareSerial.h>


#define VREFINT   1200
#define ADC_RANGE 4096

SoftwareSerial mySerial(PA10, PA9); // RX, TX
void setup() {
  
  mySerial.begin(9600);
  // Разрешение АЦП
  analogReadResolution(12);
}

void loop() {
 
  int32_t VRef = VREFINT * ADC_RANGE / analogRead(AVREF);
  mySerial.print ("VRef(mv) = ");
  mySerial.println (VRef);
  delay(500);
}