参照官方库例程写了一个简单的AD转换程序,但是程序运行后AD转换始终没开启。存放AD转换结果的寄存器中的数据是随机的 有知道原因的吗?主程序如下
void main(void)
{
/* CLK configuration -------------------------------------------*/
CLK_Config();
/* ADC configuration -------------------------------------------*/
ADC_Config();
/* Initialize LEDs mounted on YANGAN board */
GPIO_Init(AD_GPIO_PORT, AD_GPIO_PINS, GPIO_Mode_Out_PP_Low_Fast);
AD_Smoke_PowerOn();
/* Init TIM2 to generate 1 ms time base update interrupt */
//TimingDelay_Init();
/* Enable Interrupts */
//enableInterrupts();
/* Infinite loop*/
while (1)
{
uint16_t samp=0;
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);//等待采样完成
ADC_ClearFlag(ADC1, ADC_FLAG_EOC);//清采样完成标志
samp = ADC_GetConversionValue(ADC1);//读取采样数据
ADC_SoftwareStartConv(ADC1);//重新启动采样
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
static void ADC_Config(void)
{
/* Initialize and configure ADC1 */
ADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_12Bit, ADC_Prescaler_2);
ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);
//ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_384Cycles);
//采集通道设为输入模式
GPIO_Init(GPIOA, GPIO_Pin_5, GPIO_Mode_In_FL_No_IT);
//启用内部参考电压
ADC1->TRIGR[0] |= 0x10;
/* Enable ADC1 */
ADC1->CR1 |= 0x01; //第一次写1是从低功耗模式唤醒
ADC_Cmd(ADC1, ENABLE);
/**********************************/
/* Enable ADC1 Channels 0 */
//ADC_ChannelCmd(ADC1, ADC_Channel_0, ENABLE);
/* Enable ADC1 Channels 1 */
ADC_ChannelCmd(ADC1, ADC_Channel_1, ENABLE);
/* Enable ADC1 Channels 2 */
// ADC_ChannelCmd(ADC1, ADC_Channel_2, ENABLE);
/* Enable End of conversion ADC1 Interrupt */
// ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
/* Start ADC1 Conversion using Software trigger*/
ADC_SoftwareStartConv(ADC1);
/**********************************/
}
一周热门 更多>