你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

局部变量和全局变量请教

[复制链接]
风铃草2 提问时间:2014-12-22 15:09 /
阅读主题, 点击返回1楼
收藏 评论23 发布时间:2014-12-22 15:09
23个回答
风铃草2 回答时间:2014-12-23 19:23:05
arm8686 发表于 2014-12-22 20:23
这里的函数,传递一个ADC的通道进来。
ADC_DeInit(ADC1); 这句里头的 ADC1,从哪里来的?这是个实参吧?
...

ADC1是STM32库函数里定义的,那个传输来的通道是多余变量 我没用它
风铃草2 回答时间:2014-12-23 19:26:44
奔跑小蜗牛 发表于 2014-12-23 10:00
ADC_DeInit(ADC1); ADC的初始化过程调用的是全局变量,如果把 ADC_InitTypeDef   ADC_InitStructure定 ...

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郁闷了
风铃草2 回答时间:2014-12-23 19:30:03
全都没明白我意思,直接重新上代码
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));        
}
风铃草2 回答时间:2014-12-23 19:30:21
只有这么一个区别
风铃草2 回答时间:2014-12-24 10:14:17
Dylan疾风闪电 发表于 2014-12-23 15:46
重点是保证ADC_InitTypeDef结构体修改的配置,与初始化函数,在同一个作用域。
不要在A函数处修改结构体, ...

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));         
}

初始化和配置都是在一个作用域的
风铃草2 回答时间:2014-12-24 10:17:20
风铃草2 发表于 2014-12-24 10:14
1. 正常运行
extern  ADC_InitTypeDef     ADC_InitStructure;
void AD_Single(unsigned char channel)

写错了 不是中断一次  是只获得一次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);                       
                }
}
}
Dylan疾风闪电 回答时间:2014-12-24 15:15:36
本帖最后由 Dylan疾风闪电 于 2014-12-24 15:27 编辑

ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
中的ADC_ScanDirection_Upward是哪来的参数?自定义?
是否满足FunctionalState ADC_ContinuousConvMode;?
风铃草2 回答时间:2014-12-24 15:53:21
Dylan疾风闪电 发表于 2014-12-24 15:15
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
中的ADC_ScanDirection_Upward是哪来的 ...

库里面定义的 ,你可以去 -->资料下载 --> STM32F0-->固件...-->STM32F0探索套件固件包,包括21个例程和为4个不同IDE配置的项目 下载下来就知道 人家定义的
Dylan疾风闪电 回答时间:2014-12-24 16:21:27
刚看了一下,STM32的CM3和CM0的ADC寄存器改变了很多。回去研究下再来答复你。
wenyangzeng 回答时间:2014-12-30 14:59:30
在局部变量前加:static

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版