解析CKS32F107xx系列ADC采样使用的DMA模式的原理和配置方法

2024-07-08 中科芯MCU公众号
CKS32F107xx,中科芯 CKS32F107xx,中科芯 CKS32F107xx,中科芯 CKS32F107xx,中科芯

因为ADC规则组数据寄存器ADC_DR只有一个,如果使用多通道转换,那转换的数据就全部都挤在ADC_DR里面了,前一个时间点转换的通道数据,就会被下一个时间点的另外一个通道转换的数据覆盖掉,所以当通道转换完成后就应该把数据取走,或者开启DMA模式,把数据传输到内存里面,不然就会造成数据的覆盖。多通道ADC采集一般使用DMA进行数据传输,该方法更加高效方便。


注:只有ADC1拥有DMA功能。由ADC2转化的数据可以通过双ADC模式,利用ADC1的DMA功能传输。 


DMA间接

直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。 两个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。ADC1使用的是DMA1的通道1。


DMA初始化结构体详解

DMA_InitTypeDef初始化结构体结构体用于设置DMA的工作参数,其具体的定义如下:

typedef struct

{

  uint32_t DMA_PeripheralBaseAddr;

  uint32_t DMA_MemoryBaseAddr;    

  uint32_t DMA_DIR;               

  uint32_t DMA_BufferSize;        

  uint32_t DMA_PeripheralInc;     

  uint32_t DMA_MemoryInc;         

  uint32_t DMA_PeripheralDataSize;

  uint32_t DMA_MemoryDataSize;     

  uint32_t DMA_Mode;               

  uint32_t DMA_Priority;         

  uint32_t DMA_M2M;              

}DMA_InitTypeDef;


1) DMA_PeripheralBaseAddr:外设地址,设定DMA_CPAR寄存器的值;一般设置为外设的数据寄存器地址,如果是存储器到存储器模式则设置为其中一个存储器地址。我么是把ADC采集到的数据通过DMA传输到存储器上,则外设地址为ADC的数据寄存器。


2) DMA_Memory0BaseAddr:存储器地址,设定DMA_CMAR寄存器值;一般设置为我们自定义的用来存放ADC数据的数组地址。


3) DMA_DIR:传输方向选择,可选外设到存储器、存储器到外设。它设定DMA_CCR寄存器的DIR[1:0]位的值。这里并没有存储器到存储器的方向选择,当使用存储器到存储器时,只需要把其中一个存储器当作外设使用即可。本章选择为外设到存储器。 


4) DMA_BufferSize:设定待传输数据数目,初始化设定DMA_CNDTR寄存器的值,其大小等于我们定义的存储ADC数据的数组大小。


5)DMA_PeripheralInc:如果配置为DMA_PeripheralInc_Enable,使能外设地址自动递增功能,它设定DMA_CCR寄存器的PINC位的值;因为ADC转换的数据都存放在一个数据寄存器中,则外设地址不变。 


6) DMA_MemoryInc:如果配置为DMA_MemoryInc_Enable,使能存储器地址自动递增功能,它设定DMA_CCR寄存器的MINC位的值;因为我们自定义的数组用来存放两个数据,所以要使能存储器地址自动递增功能。


7) DMA_PeripheralDataSize:外设数据宽度,可选字节(8位)、半字(16位) 和字(32位),它设定DMA_CCR寄存器的PSIZE[1:0]位的值。


8) DMA_MemoryDataSize:存储器数据宽度,可选字节(8位)、半字(16位) 和字(32位),它设定DMA_CCR寄存器的MSIZE[1:0]位的值。外设和存储器单位均为两个字节。


9) DMA_Mode:DMA传输模式选择,可选一次传输或者循环传输,它设定DMA_CCR寄存器的CIRC位的值。例程我们的ADC采集是持续循环进行的,所以使用循环传输模式。当启动了循环模式,数据传输的数目变为0时,将会自动地被恢复成配置通道时设置的初值,DMA操作将会继续进行。


ADC的工作参数配置

// 只使用一个ADC,属于单模式

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=2;

// 初始化ADC

ADC_Init(ADC1, &ADC_InitStructure);

// 配置ADC时钟N狿CLK2的8分频,即9MHz

RCC_ADCCLKConfig(RCC_PCLK2_Div8);

// 配置ADC 通道的转换顺序和采样时间

ADC_RegularChannelConfig(ADC1, ADC_CHANNEL1, 1, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_CHANNEL2, 2, ADC_SampleTime_55Cycles5);

// 使能ADC DMA请求

ADC_DMACmd(ADC1, ENABLE);

// 开启ADC,并开始转换

ADC_Cmd(ADC1, ENABLE);

// 初始化ADC校准寄存器  

