设为首页
收藏本站
找回密码
开启辅助访问
登录
注册
只需一步,快速开始
首页
BBS
在线充值
搜索
工控币获得方法
联系方式
搜索
搜索
本版
帖子
用户
工控论坛
»
首页
›
电子技术
›
STM32/8
›
STM32定时触发ADC、DMA采样 源程序
返回列表
发新帖
STM32定时触发ADC、DMA采样 源程序
[复制链接]
6
|
0
|
2020-6-5 10:14:14
|
显示全部楼层
|
阅读模式
采用stm32f1开发板,使用ADC的定时器触发ADC转换的功能,然后使用DMA进行数据的搬运。采用TIM2定时器的触发间隔,实现ADC定时采样转换的功能,然后可以在程序的死循环中一直检测DMA转换完成标志,然后进行数据的读取,或者使能DMA转换完成中断,这样每次转换完成就会产生中断。
完整源码:
定时器触发ADC实验.7z
(221.91 KB, 售价: 1 工控币)
2020-6-5 10:13 上传
点击文件名下载附件
## 定时器2初始化函数
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_Pulse = 1000;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低
TIM_OC2Init(TIM2, & TIM_OCInitStructure); //初始化外设TIM2_CH2
TIM_Cmd(TIM2, ENABLE); //使能TIMx
TIM_CtrlPWMOutputs(TIM2, ENABLE);
## DMA配置
DMA_InitTypeDef DMA_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE); //使能ADC1通道时钟
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; //ADC1地址
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADC_ConvertedValue; //内存地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //方向(从外设到内存)
DMA_InitStructure.DMA_BufferSize = 1; //传输内容的大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址固定
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; //内存地址固定
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord ; //外设数据单位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord ; //内存数据单位
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular ; //DMA模式:循环传输
DMA_InitStructure.DMA_Priority = DMA_Priority_High ; //优先级:高
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //禁止内存到内存的传输
DMA_Init(DMA1_Channel1, &DMA_InitStructure); //配置DMA1
DMA_ITConfig(DMA1_Channel1,DMA_IT_TC, ENABLE); //使能传输完成中断
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
DMA_Cmd(DMA1_Channel1,ENABLE);
## GPIO配置
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
## ADC初始化
ADC_InitTypeDef ADC_InitStructure;
TIM2_Init(30000,7199); //72000000/7200=10000Hz,每3s采集一次
DMA1_Init();
ADC_GPIO_Configuration();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //使能ADC1通道时钟
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //独立ADC模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //关闭扫描方式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //关闭连续转换模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2; //使用外部触发模式
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //采集数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; //要转换的通道数目
ADC_Init(ADC1, &ADC_InitStructure);
## 注意事项
一定要在程序最前面定义ADC的采样数据和地址
volatile uint16_t ADC_ConvertedValue; //ADC采样的数据
#define ADC1_DR_Address ((u32)0x4001244C) //ADC1的地址
adc
,
dmc
,
采样
,
stm32
,
定时
相关帖子
•
STM32+LabVIEW的USB数据采集与显示源程序
•
基于LabVIEW的闹钟设计 详细文档+程序
•
西门子S7-200 plc的定时停机加密程序样例
•
STM32示波器程序ILI9341_IO模拟源程序+Proteus仿真
•
STM32F407 FLAC软解压 源程序
•
用PROTEUS8.9仿真实现STM32 ADC一路连续转换,值显示在LCD12864上
•
Proteus实现stm32单片机的闪烁灯实验程序
•
STM32控制4个LED灯循环点亮源程序和Proteus仿真
•
STM32音频产生器Proteus仿真程序
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
路漫漫
194
主题
199
帖子
74
积分
初级会员
初级会员, 积分 74, 距离下一级还需 426 积分
初级会员, 积分 74, 距离下一级还需 426 积分
工控币
74
加好友
发消息
回复楼主
返回列表
电子技术综合讨论
单片机嵌入式
EDA设计仿真
STM32/8
51单片机
上位机开发及系统管理
Labview
Multisim仿真
图文推荐
西门子1200plc与RKC温控模组com-ml profinet通讯gsd 程序 文档
2021-02-24
PLC-LAB-非标自动化2D建模仿真软件 中文说明和操作演示视频
2021-02-15
组态王机械手加反应罐监控系统 工程源文件与设计文档
2021-02-04
太阳能翻板追日控制 采用s7-200plc与光照度模块modbus通信
2021-02-01
基于51单片机数字电压表 程序 原理图 pcb 仿真文件 论文
2021-01-26
热门排行
1
音频功率放大器Multisim仿真电路设计
2
数字电路拔河机Multisim仿真设计
3
函数信号发生器Multisim仿真 可调频 幅值(
4
放大器Multisim仿真 放大倍数可调20-200倍
5
克拉波振荡器Multisim仿真电路图
6
基于Multisim的十字路口交通管理控制器的设
7
74LS90简易电子钟的Multisim仿真设计与实现
8
欧姆龙西门子松下台达三菱施耐德各种PLC编
9
EcoStruxure Control Expert V15.0下载
10
基于labview的串口助手,包含源代码。具有