OpenEdv-开源电子网

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

请问STM32 ADC中断怎么会进不了呢?(非DMA)

[复制链接]

9

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
234
金钱
234
注册时间
2014-8-13
在线时间
69 小时
发表于 2014-11-14 15:34:44 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]void ADC1_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); // PC1,输入时不用设置速率 } void ADC1_Mode_Config(void) { ADC_InitTypeDef ADC_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级NVIC设置 NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占优先级2级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //从优先级2级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能 NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //独立ADC模式 ADC_InitStructure.ADC_ScanConvMode = DISABLE ; //禁止扫描模式,扫描模式用于多通道采集 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //开启连续转换模式,即不停地进行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); RCC_ADCCLKConfig(RCC_PCLK2_Div6); //配置ADC时钟,为PCLK2的6分频,即12M ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 1, ADC_SampleTime_55Cycles5); //配置ADC1的通道11为55. 5个采样周期,序列为1 ADC_Cmd(ADC1, ENABLE); //使能指定的ADC1 ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE); ADC_ResetCalibration(ADC1); //重置指定的ADC1的校准寄存器 while(ADC_GetResetCalibrationStatus(ADC1)); //获取ADC1重置校准寄存器的状态,设置状态则等待 ADC_StartCalibration(ADC1); //开始指定ADC1的校准状态 while(ADC_GetCalibrationStatus(ADC1)); //获取指定ADC1的校准程序,设置状态则等待 ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能 } void ADC1_2_IRQHandler(void) { //检查指定的ADC中断是否发生 //if(ADC_GetITStatus(ADC1, ADC_IT_EOC)) //{ //ADC_get=ADC1->DR; ADC_get=ADC_GetConversionValue(ADC1); ADC_ClearITPendingBit(ADC1, ADC_IT_EOC); //清除ADCx的中断待处理位 //} }[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

回复【3楼】jiutianshenjian: --------------------------------- 解决了,谢谢 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; 改成ENABLE
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
234
金钱
234
注册时间
2014-8-13
在线时间
69 小时
 楼主| 发表于 2014-11-14 15:34:45 | 显示全部楼层
回复【3楼】jiutianshenjian:
---------------------------------
解决了,谢谢
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
改成ENABLE
回复

使用道具 举报

9

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
234
金钱
234
注册时间
2014-8-13
在线时间
69 小时
 楼主| 发表于 2014-11-14 15:35:38 | 显示全部楼层
这是初始化
void ADC1_Init(void)
{
ADC1_GPIO_Config();
ADC1_Mode_Config();
}
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-11-14 16:04:21 | 显示全部楼层
你怎么知道没进入,循环模式试试看看

看不出来有什么问题。
小小蜗牛
回复

使用道具 举报

9

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
234
金钱
234
注册时间
2014-8-13
在线时间
69 小时
 楼主| 发表于 2014-11-14 21:02:27 | 显示全部楼层
回复【3楼】jiutianshenjian:
---------------------------------
对啊,纠结了好久
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-26 15:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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