ADC_ResetCalibration(ADC1);

// 等待校准寄存器初始化完成

while(ADC_GetResetCalibrationStatus(ADC1));

// ADC开始校准

ADC_StartCalibration(ADC1);

// 等待校准完成

while(ADC_GetCalibrationStatus(ADC1));

// 由于没有采用外部触发,所以使用软件触发ADC转换

ADC_SoftwareStartConvCmd(ADC1, ENABLE);


因为只是使用一个ADC,所以模式配置为独立模式;例程中使用了ADC1的两个通道进行采集,因此需要开启扫描模式,当一个通道转换结束时,同一组的下一个通道将被自动转换;例程实现不间断的对外部模拟数据进行采集,因此使能连续转换模式。ADC的转换采用软件触发的方式,因此不使用外部触发转换信号。转换结果右对齐;转换通道数为2;因为是两个通道进行采集,所以调用ADC_RegularChannelConfig()函数设置每个通道的转换顺序和采样时间。

授权代理商:世强先进(深圳)科技股份有限公司
技术资料,数据手册,3D模型库,原理图,PCB封装文件,选型指南来源平台:世强硬创平台www.sekorm.com
现货商城,价格查询,交期查询,订货,现货采购,在线购买,样品申请渠道:世强硬创平台电子商城www.sekorm.com/supply/
概念,方案,设计,选型,BOM优化,FAE技术支持,样品,加工定制,测试,量产供应服务提供:世强硬创平台www.sekorm.com
集成电路,电子元件,电子材料,电气自动化,电机,仪器全品类供应:世强硬创平台www.sekorm.com
  • +1 赞 0
  • 收藏
  • 评论 0

本文由犀牛先生转载自中科芯MCU公众号,原文标题为:MCU微课堂|CKS32F107xx系列 ADC(二),本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

评论

   |   

提交评论

