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

局部变量和全局变量请教

[复制链接]
风铃草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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版