STM32-微项目10-ADC多通道采集+DMA数据转移

这篇具有很好参考价值的文章主要介绍了STM32-微项目10-ADC多通道采集+DMA数据转移。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、微项目实现目标:

由于ADC多通道采集在规则组中只有一个寄存器CR,实际上在多通道采集时刻,需要把每一个同都的数据及时传出,否则上一个通道的数据会被当前通道的数据给覆盖掉。

二、微项目硬件配置需求:

 stm32F103C8T6核心板一块

0.96寸OLED显示,用于显示计数

stm32 多路adc,stm32,单片机,嵌入式硬件stm32 多路adc,stm32,单片机,嵌入式硬件

三、前置知识:

1,传输数据流:

外部GPIO采集----ADC转化执行-----存放到CR寄存器中-----触发DMA转移信号----DMA硬件触发开始转移数据-----从外设寄存器DR转移到SRAM的数组中

2,

stm32 多路adc,stm32,单片机,嵌入式硬件

四、代码逻辑分析:

① 启动GPIO时钟、启动DMA1时钟、启动ADC1时钟(由于ADC最大14MHZ,还需要进行一次分频处理);

②初始化GPIO模块,本实验采用4路,分别是PA0-PA3上;配置模拟输入模式

③配置ADC输入通道开启,使用ADC_Channel_0到ADC_Channel_3,分别放置在规则组1-3通道上;

④配置ADC模块,

需要注意:1)触发模式---硬件触发;2)开启循环模式,转化完成后,重新开下一轮转化;3)开启扫描模式,表示转化序列组中依次进行转化;4)转化通道数配置4

⑤DMA通道配置。

需要注意:1)数据源起始地址选择(uint32_t)&ADC1->DR;2)数据源采用16位的半字传输;3)不自增模式,即一直在这寄存器内取数据;

4)接受方地址选择(uint32_t)arr,存放到SRAM数组中;5)接收方采用16位半字接受;6)启动自增模式;

7)配置计数器值4位;8)传输模式,采用循环传输;其余正常配置

⑥开启ADC触发DMA通道,以完成一个通道后,产生DMA转移的硬件请求信号;

⑦开启ADC电源和DMA电源

⑧配置ADC校准

⑨软件触发启动ADC

五、代码示例:

① 启动GPIO时钟、启动DMA1时钟、启动ADC1时钟(由于ADC最大14MHZ,还需要进行一次分频处理);

//打开ADC1时钟 和GPIO时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	//配置ADC1的分频,ADC最高支持14mhz
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);
	//打开DMA1时钟
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);

②初始化GPIO模块,本实验采用4路,分别是PA0-PA3上;配置模拟输入模式

/初始化GPIO模块,模拟输入模式
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AIN;
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0 |GPIO_Pin_1 |GPIO_Pin_2 | GPIO_Pin_3;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOA,&GPIO_InitStruct);

③配置ADC输入通道开启,使用ADC_Channel_0到ADC_Channel_3,分别放置在规则组1-3通道上;

//配置ad输入通道
	ADC_RegularChannelConfig( ADC1, ADC_Channel_0 , 1, ADC_SampleTime_55Cycles5);
	ADC_RegularChannelConfig( ADC1, ADC_Channel_1 , 2, ADC_SampleTime_55Cycles5);
	ADC_RegularChannelConfig( ADC1, ADC_Channel_2 , 3, ADC_SampleTime_55Cycles5);
	ADC_RegularChannelConfig( ADC1, ADC_Channel_3 , 4, ADC_SampleTime_55Cycles5);

④配置ADC模块,

需要注意:1)触发模式---硬件触发;2)开启循环模式,转化完成后,重新开下一轮转化;3)开启扫描模式,表示转化序列组中依次进行转化;4)转化通道数配置4

//初始化AD模块
	ADC_InitTypeDef  ADC_InitStruct;
	ADC_InitStruct.ADC_ContinuousConvMode=ENABLE;//循环模式
	ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right ;//转化后在寄存器内右对齐
	ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None ;//软件触发,不使用硬件触发转化
	ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;//独立模式
	ADC_InitStruct.ADC_NbrOfChannel=4;
	ADC_InitStruct.ADC_ScanConvMode=ENABLE;//扫描模式
	ADC_Init( ADC1, &ADC_InitStruct);

⑤DMA通道配置。

需要注意:1)数据源起始地址选择(uint32_t)&ADC1->DR;2)数据源采用16位的半字传输;3)不自增模式,即一直在这寄存器内取数据;

4)接受方地址选择(uint32_t)arr,存放到SRAM数组中;5)接收方采用16位半字接受;6)启动自增模式;

7)配置计数器值4位;8)传输模式,采用循环传输;其余正常配置

/DMA初始化
	DMA_InitTypeDef  DMA_InitStruct;
	DMA_InitStruct.DMA_PeripheralBaseAddr=(uint32_t)&ADC1->DR;
	DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;
	DMA_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
	
	DMA_InitStruct.DMA_MemoryBaseAddr=(uint32_t)arr;
	DMA_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord ;
	DMA_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;
	
	DMA_InitStruct.DMA_BufferSize=4;//传输计数器的值
	DMA_InitStruct.DMA_DIR=DMA_DIR_PeripheralSRC ;//方向
	DMA_InitStruct.DMA_M2M=DMA_M2M_Disable ;//存储器到存储器、存储器到外设

	DMA_InitStruct.DMA_Mode=DMA_Mode_Circular ; 
	//是否循环传输;在存储器到存储器模式下,不可循环传输
	
	DMA_InitStruct.DMA_Priority=DMA_Priority_Medium  ;
	DMA_Init( DMA1_Channel1, &DMA_InitStruct);

