OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4868|回复: 2

ADC中断问题

[复制链接]

20

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2014-3-2
在线时间
0 小时
发表于 2014-4-4 10:29:10 | 显示全部楼层 |阅读模式
#ifndef _ADDA_H
#define _ADDA_H
#include"sys.h"
#define LED0 PAout(8)
#define LED1 PDout(2)
#define KEY0 PAin(13)
void Adda_Init(void);
#endif


#include<stm32f10x_lib.h>
#include"adda.h"
void Adda_Init(void)
{
RCC->APB2ENR|=1<<2; //A口时钟使能
RCC->APB2ENR|=1<<5; //D口时钟使能
RCC->AHBENR|=1<<0; //DMA1时钟使能
RCC->APB2ENR|=1<<9; //ADC1时钟使能

GPIOA->CRL&=0XFFFFF000;
GPIOD->CRL&=0XFFFFF0FF;
GPIOD->CRL|=0X00000300;
GPIOA->CRH&=0XFF0FFFF0;
GPIOA->CRH|=0X00800003;
GPIOA->ODR|=1<<8;
GPIOD->ODR|=1<<2;
GPIOA->ODR|=1<<13;//IO设置

RCC->APB2RSTR|=1<<9;
RCC->APB2RSTR&=~(1<<9);

RCC->CFGR&=~(3<<14);
RCC->CFGR|=2<<14;

ADC1->SMPR2&=0XFFFFF000;
ADC1->SMPR2|=0X000001FF;

ADC1->SQR1&=0X00000000;
ADC1->SQR1|=0X00000000;
ADC1->SQR3&=0X00000000;
ADC1->SQR3|=0X00000000;

ADC1->CR1&=0X00000000;
ADC1->CR1|=0X00000020;
ADC1->CR2&=0X00000000;
ADC1->CR2|=0X001E0001;

ADC1->CR2|=1<<3;
while(ADC1->CR2&1<<3);
ADC1->CR2|=1<<2;
while(ADC1->CR2&1<<2);

MY_NVIC_Init(3,3,ADC1_2_IRQChannel,2);
}
void ADC_IRQHanlder(void)
{
if(ADC1->SR&1<<1)
{
LED0=!LED0;
ADC1->SR&=0X2;
}
}


#include<stm32f10x_lib.h>
#include"sys.h"
#include"delay.h"
#include"adda.h"
int main(void)
{
static u8 key_state=1;
Stm32_Clock_Init(9);
delay_init(72);
Adda_Init();
while(1)
{
if(KEY0==0&&key_state)
{
delay_ms(10);
key_state=0;
ADC1->CR2|=1<<22;
LED1=!LED1;
}
if(KEY0==1)
key_state=1;
}
}


程序的目的是ADC1通道0单次采集,按一次按键采集一次,采集完产生EOC中断,在中断中LED0翻转,while中LED1翻转。现在问题是如果不使用MY_NVIC_Init进行中断分组,LED1可以根据按键翻转,LED0无现象,但是进行MY_NVIC_Init中断分组后,LED0没有任何现象,也就是没有进入中断吧,程序哪里有问题吗?







正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2014-4-4 11:04:02 | 显示全部楼层
回复 支持 反对

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2014-4-4 11:06:16 | 显示全部楼层
void ADC1_2_IRQHandler(void)
{
if(ADC1->SR&1<<1)
{
LED0=!LED0;
ADC1->SR&=0X2;
}

 ADC_IRQHanlder好像是STM32F4里面这样写的,不知道新文件是不是也是这么写
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 16:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表