#include "stm32f10x.h"
void ADC_Init(void);
void get_adc_val(void);
AD C буфер для хранения AD C значение регистра данных
int adc_buff;
int main()
{
Инициализация AD C
ADC_Init();
Чтение AD C
while(1)
{
get_adc_val();
}
return 0;
}
AD C функция инициализации
void ADC_Init()
{
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; // ENabling the adc clock
RCC->CFGR|=RCC_CFGR_ADCPRE_DIV8; // Prescaler/8 for ADC1
ADC1->SMPR2 |= (0b100<<0); //To select the sample time individually for each channel
Включение AD C
ADC1->CR2 |=ADC_CR2_ADON;
ADC1->CR2 |= ADC_CR2_RSTCAL; // Reset Calibration
while(ADC1->CR2 & (ADC_CR2_RSTCAL));
Использование калибровки
ADC1->CR2 |= ADC_CR2_CAL;
while(ADC1->CR2 & (ADC_CR2_CAL));
}
Функция для чтения значения AD C
void get_adc_val()
{
ADC1->SQR3 = 1 ; // STart conversion from channel 1
ADC1->CR2 |= ADC_CR2_CONT; // ADC group regular continuous conversion mode
while(!(ADC1->SR & ADC_CR2_CONT));
Почему я получаю постоянное значение в регистре данных AD C, равное 0x42?
adc_buff=ADC1->DR; // ADC data register
}