stm32f103 外部中断触发ad dma采样 求指导
最近项目中想用stm32做类似示波器的功能,想用外部中断触发ad的dma采样,看了网上的一些例程,但是感觉都不全,能给个例程包含addma采样时间控制的么?本帖最后由 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]