программирую АЦП. В конечном счете оно должно работать в трипл-моде, но как то с ходу не задалось.
По пути упрощений я снизошел до самого элементарного (код и лог приведены ниже)- программный опрос 1го преобразования без пдп и прерываний...
Однако ж, АЦП вроде как и работает, и выдает достаточно правдоподобные данные, но чихать оно хотело, на то что я подаю на вход...
Раз 5 перепроверял, а точно ли нога та: ТА!
Посмотрите пожалуйста опытным и незамыленным взглядом. Наверняка подвох на поверхности. (если чип, конечно, не подгорел
собственно код:
и лог:RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); // а надо ли тактировать аналоговый вход???
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = 0;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; // я так понимаю, это не имеет значения
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; // и соответственно это тоже
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz; // и это...
GPIO_Init(GPIOA, &GPIO_InitStruct);
//0 й канал АЦП висит на PA0
// (pin 14 для 64ножечного корпуса. в него и тыкаем тестовым сигналом)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Resolution = 12;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 1;
ADC_Init(ADC1, &ADC_InitStructure);
for (i=1; i<17; i++)
ADC_RegularChannelConfig(ADC1, ADC_Channel_0,i,ADC_SampleTime_3Cycles);//can be 3,15, 28, 56, 84, 112, 144, 480 cycles
ADC_Cmd(ADC1, ENABLE);
while (1)
{
if (i++ == 0x1000000)
{
if (ADCTestStatus()) {
ADC_SoftwareStartConv(ADC1);
j=0;//для посмотреть сколько времени висит в цикле
while (!(ADC1->SR & ADC_SR_EOC)) {
j++;
}
uint16_t data = ADC_GetConversionValue(ADC1);
//отсылаем лог по виртуальному ком порту
uint16tohex(j,&c1,&c2,&c3,&c4);
sendchar('j');sendchar('='); //к-во циклов на преобразование
sendchar(c1);sendchar(c2);
sendchar(c3);sendchar(c4);
sendchar(' ');
uint16tohex(data,&c1,&c2,&c3,&c4); //собственно данные с АЦП
sendchar('V');sendchar('=');
sendchar(c1);sendchar(c2);
sendchar(c3);sendchar(c4);
sendchar(10);
sendchar(13);
}
i = 0;
}
}
j=0005 V=0039
j=0005 V=003A
j=0005 V=0039
j=0005 V=003A
j=0005 V=0039
j=0005 V=003A
j=0005 V=0039
j=0005 V=003B
j=0005 V=003C
j=0005 V=003B
j=0005 V=0039


