使用遇到一个问题。规则组的转换正常。但是注入的的转换不行。软件启动触发后,进不了中断(中断已使能),后来把中断屏蔽,直接读取标志位也获取不到。程序功能配置如下: //配置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 |
回复:STM32 ADC注入组、规则组 疑惑 求解
RE:STM32 ADC注入组、规则组 疑惑 求解
RE:STM32 ADC注入组、规则组 疑惑 求解
回复:STM32 ADC注入组、规则组 疑惑 求解
这条语句中的ADC_ExternalTrigConv_None不对,这是规则组定义使用软件触发,注入组应用ADC_ExternalTrigInjecConv_None