全部评论(0

暂无评论

相关推荐

解析中科芯CKS32F107xx系列MCU的GPIO配置

本文中中科芯来给大家介绍CKS32F107xx系列MCU的GPIO配置,希望对各位工程师有所帮助。GPIO是通用输入输出端口的简称,也是CKS32可控制的引脚,CKS32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。

设计经验    发布时间 : 2024-06-12

中科芯CKS32F107xx系列时钟介绍:MCU时钟树应用指南

​作为MCU运行的基础,时钟是MCU各个模块工作时序的最小时间单位,推动MCU的各指令执行,是MCU选型的一个重要指标。CKS32F107xx系列MCU具有众多的外设,但并非所有的外设均需要系统时钟的高频率,并且高时钟频率将导致功耗增加、抗电磁干扰能力变弱,因此,CKS32F107xx系列MCU内部具备多个时钟源。本文将对CKS32F107xx系列时钟组成进行介绍,以帮助让用户对系统时钟了解。

设计经验    发布时间 : 2024-05-22

解析中科芯CKS32F107xx MCU的DAC模块

DAC即数模转换器,它可以将数字信号转换为模拟信号。在常见的数字信号系统中,传感器信号被ADC模块把电压模拟信号转换成易于计算机存储、处理的数字信号,由计算机处理完成后,再由DAC模块转化输出电压模拟信号来驱动某些执行器件。本文将为您解析CKS32F107xx MCU的DAC特点和结构。

设计经验    发布时间 : 2024-08-28

CKS32F105xx CKS32F107xx 32位基于ARM核心的带512K字节闪存的微控制器

型号- CKS32F107VX,CKS32F107XX,CKS32F105VX,CKS32F105XX,CKS32F107XX 系列,CKS32F105RCT6XXX,CKS32F107CX,CKS32F105CX,CKS32F0103XX,CKS32F103XX 系列,CKS32,CS32F107XX,CKS32F107RX,CKS32F105RX,CKS32F105XX 系列

数据手册  -  中科芯  - 2021.6.10 PDF 中文 下载

中科芯CKS32F107xx系列微控制器ADC应用指南

CKS32F107xx系列产品提供2个12位的模拟/数字转换器(ADC),每个ADC共用多达16个外部通道,各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。

设计经验    发布时间 : 2024-07-08

中科芯MCU-CKS32F107xx系列TIM定时器应用指南

本节课我们将介绍互联型产品CKS32F107xx系列的定时器使用,CKS32F107xx的定时器资源比较丰富,包含2个高级定时器,10个通用定时器,2个基本定时器,以及两个看门狗定时器和一个系统定时器,共达17个定时器之多。关于定时器部分内容的讲解我们将分4个部分展开,本节将围绕定时器的定时原理展开,并以简单定时配置操作演示。

设计经验    发布时间 : 2024-08-28

【产品】32位微控制器CKS32F105xx和CKS32F107xx,基于ARM核心,带512K字节闪存

CKS32F105xx、CKS32F107xx MCU系列使用高性能的ARM® Cortex™-M3 32位的RISC内核,工作频率为144MHz,内置高速存储器(高达512K字节的闪存和96K字节的SRAM),丰富的增强I/O端口和联接到两条APB总线的外设。

产品    发布时间 : 2023-03-28

中科芯CKS32F107xx系列MCU-双重ADC模式应用指南

本文基于中科芯CKS32F107xx系列MCU介绍双重ADC模式。

设计经验    发布时间 : 2024-08-13

解析CKS32F107xx系列MCU的中断和事件

本章节首先将以MCU开发人员常接触到的“中断”、“事件”和“中断事件”三个名词的概念展开,然后去阐述彼此的主要区别,最后借助MCU的GPIO外部中断/事件控制器(EXTI)的传输路径来加深对上述概念的理解。

设计经验    发布时间 : 2024-06-18

中科芯CKS32F107xx系列MCU内部温度传感器ADC采集应用指南

中科芯推出的CKS32F107xx系列MCU有一个内部的温度传感器,可以用来测量MCU及周围的温度(TA)。该温度传感器在内部和ADCx_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值。

设计经验    发布时间 : 2024-08-13

中科芯(CETC)32位MCU选型指南

目录- 公司简介    MCU    MCU型号定义&封装参考    MCU开发工具    LoRa/ NB-IoT    LoRa/ NB-IoT产品简介    MCU应用案例   

型号- CKS32F103V8T6,CKS32F031K6U6,CKS32F102C6T6,CKS32F417ZET6,CKS32F105VDT6,CKS32F107,SX1262,CKS32F105,CKS32F102R4T6,CKS32F103,CKS32F101,CKS32F102,CKS32F101R6T6,CKS32F103C4T6,CKS32F051K6U6,CKS32F101ZCT6,CKS32F030F6P6,CKS32F101VET6,CKS32F417VGT6,SX1280,CKS32L063C8T6,CKS32F031F4P6,CKS32F101C8T6,CKS32F107V8T6,SX1278,CKS32F103RCT6,CKS32F107RBT6,CKS32F051K6T6,CKS32F405ZGT6,TP20L607,CKS32F103ZET6,CKS32L052R6T6,CKS32L052C8T6,CKS32F105VCT6,CKS32F107系列,CKS32F105RET6,CKS32L051系列,CKS32L051R8T6,CKS32L053C6T6,CKS32F101ZDT6,CRF-62,CKS32F072R6T6,CKS32F051系列,CKS32F103RDT6,CKS32F072C8T6,CKS32F103VBT6,CKS32F030K6T6,CKS32F042K8T6,CKS32F407VET6,CKS32F103R4T6,CKS32F415系列,CKS32F103ZDT6,CKS32F102C8T6,CKS32F417ZGT6,CKS32F042系列,CKS32F105VBT6,CKS32F030R8T6,CKS32F102R6T6,CKS32F105RDT6,CRF62-LKWAN-CY,CKS32F103C6T6,CKS32L052系列,CKS32F030K6U6,CKS32F102系列,CKS32F101R8T6,CKS32F030F4P6,CKS32F101ZET6,CKS32L063R8T6,CKS32F101CBT6,CKS32F031系列,CKS32F107R8T6,CKS32F031G6U6,CKS32F103RET6,CKS32L051K6T6,CRF1278系列,CKS32F415RGT6,CKS32L063系列,CKS32F103VCT6,CKS32F051C8T6,CKS32F103ZCT6,CKS32F417IET6,CKS32L052R8T6,CKS32F105RCT6,CKS32L053系列,CRF1278,CKS32F051R8T6,CKS32F101系列,CKS32L053C8T6,CKS32F072CBT6,CKS32F105V8T6,CKS32F407ZET6,CKS32F101RBT6,CKS,CKS32F030系列,CKS32F072R8T6,CRF62-L2,CRF62-L5,CKS32F042C6T6,CKS32F103VDT6,CKS32L053R6T6,CKS32F107VET6,CKS32F407VGT6,CKS32F103R6T6,CKS32F417系列,CKS32F030C8T6,CKS32F102R8T6,CKS32F105RBT6,CKS32F031C6T6,CKS32F103C8T6,CKS32F102CBT6,CKS32F405系列,CKS32F101RCT6,CKS32L052K6T6,CKS32F415VGT6,CKS32F031G4U6,CKS32F103VET6,CKS32F107VDT6,CKS32F051,CKS32F051C6T6,CKS32L051K8T6,CKS32F417IGT6,CRF-62系列,CRF62-WAN,CKS32,CKS32F103系列,CKS32F072RBT6,CKS32F042,CKS32F407IET6,CKS32F405RGT6,CRF1280-12S,CKS32F107RET6,CKS32F407ZGT6,CKS32F101VBT6,CKS32F102RBT6,CKS32F101RDT6,CKS32L053R8T6,CKS32F031,CKS32F103R8T6,CKS32F042C8T6,CKS32F107VCT6,CKS32F030,CRF1278-L3,CRF1278-L1,CKS32F030C6T6,XY1100,CRF1278-L4,CKS32F103CBT6,CKS32F030K6,CKS32F102C4T6,ASR6601,CKS32F101R4T6,CKS32F105R8T6,CKS32F051K8U6,CKS32F407系列,CKS32F107RDT6,CKS32F101VCT6,CKS32F415ZGT6,CKS32F101RET6,CKS32L052K8T6,CKS32F417,CKS32F417VET6,CKS32F101C6T6,CKS32F415,CKS32F031F6P6,CKS32F107VBT6,CKS32L051C6T6,CKS32F051K8T6,TP20H607,CKS32L051C8T6,CKS32F042K6T6,CKS32L052C6T6,ASR6505,CKS32F105VET6,CKS32F407,CKS32F405,ASR6501,ASR6502,CKS32X...,CKS32F105系列,CKS32L051R6T6,CKS32L063,CKS32F407IGT6,CKS32F405VGT6,CKS32F072,CKS32F101VDT6,CKS32F072系列,CKS32F031K6T6,CKS32F103RBT6,CKS32F072C6T6,CRF1100-N1,CKS32L052,CKS32F107RCT6,CKS32L051,CKS32L053

选型指南  -  中科芯  - 2022/4/24 PDF 中文 下载

【选型】中科芯32位MCU可作为STM32F103ZET6的备选方案用于电机状态监测系统,多个性能参数相同

中科芯32位MCU CKS32F103ZET6在资源、主频、工作电压、封装上和STM32F103ZET6相同,同时二者的引脚位和定义也都是相同的。在电机监测系统中可作为STM32F103ZET6的备选方案,同时也可以满足报警系统、工业应用、可编程控制器等领域的应用需求。

器件选型    发布时间 : 2021-12-07

中科芯亮相2024慕尼黑上海电子展,集中展示高性能/低功耗等多系列芯片产品及相关创新应用成果

2024年7月8日-10日,备受全球电子行业瞩目的2024慕尼黑上海电子展在上海新国际博览中心盛大开幕。中科芯在本次展会中集中展示了高性能/低功耗等多系列MCU芯片、逻辑器件、驱动芯片、信号链芯片及相关创新应用成果,涵盖汽车电子、工业控制、消费电子等行业领域。副总经理蒋和全出席本次展会并指导。

厂牌及品类    发布时间 : 2024-07-17

【经验】中科芯CKS32F1系列MCU替代其他厂牌产品兼容性问题处理注意事项

中科芯基于ARM Cortex-M3的CKS32F1系列MCU功耗较国外品牌低20%,有多种低功耗模式。多重、多样化保护机制,自定义分级读写保护更是提高了产品的安全性。但是在与其他品牌产品进行替换时会遇到一些兼容性问题,在此将常见的问题和解决办法进行说明。

设计经验    发布时间 : 2020-03-08

展开更多

电子商城

查看更多

只看有货

品牌:中科芯

品类:32位微控制器

价格:

现货: 0

品牌:中科芯

品类:32位微控制器

价格:¥8.8000

现货: 103,443

品牌:中科芯

品类:32位微控制器

价格:¥11.0000

现货: 102,183

品牌:中科芯

品类:32位微控制器

价格:¥6.0000

现货: 102,000

品牌:中科芯

品类:32位微控制器

价格:¥11.3000

现货: 100,239

品牌:中科芯

品类:32位微控制器

价格:¥50.0000

现货: 100,188

品牌:中科芯

品类:32位微控制器

价格:¥7.1400

现货: 100,165

品牌:中科芯

品类:32位微控制器

价格:¥64.0000

现货: 100,016

品牌:中科芯

品类:微控制器

价格:¥25.0000

现货: 100,000

品牌:中科芯

品类:32位微控制器

价格:¥16.4000

现货: 82,670

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

现货市场

查看更多

品牌:中科芯

品类:32位微控制器

价格:¥8.5000

现货:10,000

品牌:

品类:

价格:

现货:

世强和原厂的技术专家将在一个工作日内解答,帮助您快速完成研发及采购。
我要提问

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

研发客服
商务客服
服务热线

联系我们

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

投诉与建议

E-mail:claim@sekorm.com

商务合作

E-mail:contact@sekorm.com

收藏
收藏当前页面