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

STM32 ADC注入组、规则组 疑惑 求解

[复制链接]
mingrihuiyi-257 提问时间:2012-8-3 22:05 /
使用遇到一个问题。规则组的转换正常。但是注入的的转换不行。软件启动触发后,进不了中断(中断已使能),后来把中断屏蔽,直接读取标志位也获取不到。程序功能配置如下:
//配置ADC
void ADC_CFG(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        ADC_InitTypeDef ADC_InitStructure;
       
        RCC_ADCCLKConfig(RCC_PCLK2_Div4);
        //打开ADC1、GPIOC时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC,ENABLE);
       
        //配置PC0、PC1、PC2、PC3、PC4为模拟输  channel 10 11 12 13 14
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//配置为模拟输入
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOC,&GPIO_InitStructure);
               
        //ADC1与ADC2相互独立
        ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
        //规定模数转换工作在扫描模式还是单次模式
        ADC_InitStructure.ADC_ScanConvMode=ENABLE;
        //规定了模数转换工作在连续还是单次模式
        ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;
        //使用外部触发来启动规则通道的模数转换
        ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
        //数据对齐方式
        ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//数据对齐方式:右对齐
        // 设置转换序列长度,规则组转换长度
        ADC_InitStructure.ADC_NbrOfChannel=4;
        ADC_Init(ADC1,&ADC_InitStructure);
       
        // 设置制定 ADC 的规则组通道。配置转换顺序和转换时间  **在调用完ADC_Init()必须调用以下函数
        ADC_RegularChannelConfig(ADC1,ADC_Channel_10,2,ADC_SampleTime_55Cycles5);
        ADC_RegularChannelConfig(ADC1,ADC_Channel_11,3,ADC_SampleTime_55Cycles5);
        ADC_RegularChannelConfig(ADC1,ADC_Channel_12,4,ADC_SampleTime_55Cycles5);
        ADC_RegularChannelConfig(ADC1,ADC_Channel_16,4,ADC_SampleTime_55Cycles5);
       
        ADC_InjectedSequencerLengthConfig(ADC1,1);
        ADC_InjectedChannelConfig(ADC1,ADC_Channel_14,1,ADC_SampleTime_41Cycles5);
        ADC_ExternalTrigInjectedConvConfig(ADC1,ADC_ExternalTrigConv_None);
       
        // 使能内部温度传感器
        ADC_TempSensorVrefintCmd(ENABLE);
       
        ADC_ITConfig(ADC1,ADC_IT_JEOC,ENABLE);
       
        ADC_DMACmd(ADC1,ENABLE);
               
        //使能ADC1
        ADC_Cmd(ADC1,ENABLE);
       
        //重置指定的ADC校准寄存器
        ADC_ResetCalibration(ADC1);
        //检查指定ADC校准寄存器的设置状态
        while(ADC_GetResetCalibrationStatus(ADC1));
       
        //开始指定ADC的校准程序
        ADC_StartCalibration(ADC1);
        //获取指定ADC的校准状态
        while(ADC_GetSoftwareStartConvStatus(ADC1));
       
        //使能指定的ADC软件触发转换启动功能
        ADC_SoftwareStartConvCmd(ADC1,ENABLE);       
}
主函数的部分代码:
                 if(flag)
                {
                        flag=0;
                       
                        ADC_SoftwareStartInjectedConvCmd(ADC1,ENABLE);
                }
                if(ADC_GetFlagStatus(ADC1,ADC_FLAG_JEOC))
                {
                        ADC_ClearFlag(ADC1,ADC_FLAG_JEOC);
                       
                        xxx=ADC_GetInjectedConversionValue(ADC1,ADC_InjectedChannel_1);
                        flag=1;
                }
 
仿真的时候xxx一直为0
收藏 评论5 发布时间:2012-8-3 22:05

举报

5个回答
maxiaohan 回答时间:2013-1-31 10:38:43

回复:STM32 ADC注入组、规则组 疑惑 求解

哎呀!你这个问题怎么解决的啊?我也遇到了啊!加我QQ啊~咱们讨论下呢!!!769740648~急啊
iamwei 回答时间:2013-5-25 14:49:15

RE:STM32 ADC注入组、规则组 疑惑 求解

确实是有这个问题
etn2012 回答时间:2013-5-28 16:23:25

RE:STM32 ADC注入组、规则组 疑惑 求解

没有选择触发源,怎么可能进中断,选择一个触发源!
guaniverson 回答时间:2014-6-17 11:05:10

回复:STM32 ADC注入组、规则组 疑惑 求解

ADC_ExternalTrigInjectedConvConfig(ADC1,ADC_ExternalTrigConv_None);
这条语句中的ADC_ExternalTrigConv_None不对,这是规则组定义使用软件触发,注入组应用ADC_ExternalTrigInjecConv_None
sailor.wu 回答时间:2015-10-23 11:25:39
ADC_RegularChannelConfig  改成  ADC_InjectedChannelConfig

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版