⑥开启ADC触发DMA通道,以完成一个通道后,产生DMA转移的硬件请求信号;

	//开启ADC-DMA硬件触发
	ADC_DMACmd( ADC1,ENABLE);

⑦开启ADC电源和DMA电源

	//开启adc电源
	ADC_Cmd(ADC1,ENABLE);
	//开启DMA电源
	DMA_Cmd(DMA1_Channel1, ENABLE);

⑧配置ADC校准

	//ADC校准
	ADC_ResetCalibration(ADC1);
	while(ADC_GetResetCalibrationStatus(ADC1)==SET);//完成后会被硬件置为reset
	ADC_StartCalibration(ADC1);
	while(ADC_GetCalibrationStatus(ADC1)==SET);
	

⑨软件触发启动ADC文章来源地址https://www.toymoban.com/news/detail-598427.html

ADC_SoftwareStartConvCmd( ADC1, ENABLE);//软件触发ADC转换

到了这里,关于STM32-微项目10-ADC多通道采集+DMA数据转移的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【正点原子STM32连载】第三十五章 多通道ADC采集(DMA读取)实验 摘自【正点原子】APM32E103最小系统板使用指南

    1)实验平台:正点原子APM32E103最小系统板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 本章介绍APM32E103的DMA进行多通道的ADC采集。通过本章的学习,读者将学习到DMA、ADC的使用。 本章分

    2024年01月24日
    浏览(51)
  • STM32-ADC多通道数据采集:理论与实践

    本文详细介绍了STM32-ADC多通道数据采集的理论基础和实践应用。文章首先解释了ADC的基本概念和特性,然后详细阐述了ADC采样的过程和注意事项。接着,文章深入讲解了多通道采集模式的轮询和DMA两种方法,并给出了具体的代码实现。

    2024年02月10日
    浏览(46)
  • STM32 ADC单/多通道采样+DMA搬运

    通过介绍我们可以了解到,ADC是12位的转换器,所以采样值范围是0~4095。18个通道可同时进行转换,也可以单独转换某个通道。 使用ADC的流程应为: 初始化IO口。 我这里使用的是PA1进行采样,也就是ADC1的通道1 初始化ADC。 转换、获取采样值。 多通道的时候我们一般用DMA来搬

    2024年02月14日
    浏览(51)
  • 基于STM32F103C8T6的高速DMA传输多通道ADC数据

    ADC在STM32系列单片机的使用中占用着很大的比例,常见的案例是通过ADC单次转换电压值,这种方式的缺陷在于转换效率不高。一般的单片机带有ADC1和ADC2两个ADC转换,单次转换需要执行一定的程序,想得到结果需要耗费一些时间在赋值,调用中断上面。在此基础上,为了提高转

    2024年02月11日
    浏览(57)
  • 【STM32F407 ADC+DMA采集压力变送器数据(HAL库)】

    之前项目中需要对麦克传感器的mpm480隔爆压力变送器(4-20ma输出)的数据进行实时采集,使用STM32F407作为控制器,使用信号转换模块将压力变送器4-20ma的输出转换为0-3.3v的信号量,输入到STM32F407板子的ADC1的通道10,并使用DMA2通道0数据流0将采集的多个值从外设直接存入存储器

    2024年02月16日
    浏览(68)
  • STM32CubeMX配置-ADC多通道配置(DMA) (STM32G070)

    一、写在前面         ADC通道采集数据的两种方式:         1)ADC轮询采集数据直接放到数组中;         2)采用中断方式,ADC采集完成进入中断,中断关闭ADC采集,取数据之后再打开ADC采集。 以下按第一种方式实现: 二、ADC多通道配置 1)配置通道及参数     如果要控

    2024年02月05日
    浏览(53)
  • STM32F407 ADC多通道采样+DMA

    我加入工作室参加的第一个比赛是第五届中国高校智能机器人创意大赛,我参加的赛项是开放部件组轮式自主格斗机器人。经历了没日没夜的调试,无数次欣赏凌晨四点半的夜晚,感受着每天就睡两三个小时伴随着疲惫的开心。在我和队友的共同努力之下,我们的成绩也很优

    2024年02月02日
    浏览(68)
  • STM32 ADC采集 DMA中断处理

    //============================================ //函数名称:ADC1_Mode_Config(void) //功能描述:配置ADC1的工作模式为MDA模式 //输入:无 //输出:无 //============================================ void ADC1_Mode_Config(void) {         DMA_InitTypeDef DMA_InitStructure;         ADC_InitTypeDef ADC_InitStructure;              

    2024年02月14日
    浏览(50)
  • STM32初学入门笔记(3):STM32CubeMX配置STM32实现多通道ADC+DMA读取模拟量

    模拟信号的读取是我们在做很多项目是都要用到的,而模拟量的读取就要依赖于ADC数模转换器。对于初学者,学习使用ADC可以很大的帮助以后的STM32学习。 目录 ADC简介 : DMA简介:  工程开始: STM32CubeMX配置区: 配置外部时钟: 配置调试: 配置ADC: 配置DMA: 配置串口: 配

    2024年02月09日
    浏览(50)
  • STM32 hal库使用笔记(五)ADC—单通道/双通道DMA传输

    实现目的:利用ADC采集光敏传感器/烟雾传感器的值,并利用串口打印 实验平台:正点原子精英版 一、简介 1.DMA的介绍 参考:STM32 hal库使用笔记(四)DMA—内存到内存/内存到外设_乱码小伙的博客-CSDN博客 2.ADC简介      ADC(Analog-Digital Converter)模拟-数字转换器 ADC可以将引脚

    2024年02月03日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包