STM32 ADC转换中断读取

发布者:SereneJourney最新更新时间:2018-09-22 来源: eefocus关键字:STM32  ADC转换  中断读取 手机看文章 扫描二维码
随时随地手机看文章

ADC中断读取方式适用于低频率的ADC采集,而高频率的AD采集必须使用DMA,

ADC中断读取的初始化函数只是比上一篇的直接读取方式添加了点中断配置文件,代码如下:

static void ADC_GPIO_Config(void)

{

  GPIO_InitTypeDef  GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ʹÄÜPB,PE¶Ë¿ÚʱÖÓ

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

static void ADC_Mode_Config(void)

{

  ADC_InitTypeDef ADC_InitStructure;

//ADC_GPIO_Config();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);

ADC_DeInit(ADC1);

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

ADC_InitStructure.ADC_ScanConvMode=DISABLE;

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

ADC_InitStructure.ADC_NbrOfChannel=ADC_Channel_1;

ADC_Init(ADC1,&ADC_InitStructure);

RCC_ADCCLKConfig(RCC_PCLK2_Div8); 

ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5);

ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);

  ADC_Cmd(ADC1,ENABLE);

ADC_ResetCalibration(ADC1);

while(ADC_GetResetCalibrationStatus(ADC1));

ADC_StartCalibration(ADC1);

while(ADC_GetCalibrationStatus(ADC1));

ADC_SoftwareStartConvCmd(ADC1,ENABLE);

}

static void ADC_NVIC_Config()

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

       NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

void ADC_InitConfig(void)

{

ADC_NVIC_Config();

       ADC_GPIO_Config();

ADC_Mode_Config();

}

上面的红色部分即为需要添加的代码,分析上面的代码其实就是允许ADC的中断,设置中断的优先级

实际效果图就不发了,代码都是经过测试的,对了,还有个中断服务函数没发出来呢

void ADC1_2_IRQHandler(void)

{

      if(ADC_GetITStatus(ADC1,ADC_IT_EOC) == SET)

{

 adcconverdata=ADC_GetConversionValue(ADC1);

}

ADC_ClearITPendingBit(ADC1,ADC_IT_EOC);

}


关键字:STM32  ADC转换  中断读取 引用地址:STM32 ADC转换中断读取

上一篇:STM32 ADC单次转换DMA读取
下一篇:STM32 ADC单次转换实例

推荐阅读最新更新时间:2024-03-16 16:14

