STM32F10XXX 双通道ADC数据采集,TIM2触发采集
*STM32F10XXX 双通道ADC数据采集
*环境:keil for arm mdk 4.71a 官方V3.5库
*STM32数据采集部分
* 1、ADC1/ADC2实现并行同时数据采集,12BIT最高可达1MSPS采样速度并通过STM32的DMA传输放入内存中
* 2、TIM2 CC2实现对ADC采样的触发,ADC_Sample_Frequency_Set函数实现自定义TIM2 CC2频率输出,
* 3、采样的频率和采样个数通过接收到的UDP控制命令来指定
* 采样的频率为20HZ~1MHZ;
* 采样深度为1~4000个数据(受限于STM32内存20KB容量,一个数据为2个12bitADC通道读数,需一个word)
*******************************************************************************/
#define ADC1_DR_addr ((u32)0x4001244C) //AD转换结果存放地址定义
/*******************************************************************************
* Function Name : DMA_ADC_Transfer_Reset
* Description : ADC1/ADC2 DMA传输通道复位,准备下一次DMA传输
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void DMA_ADC_Transfer_Reset(void)
{
//开始DMA传输
DMA_Channel1->CCR &= ~(1<0); //禁用DMA_Channel,EN是CCR1寄存器的0位
DMA->IFCR |= 0x0000000F;//清除CHANNEL1的4个标志
DMA_Channel1->CNDTR = (u16)SampleDepth;//重新设置要设置的DMA传输数据量
DMA_Channel1->CCR |= (1<0);//重新使能DMA_channel1
while(!(DMA->ISR & DMA_FLAG_TC1));
DMA_Channel1->CCR &= ~(1<0); //禁用DMA_Channel,EN是CCR1寄存器的0位
}
/*******************************************************************************
* Function Name : DMA_ADC_Transfer_Init
* Description : ADC1/ADC2 DMA传输通道初始化
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void DMA_ADC_Transfer_Init(void)
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
/* DMA channel1 configuration ----------------------------------------------*/
DMA_DeInit(DMA_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC_DR_Address;//ADC数据寄存器地址
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&Data_Buffer[0];//目标缓冲区地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//外设是源
DMA_InitStructure.DMA_BufferSize = 0;//设置DMA读取长度为
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址不递增
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//目标缓冲区地址递增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;//外设数据宽度
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;//目标缓冲区数据宽度
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA模式:Circular循环模式/Normal普通模式
DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;//优先级
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//内存到内存模式不使能
DMA_Init(DMA_Channel1, &DMA_InitStructure);
/* Enable DMA channel1 */
//DMA_Cmd(DMA_Channel1, ENABLE);
}
/*******************************************************************************
* Function Name : ADC_Initial
* Description : ADC1/ADC2初始化
*******************************************************************************/
void ADC_Initial(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC |RCC_APB2Periph_ADC1, ENABLE ); //使能ADC通道时钟
ADC_InitTypeDef ADC_InitStructure;
/* ADC1 configuration ------------------------------------------------------*/
ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;//ADC1/ADC2同时并行采样模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE;//多通道扫描模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//单次转换模式(转换后即停止)
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2;//触发模式
ADC_InitStructure.ADC_DataAlign = ADC_Dat
STM32F10双通道ADC数据采集TIM2触发采 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)