你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f103 外部中断触发ad dma采样 求指导

[复制链接]
qq793040564 提问时间:2014-11-9 20:19 /
最近项目中想用stm32做类似示波器的功能,想用外部中断触发ad的dma采样,看了网上的一些例程,但是感觉都不全,能给个例程包含ad  dma采样时间控制的么?
收藏 1 评论3 发布时间:2014-11-9 20:19

举报

3个回答
wenyangzeng 回答时间:2014-11-25 15:52:55
本帖最后由 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);

最重要的都给出了。不要偷懒,剩下的自己动手吧。
沐紫 回答时间:2014-11-14 15:36:10
哪位大侠帮楼主看下这个问题呢
qq793040564 回答时间:2016-1-2 00:53:15
很感谢楼上的回复  ,  虽然 是定时器的, 但是后来 我确实也改成了  外部中断  触发定时器  然后定时器触发 采样,  其实这个用途有点像示波器,

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版