STM32 ADC 规则多通道转换

发布者:Shuangfei最新更新时间:2017-09-15 来源: eefocus关键字:STM32  ADC  多通道转换 手机看文章 扫描二维码
随时随地手机看文章

看了这个代码之后终于明白了规则多通道转是怎么回事,以及整体如何实现了。附代码:



/*******************************************************************************
* Function Name  : main
* Description    : Main program
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
int main(void)
{
#ifdef DEBUG
  debug();
#endif


  /* System clocks configuration ---------------------------------------------*/
  RCC_Configuration();


  /* NVIC configuration ------------------------------------------------------*/
  NVIC_Configuration();


  /* GPIO configuration ------------------------------------------------------*/
  GPIO_Configuration();


  LcdShow_Init();


  /* DMA1 channel1 configuration ----------------------------------------------*/
  DMA_DeInit(DMA1_Channel1);
  DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;//外设地址
  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADC_RCVTab;//内存地址
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//dma传输方向单向
  DMA_InitStructure.DMA_BufferSize = 160;//设置DMA在传输时缓冲区的长度 word
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//设置DMA的外设递增模式,一个外设
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//设置DMA的内存递增模式,
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设数据字长
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//内存数据字长
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//设置DMA的传输模式:连续不断的循环模式
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;//设置DMA的优先级别
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//设置DMA的2个memory中的变量互相访问
  DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  
  /* Enable DMA1 channel1 */
  DMA_Cmd(DMA1_Channel1, ENABLE);


  /* ADC1 configuration ------------------------------------------------------*/
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//独立工作模式
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;//扫描方式
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//连续转换
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发禁止
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据右对齐
  ADC_InitStructure.ADC_NbrOfChannel = 8;//用于转换的通道数
  ADC_Init(ADC1, &ADC_InitStructure);


  /* ADC1 regular channels configuration [规则模式通道配置]*/ 
  ADC_RegularChannelConfig(ADC1, ADC_Channel_8 , 1, ADC_SampleTime_239Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_9 , 2, ADC_SampleTime_239Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 3, ADC_SampleTime_239Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 4, ADC_SampleTime_239Cycles5);  
  ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 5, ADC_SampleTime_239Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 6, ADC_SampleTime_239Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 7, ADC_SampleTime_239Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 8, ADC_SampleTime_239Cycles5); 


  /* Enable ADC1 DMA [使能ADC1 DMA]*/
  ADC_DMACmd(ADC1, ENABLE);
  
  /* Enable ADC1 [使能ADC1]*/
  ADC_Cmd(ADC1, ENABLE); 


  /* Enable ADC1 reset calibaration register */   
  ADC_ResetCalibration(ADC1);
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1));


  /* Start ADC1 calibaration */
  ADC_StartCalibration(ADC1);
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC1));
  
  /* Start ADC1 Software Conversion */
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);

}


关键字:STM32  ADC  多通道转换 引用地址:STM32 ADC 规则多通道转换

上一篇:STM32学习笔记之ADC转换
下一篇:STM32F1外部中断的使用

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

