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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版