STM32定时器触发ADC多通道连续采样,DMA缓存结果
1 RCC_ADCCLKConfig(RCC_PCLK2_Div8); //设置ADC分频因子8 72M/8=9,ADC最大时间不能超过14M ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1工作在独立模式
2
3 ADC_InitStructure.ADC_ScanConvMode = ENABLE;//模数转换工作在扫描模式(多通道)
4 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//ADC工作在非连续模式
5 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO;//定时器3的TRGO触发转换
6 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//ADC数据右对齐
7 ADC_InitStructure.ADC_NbrOfChannel = 2;//转换的ADC通道的数目为2
8 ADC_Init(ADC1, &ADC_InitStructure);//要把以下参数初始化ADC_InitStructure
9 ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 1, ADC_SampleTime_13Cycles5);//ADC1通道6 ,采样时间为13.5个周期
10 ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 2, ADC_SampleTime_13Cycles5);//ADC1通道7 ,采样时间为13.5个周期
11 ADC_DMACmd(ADC1, ENABLE); //使能ADC1的DMA传输方式
12 ADC_Cmd(ADC1, ENABLE);//使能ADC1
13 ADC_ResetCalibration(ADC1);//重置ADC1的校准寄存器
14 while(ADC_GetResetCalibrationStatus(ADC1));
15 ADC_StartCalibration(ADC1); //开始校准ADC1
16 while(ADC_GetCalibrationStatus(ADC1)); //等待校准完成
17 ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能ADC1软件转换
1 DMA_DeInit(DMA1_Channel1);
2 DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;//传输的源头地址
3 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue;//目标地址
4 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //外设作源头
5 DMA_InitStructure.DMA_BufferSize = 2000;//数据长度为2000
6 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址寄存器不递增
7 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//内存地址递增
8 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//外设传输以字节为单位
9 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//内存以字为单位
10 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//循环模式
11 DMA_InitStructure.DMA_Priority = DMA_Priority_High;//4优先级之一的(高优先)
12 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //非内存到内存
13 DMA_Init(DMA1_Channel1, &DMA_InitStructure);//根据以上参数初始化DMA_InitStructure
14
15 DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);//配置DMA1通道1传输完成中断
16 DMA_Cmd(DMA1_Channel1, ENABLE);//使能DMA1
1 NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
2 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级设置为1
3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//子优先级设置为1
4 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//中断使能
5 NVIC_Init(&NVIC_InitStructure);//按指定参数初始化中断
1 void DMA1_Channel1_IRQHandler(void)
2 {
3 if(DMA_GetITStatus(DMA1_IT_TC1))//判断通道1是否传输完成
4 {
5 DMA_ClearITPendingBit(DMA1_IT_TC1); //清除通道1传输完成标志位
6
7 ////////////此处应编写代码从DMA指向的内存区读走数据,否则可能被覆盖//////////
8
9
10 }
11 }
1 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能TIM3时钟
2
3 TIM_TimeBaseStructure.TIM_Period = 1000-1;
4 TIM_TimeBaseStructure.TIM_Prescaler = 72-1;
5 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //采样分频TIM_CKD_DIV1
6 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
7 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
8
9 TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Update);//设置输出TRGO信号
10 TIM_Cmd(TIM3, ENABLE);
STM32定时器触发ADC多通道连续采样,DMA缓存结果的更多相关文章
- STM32 ADC多通道规则采样和注入采样
layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true 什么是ADC? STM ...
- 关于Stm32定时器+ADC+DMA进行AD采样的实现
Stm32的ADC有DMA功能这都毋庸置疑,也是我们用的最多的!然而,如果我们要对一个信号(比如脉搏信号)进行定时采样(也就是隔一段时间,比如说2ms),有三种方法: 1.使用定时器中断每隔一定时间进 ...
- ADC配置成定时器触发的启发
百度文库:https://wenku.baidu.com/view/99d39413f78a6529647d5344.html STM32关于使用定时器触发ADC转换的解决办法和详细说明 本人在使用S ...
- stm32之ADC应用实例(单通道、多通道、基于DMA)
文本仅做记录.. 硬件:STM32F103VCT6 开发工具:Keil uVision4 下载调试工具:ARM仿真器 网上资料很多,这里做一个详细的整合.(也不是很详细,但很通俗). 所用的芯片内嵌 ...
- STM32 ADC多通道转换DMA模式与非DMA模式两种方法(HAL库)
一.非DMA模式(转) 说明:这个是自己刚做的时候百度出来的,不是我自己做出来的,因为感觉有用就保存下来做学习用,原文链接:https://blog.csdn.net/qq_24815615/arti ...
- stm32之ADC应用实例(单通道、多通道、基于DMA)-转载精华帖,最后一部分的代码是精华
硬件:STM32F103VCT6 开发工具:Keil uVision4 下载调试工具:ARM仿真器网上资料很多,这里做一个详细的整合.(也不是很详细,但很通俗).所用的芯片内嵌3个12位的 ...
- stm32 ADC模数转换 ADC多通道 ADC DMA
通过调节电位器,改变AD转换值和电压值 STM32F1 ADC 配置步骤 1.使能GPIO时钟和ADC时钟 2.配置引脚模式为模拟输入 3.配置ADC的分频因子 4.初始化ADC参数,ADC_Init ...
- STM32之ADC实例(基于DMA方式)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zouleideboke/article/details/75112224 ADC简介: ADC(An ...
- STM32—ADC多通道采集电压
文章目录 ADC详解 程序说明 函数主体 引脚配置 ADC和DMA配置 主函数 ADC详解 前面的博客中详细介绍了STM32中ADC的相关信息,这篇博客是对ADC内容的一个总结提升,ADC的详细介绍: ...
随机推荐
- 【LeetCode】1037. Valid Boomerang 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 中学数学题 日期 题目地址:https://leet ...
- 【LeetCode】189. Rotate Array 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 切片 递归 日期 题目地址:https://leet ...
- 【LeetCode】553. Optimal Division 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- idea使用教程-常用设置
[1]进入设置: [2]设置主题: [3]编辑区的字体变大或者变小: [4]鼠标悬浮在代码上有提示: [5]自动导包和优化多余的包: 手动导包:快捷键:alt+enter 自动导包和优化多余的包: [ ...
- 【Java例题】5.4 排序集合的使用
4.排序集合的使用.使用TreeSet模拟一个一维整数数组.其中,一维整数数组元素由Random类随机产生.最后显示排序后的结果. package chapter6; import java.util ...
- X86系统或intel RK主板上EDP转LVDS屏转接板|CS5211DP转LVDS设计
众所周知LVDS接口是美国NS美国国家半导体公司为克服以TTL电平方式传输宽带高码率数据时功耗大,电磁干扰大等缺点而研制的一种数字视频信号传输方式.由于其采用低压和低电流驱动方式,实现了低噪声和低功耗 ...
- 记录一次乱码问题修复经历!排查修复Poi-tl使用HttpServletResponse导出Word乱码问题
问题 Poi-tl中HttpServletResponse导出Word乱码问题: 文件名使用中文,中文名乱码 导出的文件下载后乱码 原因 文件名中文乱码: 没有设置文件名的编码规则 文件下载乱码: 在 ...
- MySQL高级查询与编程笔记 • 【目录】
章节 内容 实践练习 MySQL高级查询与编程作业目录(作业笔记) 第1章 MySQL高级查询与编程笔记 • [第1章 数据库设计原理与实战] 第2章 MySQL高级查询与编程笔记 • [第2章 数据 ...
- Swoole 协程简介
什么是协程 协程可以简单理解为线程,只不过这个线程是用户态的,不需要操作系统参与,创建.销毁和切换的成本都非常低. 协程不能利用多核 cpu,想利用多核 cpu 需要依赖 Swoole 的多进程模型. ...
- CSS基础 overflow 内容溢出部分显示效果
属性:overflow 值 作用 visible 默认,内容溢出部分可见 hidden 内容溢出部分不可见 scroll 内容有无溢出,都有滚动条 auto 有内容溢出,自动显示滚动条