GD32F407 ADC双重模式 多通道 DMA配置分享
平台使用的是GD32F407VET6,使用的是ADC0和ADC1,规则通道,采样时间为28个时间周期,转换时间为12个时间周期,得到一次有效值的时间为40个时间周期,采样时钟为21MHz. 触发方式为软件触发,触发使能必须放在ADC使能之后。
具体代码配置如下
uint16_t ADC_ConVal[MAX_LEN * (ADC1_CHN + ADC2_CHN)] = {0}; // ADC存储数据/*** @brief ADC初始化 采集数据* @param None* @retval None*/
void Adc_Init(void)
{/*=============================配置ADC对应的GPIO=============================*/rcu_periph_clock_enable(RCU_GPIOA); // 初始化GPIOA时钟gpio_mode_set(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3); // PA0,PA1,PA2,PA3/*=============================时钟使能=============================*/rcu_periph_clock_enable(RCU_DMA1); // 使能DMA1时钟rcu_periph_clock_enable(RCU_ADC0); // 使能ADC0时钟rcu_periph_clock_enable(RCU_ADC1); // 使能ADC1时钟adc_clock_config(ADC_ADCCK_PCLK2_DIV4); // 配置ADC时钟 4分频 21MHz/*=============================配置ADC对应的DMA=============================*/dma_single_data_parameter_struct dma_single_data_parameter;dma_deinit(DMA1, DMA_CH0); // 复位DMA1通道0dma_single_data_parameter.periph_addr = (uint32_t)(&ADC_SYNCDATA); // ADC_SYNCDATA寄存器的地址dma_single_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE; // 外设地址是否为增量模式dma_single_data_parameter.memory0_addr = (uint32_t)(ADC_ConVal); // 存储数据的地址dma_single_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE; // 存储器地址是否为增量模式dma_single_data_parameter.periph_memory_width = DMA_PERIPH_WIDTH_16BIT; // 半字dma_single_data_parameter.circular_mode = DMA_CIRCULAR_MODE_ENABLE; // 循环模式dma_single_data_parameter.direction = DMA_PERIPH_TO_MEMORY; // 外设到存储器dma_single_data_parameter.number = MAX_LEN * (ADC1_CHN + ADC2_CHN); // DMA缓存大小dma_single_data_parameter.priority = DMA_PRIORITY_HIGH; // DMA优先级,高优先级dma_single_data_mode_init(DMA1, DMA_CH0, &dma_single_data_parameter); // 初始化dma_channel_enable(DMA1, DMA_CH0); // 使能DMA通道adc_deinit(); // 复位ADC/*=============================配置ADC=============================*/adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 2); // ADC0通道数2adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, 2); // ADC1通道数2adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_0, ADC_SAMPLETIME_28);adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_1, ADC_SAMPLETIME_28);adc_regular_channel_config(ADC1, 0, ADC_CHANNEL_2, ADC_SAMPLETIME_28);adc_regular_channel_config(ADC1, 1, ADC_CHANNEL_3, ADC_SAMPLETIME_28);adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT); // 右对齐adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT); // 右对齐adc_sync_mode_config(ADC_DAUL_REGULAL_PARALLEL);adc_sync_dma_config(ADC_SYNC_DMA_MODE0);adc_sync_dma_request_after_last_enable();adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE); // 扫描模式adc_special_function_config(ADC1, ADC_SCAN_MODE, ENABLE); // 扫描模式adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE); // 连续模式adc_special_function_config(ADC1, ADC_CONTINUOUS_MODE, ENABLE); // 连续模式adc_enable(ADC0);delay_1ms(1);adc_calibration_enable(ADC0);adc_enable(ADC1);delay_1ms(1);adc_calibration_enable(ADC1);adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);adc_software_trigger_enable(ADC1, ADC_REGULAR_CHANNEL);
}
GD32F407 ADC双重模式 多通道 DMA配置分享相关推荐
- 24Bit Σ-Δ ADC——AD7124的多通道初始化配置
24Bit Σ-Δ ADC--AD7124的多通道初始化配置 一.前言 二.ADC寄存器介绍 1. 配置寄存器 2. 滤波寄存器 3. 偏置寄存器 4. 增益寄存器 5. 诊断寄存器 三.通道与CON ...
- stm32H743基于CubeMX配置为双ADC多通道DMA规则采样
stm32H743的ADC支持的最大频率为36MHz,有相关资料上说是可以超频,具体技术细节不多讨论. 需求: 使用stm32H743的ADC采集5路数据,当然还要配合DMA,现在把5路数据分在两个A ...
- ADC采集数据(DMA模式)
ADC采集数据(DMA模式) 写这篇文章,也是自己参考了一些书籍,加上自己的感悟总结之后写出来的.正所谓天下文章一大抄,取个文雅的名字叫模仿.借鉴.参考.不过这也是一种学习的方法,我想你看我这篇文章也 ...
- 基于STM32F407的ADC解析-ADC1多通道扫描模式电压采集实验(启用DMA传输数据)
目录 一:STM32F4的ADC简介 1.1 ADC简介(不看也行) 1.2 ADC的供电及采样电压 二:实验步骤及代码 2.1实验步骤 2.2实验代码 2.2.1 ADC初始化代码 2.2.2 DM ...
- STM32学习:通过DMA读取ADC规则通道多通道转换数据
1.STM32的DMA简介 直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输.无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作. ...
- STM32H743Nucleo ADC使用DMA配置无法读取数据的问题及解决
STM32H743Nucleo ADC使用DMA配置无法读取数据的问题及解决 一.对ADC进行配置 二.对程序进行修改 三.程序执行结果 四.问题解决 一.对ADC进行配置 使用STM32H743Nu ...
- GD32 Timer+ADC多通道+DMA+PWM调试记录
本例记录使用GD32307C开发板,实现以内部Timer1 CH1为触发源,触发ADC0的两个通道,进行并行非连续采样,病通过DMA传输采样结果.同时输出PWM,用来检测Timer1 CH1的触发周期 ...
- STM32的ADC采样与多通道ADC采样
一 单通道采样 参考资料: <STM32库开发实战指南> 刘火良,杨森著 原理性质的东西还是少讲,因为上面那本书里面讲解的很详细了,直接来看硬件电路图 这里使用的是3362电位器(10K ...
- STM32F4系列探究1——三重ADC扫描连续采样+DMA双缓冲区存储
文章目录 前言 一.STM32F4的ADC理论知识学习 1.基础知识 2.扫描模式与连续模式 3.单ADC模式下双缓存机制的实现 4.三重同步采样模式 二.由定时器触发的单缓冲区模式 1.时钟树配置 ...
最新文章
- Flex Basis与Width的区别
- C语言学习之购房从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少月能还清。
- Android 8.0 targetsdkversion升级到26填坑
- Scanner类的一个小例子
- 不愿意和别人打交道_最不愿与陌生人打交道的星座
- 什么叫做石英表_石英表 是什么意思??
- 在MySQL查询山东省男生信息_MySQL-查询
- java 中的wait notify
- Bailian2812 恼人的青蛙 POJ1054 The Troublesome Frog【暴力】
- Linux通过源码编译安装程序;yum和源码安转软件包的区别
- ITIL 4讲解: 变更管理
- 渗透测试全套教程(从原理到实战)
- 神经网络中的单层神经网络
- 【LeetCode-13】-罗马数字
- gmail附件调用_如何将Gmail附件保存到Google云端硬盘
- 第三章:绘制统计图形
- 借了你的爱,用我一辈子来还
- 三星临时取消Galaxy Fold中国发布会;视觉中国网站部分恢复上线?官方回应:并未恢复;特斯拉周一发布完全自动驾驶将网络直播 | 雷锋早报...
- 百度paddlepaddle入门讲解第一周内容
- 用matlab做矩阵变换(理解+实践);假设随机发给某班所有同学任意数字,生成10*5的矩阵