你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
arm8686 发表于 2014-12-22 20:23 这里的函数,传递一个ADC的通道进来。 ADC_DeInit(ADC1); 这句里头的 ADC1,从哪里来的?这是个实参吧? ...
奔跑小蜗牛 发表于 2014-12-23 10:00 ADC_DeInit(ADC1); ADC的初始化过程调用的是全局变量,如果把 ADC_InitTypeDef ADC_InitStructure定 ...
Dylan疾风闪电 发表于 2014-12-23 15:46 重点是保证ADC_InitTypeDef结构体修改的配置,与初始化函数,在同一个作用域。 不要在A函数处修改结构体, ...
风铃草2 发表于 2014-12-24 10:14 1. 正常运行 extern ADC_InitTypeDef ADC_InitStructure; void AD_Single(unsigned char channel)
Dylan疾风闪电 发表于 2014-12-24 15:15 ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward; 中的ADC_ScanDirection_Upward是哪来的 ...
ADC1是STM32库函数里定义的,那个传输来的通道是多余变量 我没用它
void AD_Single(unsigned char channel)
{
ADC_DeInit(ADC1);
/* Configure the ADC1 in continous mode withe a resolutuion equal to 12 bits*/
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; //¾«¶È
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//ENABLE; //µ¥Ò»Ä£Ê½
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//Èí¼þ´¥·¢
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ÓÒ¶ÔÆë
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
ADC_Init(ADC1, &ADC_InitStructure);
这是我的函数 原先是在void AD_Single(unsigned char channel)里面定义的
ADC_InitTypeDef ADC_InitStructure;结果中断了一次 就不再中断了
现在放在函数外面定义成全局变量 就能正常了 不知道为什么我都是在函数里面赋值 太TMD郁闷了
1. 正常运行
extern ADC_InitTypeDef ADC_InitStructure;
void AD_Single(unsigned char channel)
{
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_ChannelConfig(ADC1, channel , ADC_SampleTime_13_5Cycles);
ADC_GetCalibrationFactor(ADC1);
ADC_WaitModeCmd(ADC1, ENABLE);
ADC_AutoPowerOffCmd(ADC1, ENABLE);
ADC_Cmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN));
}
2.只中断一次,就不再中断的情况
void AD_Single(unsigned char channel)
{
ADC_InitTypeDef ADC_InitStructure;
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_ChannelConfig(ADC1, channel , ADC_SampleTime_13_5Cycles);
ADC_GetCalibrationFactor(ADC1);
ADC_WaitModeCmd(ADC1, ENABLE);
ADC_AutoPowerOffCmd(ADC1, ENABLE);
ADC_Cmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN));
}
1. 正常运行
extern ADC_InitTypeDef ADC_InitStructure;
void AD_Single(unsigned char channel)
{
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_ChannelConfig(ADC1, channel , ADC_SampleTime_13_5Cycles);
ADC_GetCalibrationFactor(ADC1);
ADC_WaitModeCmd(ADC1, ENABLE);
ADC_AutoPowerOffCmd(ADC1, ENABLE);
ADC_Cmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN));
}
2.只中断一次,就不再中断的情况
void AD_Single(unsigned char channel)
{
ADC_InitTypeDef ADC_InitStructure;
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_ChannelConfig(ADC1, channel , ADC_SampleTime_13_5Cycles);
ADC_GetCalibrationFactor(ADC1);
ADC_WaitModeCmd(ADC1, ENABLE);
ADC_AutoPowerOffCmd(ADC1, ENABLE);
ADC_Cmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN));
}
初始化和配置都是在一个作用域的
写错了 不是中断一次 是只获得一次EOC While 就死循环了
int main()
{
while(1)
{
for(loopi=0;loopi<8;loopi++)
{
/* ADC1 regular Software Start Conv */
ADC_StartOfConversion(ADC1);
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==0);
adtot=adtot+ADC_GetConversionValue(ADC1);
ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
}
}
}
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
中的ADC_ScanDirection_Upward是哪来的参数?自定义?
是否满足FunctionalState ADC_ContinuousConvMode;?
库里面定义的 ,你可以去 -->资料下载 --> STM32F0-->固件...-->STM32F0探索套件固件包,包括21个例程和为4个不同IDE配置的项目 下载下来就知道 人家定义的