打印
[STM32F1]

ADC规则转换的中断模式,进中断但转换完成标志位始终为0

[复制链接]
874|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianlu200808|  楼主 | 2015-9-6 17:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ADC, ST, ni, ic, vi
static void ADC1_Mode_Config(void)
{
        ADC_InitTypeDef ADC_InitStructure;
        

        /* ADC1 configuration */        
        ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                        //独立ADC模式
        ADC_InitStructure.ADC_ScanConvMode = DISABLE ;                                          //禁止扫描模式,扫描模式用于多通道采集
        ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;                        //开启连续转换模式,即不停地进行ADC转换
        ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //不使用外部触发转换
        ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;         //采集数据右对齐
        ADC_InitStructure.ADC_NbrOfChannel = 1;                                                                         //要转换的通道数目1
        ADC_Init(ADC1, &ADC_InitStructure);
        
        /*配置ADC时钟,为PCLK2的8分频,即9MHz*/
        RCC_ADCCLKConfig(RCC_PCLK2_Div8);
        /*配置ADC1的通道11为55.        5个采样周期,序列为1 */
        ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_55Cycles5);
        
        /* Enable ADC1 */
        ADC_Cmd(ADC1, ENABLE);
        
        /*复位校准寄存器 */   
        ADC_ResetCalibration(ADC1);
        /*等待校准寄存器复位完成 */
        while(ADC_GetResetCalibrationStatus(ADC1));
        
        /* ADC校准 */
        ADC_StartCalibration(ADC1);
        /* 等待校准完成*/
        while(ADC_GetCalibrationStatus(ADC1));
        
        /* 由于没有采用外部触发,所以使用软件触发ADC转换 */
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);
        ADC_ITConfig(ADC1, ADC_IT_EOC , ENABLE);
}


/// 配置ADC1接收中断
void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        /* Configure the NVIC Preemption Priority Bits */  
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
        
        /* Enable the USARTy Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;         
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}
这个是ADC的规则转换,我配置的中断模式

可以进中断,,但我在中断函数里面检测ADC_IT_EOC始终为0是为什么,不知道是什么原因,请知道的帮我看了,先谢了
沙发
amanda_s| | 2015-9-7 10:18 | 只看该作者
你在中断函数里是怎么检测的?
读ADC_DR寄存器也会清除该标志位的。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
tianlu200808 + 2 很给力!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

30

帖子

2

粉丝