Возникла следующая проблема с АЦП, а точнее с результатом преобразования.
Привожу код:
Код: Выделить всё
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_tim.h"
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);// 42 MHz
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); // 84 MHz
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); // 42 MHz
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_InitStructure.TIM_ClockDivision = 42; // 1 MHz
TIM_InitStructure.TIM_Prescaler = 101; // 10 kHz
TIM_InitStructure.TIM_Period = 9; // 1000 Hz
TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM5, &TIM_InitStructure);
TIM_SelectOutputTrigger(TIM5, TIM_TRGOSource_Update);
TIM_Cmd(TIM5, ENABLE);
ADC->CCR |= ADC_CCR_ADCPRE_0; //Предделитель 84 MHz / 4 = 21 MHz
ADC->CCR &= ADC_CCR_MULTI; //Независимый режим
ADC1->CR2 &=~ ADC_CR2_ALIGN; //Данные справа
ADC1->CR2 |= ( ADC_CR2_JEXTSEL_0 | ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_3); //Триггер таймера 5
ADC1->CR2 |= ADC_CR2_JEXTEN_0; // По переднему фронту
ADC1-> CR1 &=~ ADC_CR1_RES; // 12 бит
ADC1->JSQR |= (1<<20) | (1<<21); //4 преобразования
ADC1->JSQR |= (1<<0) | (1<<6) | (1<<10) | (1<<11) | (1<<18); //Каналы с 1 по 4
ADC1->CR2 |= ADC_CR2_ADON;
uint32_t adc_res1=0;
uint32_t adc_res2=0;
uint32_t adc_res3=0;
uint32_t adc_res4=0;
while(1)
{
ADC1->CR2 |= ADC_CR2_JSWSTART;
adc_res1=ADC1->JDR1;
adc_res2=ADC1->JDR2;
adc_res3=ADC1->JDR3;
adc_res4=ADC1->JDR4;
}
}
Господа, в чём может быть проблема?


