首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ADC中断不被调用

ADC中断不被调用
EN

Stack Overflow用户
提问于 2018-04-30 18:31:12
回答 1查看 1.2K关注 0票数 1

我希望ADC中断服务例程在每个转换结束后被调用。然而,它并没有被调用。

这是我的密码:

代码语言:javascript
复制
#define RCC_APB2ENR   (*((volatile unsigned long*) 0x40021018))

#define ADC1_CR1      (*((volatile unsigned long*) 0x40012404))
#define ADC1_CR2      (*((volatile unsigned long*) 0x40012408))
#define ADC1_SMPTR2   (*((volatile unsigned long*) 0x40012410))
#define ADC1_SQR1     (*((volatile unsigned long*) 0x4001242C))
#define ADC1_SQR3     (*((volatile unsigned long*) 0x40012434))
#define ADC1_DR       (*((volatile unsigned long*) 0x4001244C))

#define NVIC_SETENA_0 (*((volatile unsigned long*) 0xE000E100))
#define NVIC_CLRENA_0 (*((volatile unsigned long*) 0xE000E180))


volatile short conversionResult = -1;

void ADC_IRQHandler(void)       // ADC Interrupt service routines
{   

    if((ADC1_CR2 & 0x00000002) == 0x00000002)       // check if EOC bit set
        conversionResult = ADC1_DR;     
    else
        conversionResult = -1;          
}


void ADC_Init(short mode)
{
    // enable ADC Interrupts
    NVIC_SETENA_0 |= 0x00040000;

    // enable clock for ADC_1
    RCC_APB2ENR |= 0x0000200;

    ADC1_CR2 &= 0x00000000;             // resetting controll registers
    ADC1_CR1 &= 0x00000000;

    ADC1_CR1 |= 0x00000020;             // EOC interrupt enable

    if(mode == 1)                       // continous mode
        ADC1_CR2 |= 0x00000002;


    ADC1_CR2 |= 0x00000001;         // Waking up from power Down State

    // Perfroming Calibration

    ADC1_CR2 |= 0x00000004;
    while((ADC1_CR2 & 0x00000004) != 0);
}


void ADC_ChannelConfig(short channelNumber, short sampleTime)
{
    //selecting channel
    ADC1_SQR3 |= channelNumber; 

    //setting sample time for this channel
    int temp = sampleTime;
    temp = (temp << channelNumber * 3);

    ADC1_SMPTR2 |= temp;
}

void ADC_StartConversion()
{
    ADC1_CR2 |= 0x00000001;         // enable adc again to start conversion
}

int main(void)
{
    ADC_Init(0);
    ADC_ChannelConfig(2, 3);

    ADC_StartConversion();

    while(1)
    {
    }

    return (1);
}

这是中断发生后的拆卸,

我试着改变

void ADC_IRQHandler(void)

到,

void ADC1_IRQHandler(void)

但还是没成功。

我使用的微控制器是STM32F103RB.谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-01 12:49:36

发现问题了。

ADC ISR是,

void ADC1_2_IRQHandler(void)

对ADC 1和ADC 2都需要此ISR。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50106221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档