STM32 UART 初始化
因为想用串口3,但配置了很长时间还是不行,为什么UART1,2行,UART3就不行的,最后原因是:使能GPIOB,端口时钟 USART3时钟,我只使能了UART3时钟,没有使能UART3所在端口GPIOB的时钟,所以导致无法正常启动串口3。 下面具体写下串口配置过程: 1:系统时钟初始化,包括系统时钟和要开放的IO口和串口的时钟配置。 2:IO口初始化,包括引脚,速率,输入输出模式等。 3:配置USART的波特率,数据位等。 对应的3个函数,相当有条理 /--------------——————--------------------------------------------------------------
[单片机]
STM32温度传感器DS18B20测试程序 可通过TFT显示屏显示
/* tanqi TFT*/ #include stm32f10x_lib.h #include tft.h #include DS18B20.h extern u8 presence; /************************************************************** 系统时钟初始化 ****************************************************************/ void RCC_Configuration(void) { ErrorStatus HSEStartUpStat
[单片机]
stm32上移植linux的实操案例经验分享
刚从硬件跳槽为嵌软时,没有任何一丝的准备。一入职,领导就交代了一项特难的任务——在stm32上移植linux! 瞬间我就懵了,没办法硬着头皮上吧,先搜集资料,我之前跑的是ok6410的板子上运行的linux,现在是在stm32上移植,以前stm32倒是玩过,研究生期间就捣鼓过它,但现在还没从抓烙铁的硬件当中缓过神来,就转到嵌入式软件的开发,更头疼的是stm32没有MMU!没有MMU!找了一下,好吧,有个uClinux! 于是开始学习各种相关的知识,了解到linux的启动一般是u-boot——》liunx内核——》根文件系统,那么首先要做个基于stm32的u-boot,先初始化时钟、外设、中断什么的,看了韦东山老师的视频感觉
[单片机]
<font color='red'>stm32</font>上移植linux的实操案例经验分享
STM32开发笔记15: 解决Keil安装Pack包的错误
单片机型号:STM32L053R8T6 Keil通过安装Pack包来支持不同的器件,在使用STM32L053R8T6进行开发时,安装STM32L0XX_DFP,提示如下图所示的错误。 具体的错误信息,可以在Build Output中查看,如下图所示。这个问题,在网上找了好久,没有直接的解决方法。仔细读英文原意,感觉是STM32L0XX_DFP文件中的Message函数不能正确识别。 尝试用记事本打开STM32L0XX_DFP文件,搜索Message只有1处出现,如下图所示。 将“Message(2, Not a genuine ST Device! Abort connection
[单片机]
<font color='red'>STM32</font>开发笔记15: 解决Keil安装Pack包的错误
基于stm32的PWM输出呼吸灯(包括stm32呼吸灯代码)
硬件电路图: 我的收获: 这是STM32数据手册上对TIM3通用定时器复用功能重映象的描述,假设让PA6作为PWM输出,从图中可以看出PA6对应TIM3的通道1, 使能TIM3通道1的函数为 TIM_OC1Init();1 同样的,如果想要使能PA7,它对应的是TIM3的通道2,那么使能通道2的函数便是: TIM_OC2Init()1 以此类推,需要注意,使能不同相同定时器不同通道的函数是有一点小差别的,防止在程序中调用TIM_OC1Init()函数来使能TIM3通道2这种情况的发生。 注意看这里,假设使用的是TIM3的通道1,那么这里就要写成 TIM3-》CCR11 类似的如果用TIM3定时器的通道2,这里就要相应的
[单片机]
基于<font color='red'>stm32</font>的PWM输出呼吸灯(包括<font color='red'>stm32</font>呼吸灯代码)
STM32关于优先级设定的理解 NVIC_SetPriority()
Systick模块初始化配置函数(Systick_config)中设定模块中断优先级的函数为: NVIC_SetPriority((SysTick_IRQn, (1 __NVIC_PRIO_BITS) - 1); 参数SysTick_IRQn为systick基址,这个没什么好说的 关键在参数 (1 __NVIC_PRIO_BITS) - 1);这个参数即占先优先级值,其中—NVIC_PRIO_BITS是stm32.h中的宏定义,库函数默认为4,表示用4位表示占先优先级,因为m3内核只有4位用来表示占先优先级和响应优先级,那么响应优先级就剩下0位了,也就是没有响应优先级之分, 按照上式计算若NVIC_PRIO_BIT
[单片机]
STM32中较为常见的C语言基础知识
C语言是单片机开发中的必备基础知识,本文列举了部分 STM32 学习中比较常见的一些C语言基础知识。 1位操作 下面我们先讲解几种位操作符,然后讲解位操作使用技巧。C语言支持以下六种位操作: 下面,重点讲解一下位操作在单片机开发中的一些实用技巧。 在不改变其他位的值的状况下,对某几个位进行设值 这个场景在单片机开发中经常使用,方法就是我们先对需要设置的位用&操作符进行清零操作,然后用 | 操作符设值。 比如,我要改变 GPIOA 的状态,可以先对寄存器的值进行&清零操作: GPIOA- CRL&=0xFFFFFF0F;/*将第4~7位清零*/ 然后再与需要设置的值进行 |
[单片机]
<font color='red'>STM32</font>中较为常见的C语言基础知识
STM32GPIO——快速IO的使用
STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSRR和GPIOx_BRR寄存器,通过这两个寄存器可以直接对对应的GPIOx端口置'1'或置'0'。 GPIOx_BSRR的高16位中每一位对应端口x的每个位,对高16位中的某位置'1'则端口x的对应位被清'0';寄存器中的位置'0',则对它对应的位不起作用。 GPIOx_BSRR的低16位中每一位也对应端口x的每个位,对低16位中的某位置'1'则它对应的端口位被置'1';寄存器中的位置'0',则对它对应的端口不起作用。 简单地说
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved