你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
stm32f103 外部中断触发ad dma采样 求指导
[复制链接]
qq793040564
提问时间:2014-11-9 20:19 /
最近项目中想用stm32做类似示波器的功能,想用外部中断触发ad的dma采样,看了网上的一些例程,但是感觉都不全,能给个例程包含ad dma采样时间控制的么?
赞
0
收藏
1
评论
3
分享
发布时间:2014-11-9 20:19
举报
请先
登录
后回复
3个回答
wenyangzeng
回答时间:2014-11-25 15:52:55
a0a.1 32b0c
本帖最后由 wenyangzeng 于 2014-11-26 22:04 编辑
ADC基本配置就不用上了,相关的如下:
//允许ADC1的DMA模式
ADC_DMACmd(ADC1, ENABLE);
//用定时器触发:
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2; //定时器2 CC2
ADC_ExternalTrigConvCmd(ADC1, ENABLE);
TIM_Cmd(TIM2,ENABLE);
TIM_CtrlPWMOutputs(TIM2,ENABLE);
//-----------
//DMA的配置
//-----------
void DMA_Configuration(void)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //允许 DMA1 DMA通道1
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr =(u32)( &(ADC1->DR)); //ADC1数据寄存器
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value; //获取ADC的数组
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //片内外设作源头
DMA_InitStructure.DMA_BufferSize = N*M; //每次DMA传输 N*M 个数据
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址不增加
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址增加
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //半字
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //半字
DMA_InitStructure.DMA_Mode =DMA_Mode_Circular; //DMA_Mode_Normal 普通模式
DMA_InitStructure.DMA_Priority = DMA_Priority_High; //高优先级
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //非内存到内存
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, DISABLE); //ENABLE or DISABLE DMA通道1传输完成中断
DMA_Cmd(DMA1_Channel1, ENABLE); //Enable DMA1 channel1
}
//TIM2通道2作为ADC1转换的触发时钟500US转换一次
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = 500;
TIM_TimeBaseStructure.TIM_Prescaler = 70;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
最重要的都给出了。不要偷懒,剩下的自己动手吧。
赞
1
评论
回复
支持
1
反对
0
沐紫
回答时间:2014-11-14 15:36:10
a0a.1 32b0c
哪位大侠帮楼主看下这个问题呢
赞
0
评论
回复
支持
反对
qq793040564
回答时间:2016-1-2 00:53:15
a0a.1 32b0c
很感谢楼上的回复 , 虽然 是定时器的, 但是后来 我确实也改成了 外部中断 触发定时器 然后定时器触发 采样, 其实这个用途有点像示波器,
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
ADC基本配置就不用上了,相关的如下:
//允许ADC1的DMA模式
ADC_DMACmd(ADC1, ENABLE);
//用定时器触发:
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2; //定时器2 CC2
ADC_ExternalTrigConvCmd(ADC1, ENABLE);
TIM_Cmd(TIM2,ENABLE);
TIM_CtrlPWMOutputs(TIM2,ENABLE);
//-----------
//DMA的配置
//-----------
void DMA_Configuration(void)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //允许 DMA1 DMA通道1
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr =(u32)( &(ADC1->DR)); //ADC1数据寄存器
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value; //获取ADC的数组
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //片内外设作源头
DMA_InitStructure.DMA_BufferSize = N*M; //每次DMA传输 N*M 个数据
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址不增加
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址增加
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //半字
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //半字
DMA_InitStructure.DMA_Mode =DMA_Mode_Circular; //DMA_Mode_Normal 普通模式
DMA_InitStructure.DMA_Priority = DMA_Priority_High; //高优先级
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //非内存到内存
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, DISABLE); //ENABLE or DISABLE DMA通道1传输完成中断
DMA_Cmd(DMA1_Channel1, ENABLE); //Enable DMA1 channel1
}
//TIM2通道2作为ADC1转换的触发时钟500US转换一次
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period = 500;
TIM_TimeBaseStructure.TIM_Prescaler = 70;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
最重要的都给出了。不要偷懒,剩下的自己动手吧。