定时器控制一个ADC实现双通道采样(TIM+ADC+DMA)
使用TIM控制采样频率 实现对采样率的控制
一、使用CubeMX配置工程选择对于开发板
1.配置时钟RCC
RCC选择外部高数时钟。
注意时间树配置,尽量使用最高频率。其中F769的ADC1使用的是APB2。
2.TIM2配置
PSC和Period根据需求配置,这一步确定定时器频率。
注意开启TIM中断。
3.ADC1配置
开启IN6和IN12
ADC配置
添加DMA搬运ADC
4.DMA配置
5.NVIC检查一下中断开启情况
6.开启串口方便调试
USART1开启异步传输其他默认即可
PA9、PA10管脚开启收发功能。
二、Keil里完成代码编写
1.定义一个2048大小的数组用来存放双通道数据,每个通道数据交替存放在数组内,需要后期将其分离。
int ADC_ConvertedValue1[2048];//双通道混合
float ADC_Value1_A0[1024];//通道1
float ADC_Value1_A1[1024];//通道2
初始化后开启TIM和ADC_DMA
HAL_TIM_Base_Start_IT(&htim2);HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_ConvertedValue1,2048);//开始ADC1的DMA传输
在TIM2中断服务函数设置计数值flag
while循环中可以设置更新时间,处理采样数据。
2048/5120=0.4s更新一次数据。
while (1){/* USER CODE END WHILE */if(flag0==2048){flag0=0;
// HAL_TIM_Base_Stop_IT(&htim2);for(int a=0;a<2048;a++){if(a%2==0){ADC_Value1_A0[a/2]=ADC_ConvertedValue1[a]*3.3/4095;//通道1数据}else if(a%2==1){ADC_Value1_A1[(a-1)/2]=ADC_ConvertedValue1[a]*3.3/4095;//通道1数据}}
// for(int i=0;i<1024;i++)
// {// printf("%3.2f\n",ADC_Value1_A1[i]);
// }HAL_TIM_Base_Start_IT(&htim2);HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_ConvertedValue1,1024);//开始ADC1的DMA传输}/* USER CODE BEGIN 3 */}
可以根据需求改变计数周期和开启ADC_DMA时间。
printf串口重定向:
/* USER CODE BEGIN PTD */
#include "stdio.h"
#ifdef __GNUC__ //编译器预宏定义
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch,FILE*f)
#endif
//以上代码实现的是宏定义PUTCHAR_PROTOTYPE
/* USER CODE END PTD */
/* USER CODE BEGIN 4 */
/*printf函数重定向(2/2)*/
PUTCHAR_PROTOTYPE
{HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xFFFF);//huart2此处书中为huart1不可用return ch;
}
/* USER CODE END 4 */
定时器控制一个ADC实现双通道采样(TIM+ADC+DMA)相关推荐
- STM32F0 定时器触发ADC,多通道采样、DMA传输数据的配置
本块代码实现了定时器定时触发ADC,多通道采样,并通过DMA进行数据传输到内存的操作. #include "adc.h" [cpp] view plaincopy #defi ...
- STM32F4时钟触发ADC双通道采样DMA传输进行FFT+测频率+采样频率可变+显示波形(详细解读)...
此文转载自:https://blog.csdn.net/qq_45620831/article/details/110819495 写在前面的婆婆妈妈的话 本人大三,参加过数次电赛,来CSDN好久, ...
- STM32F4时钟触发ADC双通道采样DMA传输进行FFT+测频率+采样频率可变+显示波形(详细解读)
写在前面的婆婆妈妈的话(代码链接在最下方) 本人大三,参加过数次电赛,来CSDN好久, 每次都是在绝望中从这里找到了希望,每次都仿佛一个即将被怪兽打翻的小船突然被危险流浪者救起来.是众多前辈的智慧,让 ...
- STM32CubeMX | HAL库的ADC多通道数据采集(轮训、DMA、DMA+TIM)、读取内部传感器温度
STM32CubeMX | HAL库的ADC多通道数据采集(轮训.DMA.DMA+TIM).读取内部传感器温度 目录 STM32CubeMX | HAL库的ADC多通道数据采集(轮训.DMA.DMA+ ...
- STM32F4系列探究1——三重ADC扫描连续采样+DMA双缓冲区存储
文章目录 前言 一.STM32F4的ADC理论知识学习 1.基础知识 2.扫描模式与连续模式 3.单ADC模式下双缓存机制的实现 4.三重同步采样模式 二.由定时器触发的单缓冲区模式 1.时钟树配置 ...
- adc采样时间_太秀了!单片机内置 ADC 实现高分辨率采样?
作者 | 逸珺来源 | 嵌入式客栈(ID:embInn)头图 | CSDN 下载自东方IC[导读] 相信ADC的应用或多或少都会用到,在很多场合都有分辨率要求,要实现较高分辨率时,第一时间会想到采用 ...
- 太秀了!单片机内置 ADC 实现高分辨率采样?
作者 | 逸珺 来源 | 嵌入式客栈(ID:embInn) 头图 | CSDN 下载自东方IC [导读] 相信ADC的应用或多或少都会用到,在很多场合都有分辨率要求,要实现较高分辨率时,第一时间会想 ...
- STM32三个ADC同步规则采样
同步采样一般应用于交流信号中,是指多个ADC的采集时刻完全同步.在电力测量领域,经常会遇到需要同步采样的情况,比如同步采样电压电流信号,计算其相位差.阻抗分析时,也需要对输入输出信号进行同步采集,分析 ...
- 关于STM32利用TIM+PWM+DMA控制WS2812
开发环境 MCU:STM32F103c8t6 开发工具:STM32CubeMX 使用板子参考原理图:STM32F103C8T6最小系统板开源链接 PWM 脉宽调制(PWM)基本原理:控制方式就是对逆变 ...
- stm32 adc 连续和扫描_技术分享 | STM32多个ADC模块同时采样转换的应用示例
在STM32家族里,多数系列芯片内含2到3个ADC模块,有的甚至更多,比方G4系列可以有5个ADC模块.其中,通道数因不同的系列或型号多少不等,几个到几十个的都有.有时,我们可能需要多个ADC模块同时 ...
最新文章
- 批处理实现从Excel导入Oracle
- jquery1.6中的.prop()和.attr()异同
- 电力“十三五”蓝图发布 新能源迎发展机遇
- php未正确拼写字 css,前端Bug解决方案
- JSONObject 自定义过滤配置
- java 反射泛型方法_java基础之反射和泛型以及注解
- R 学习 - 功能富集泡泡图
- 怎么设置android studio的field前缀
- 微课|中学生可以这样学Python(例11.1):tkinter电子时钟程序(2)
- 2018年了,Windows2000还能用吗?
- 计算机桌面文件夹消失了,电脑桌面文件不见了怎么恢复?再也不担心系统故障...
- ai杀手级_设计师的10个杀手级Adobe Photoshop技巧
- MySQL课程超级团,值得再提一次。
- 翁恺c语言程序设计入门期末,程序设计入门-C语言 翁恺.doc
- python from win32com import client 出现弹框 隐藏模块中出现编译错误
- 培训班出来,碰到查学历,哎宝宝苦。
- java12.0.1版本环境变量设置,2019年5月16,小白笔记
- 带你了解什么是MySQL数据库(一)
- 域名国家工程研究中心(ZDNS)培训认证中心正式成立
- Android性能优化系列篇(五):弱网优化