STM32F103VET6——ADC单通道中断读取实验讲解
编程要点 Define GPIO ADC_InitTypeDef ADC时钟 通道的转换顺序和采样时间 使能ADC转换完成中断 使能ADC转换开始 校准ADC 选取ADC转化触发源 配置中断优先级 编写中断服务函数 main函数 /*-----GPIO-----*/ static void ADC_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; ADC_GPIO_APBxClock_FUN ( ADC_GPIO_CLK, ENABLE ); GPIO_InitStructure.GPIO_Pin = ADC_PIN; //必须为模拟输入 GPIO
[单片机]
STM32之JTAG、SWD模式
说在前面的话 最近YKY项目做了新的硬件设计,其中键盘接口采用矩阵式键盘(4*4),有两个接口使用了STM32 (PB3、PB4), 调试中发现,这两个接口对应的两行均不能正常扫描到按键值,查看数据手册才知道这是系统接口,需要进行设置才可以 作为普通IO口使用。如图是数据手册对这两个接口的介绍: 解决方法 寄存器版本: 1 //JTAG模式设置,用于设置JTAG的模式 2 //mode:jtag,swd模式设置;00,全使能;01,使能SWD;10,全关闭; 3 //#define JTAG_SWD_DISABLE 0X02 4 //#define SWD_ENABLE 0X01
[单片机]
ARM开发步步深入之掌握ADC和触摸屏
实验目的:通过串口显示输入的电压值及采集按下触摸屏的(x,y)坐标值借此掌握S3C2410的ADC和触摸屏的使用。 实验环境及说明:恒颐S3C2410开发板H2410。H24X0E扩展板上AIN0~AIN1输出悬空,通过外接可变电阻电路采样电压值;外接的触摸屏接口实现扩展触摸屏完成相应操作本实验基于夏普3.5英寸LQ035Q7DB02。 实 验思路:开发板上电启动后,自动将NandFlash开始的4K数据复制到SRAM中,然后跳转到0地址开始执行。关闭看门狗、初始化SDRAM及 NandFlash控制器、设置MPLL来改变FCLK、HCLK、PCLK的值,设置堆栈,复制4KB后的16KB数据到SDRAM,之后进入main 函数中进
[单片机]
STM32中断优先级和开关总中断开关
简介:STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 一,中断优先级: 当两个中断源的抢占式优先级相同时: 1.这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。 2.如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;
[单片机]
STM32 定时器输入捕获注意点
使用的是stm32f103rct6. 最近在写一个单定时器捕获4路pwm波的程序,那就必须在中断函数中改变检测边沿,通过手动记录捕获值来手动计算pwm的频率和脉宽值。 网上也有很多相关程序,但是我在写的时候却碰到了一个对于初学者来说非常不起眼的问题,导致结果怎么都不对: 如图中所示,我正在用TIM4_CH1,因为看见其他的结构体都是自己定义一边再使用的,于是我将‘TIM_TypeDef’这个结构体也自己定义了一个对象‘TIM4_Type’然后就发现结果不对。 后来仔细分析后发现这个结构体已在stm32f10x.h中有了对象实例:TIM4。并且这个TIM4所在的地方正是那些寄存器所处的地方,而我自己定义的对象‘TIM4_Type’是
[单片机]
<font color='red'>STM32</font> 定时器输入捕获注意点
STM32串口中断的一些资料
在研究STM32串口接收发送中断的时候找到不少不错的资料,现在备份在这里。以供自己查阅,以及方便其他人。 TC ====TXE 顺便预告下最近会写个有关串口处理数据的帖子,从查询和中断方面以及数据处理的方式,从队列以及FIFO方面写起。 SECTION 1 SECTION 2 先说TC。即Transmission Complete。发送一个字节后才进入中断,这里称为 发送后中断 。和原来8051的TI方式一样,都是发送后才进中断,需要在发送函数中先发送一个字节触发中断。发送函数如下 /* 功能:中断方式发送字符串.采用判断TC的方式.即 判断 发送后中断 位. 输入:字符串的首地址 输出:无 */ void U
[单片机]
STM32 ADC采样配置
简介: 本次ADC采样主要采用stm32 103XB 芯片,用于对温度和漏电的采样。此次会进行最多16路的采样。ADC采集16路模拟信号,并由DMA传输到内存,之后从内存中提取数据进行计算。此次记录主要以配置为主,不同的情况下,采用的计算方式不同没有太大必要。系统时钟是72MHz。 正文程序及解释: #include stm32f10x.h #include #include ADC.h #define ADC_COUNT 320 //每通道采 320次 次数可修改 //0-15通道单次转换(0-4095) 定义范围(-32768~+32768)有符号16位 volatile int16_t ADC_V
[单片机]
用于时间交织ADC的高精度开环跟踪保持电路设计
0  引言   随着数字通信系统的发展,高速数字处理系统对模拟信号和数字信号之间的转换要求越来越高。目前高性能模数转换器(ADC)的两大主要发展方向是高速、中低精度ADC和低速、高精度ADC。前端T&H电路通常是ADC设计的一个关键,其动态精度的好坏直接影响着ADC性能的优劣。   1 开环T&H电路   在超高速ADC的设计中,一般多采用全并行Flash结构或者是时间交织结构。   而在时间交织结构中,其前端T&H电路则可以根据设计要求分别采用开环或者闭环结构。闭环结构速度较低,精度较高,而开环结构速度高,但本身精度较低。本设计中采用后者。   T&H电路的失真主要来源于非线性MOS开关电阻、开关寄生电容和开
[电源管理]
用于时间交织<font color='red'>ADC</font>的高精度开环跟踪保持电路设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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