历史上的今天
今天是:2024年10月06日(星期日)
2018年10月06日 | STM32ADC单次转换DMA读取
2018-10-06 来源:eefocus
DMA读取方式很适合高频率的ADC采样信号。
ADC的DMA读取方式,其实和上一篇的中断读取方式差不多,初始化代码更是相似。初始化代码如下:
static void ADC_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //ʹÄÜPB,PE¶Ë¿ÚʱÖÓ
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
static void ADC_Mode_Config(void)
{
ADC_InitTypeDef ADC_InitStructure;
DMA_InitTypeDef DMA_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr=(uint32_t)&ADC1->DR;
DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)&adcconverdata;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize=1;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
DMA_InitStructure.DMA_PeripheralInc =DMA_PeripheralInc_Disable ;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
DMA_Init(DMA1_Channel1,&DMA_InitStructure);
DMA_Cmd(DMA1_Channel1,ENABLE);
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ScanConvMode=DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel=ADC_Channel_1;
ADC_Init(ADC1,&ADC_InitStructure);
RCC_ADCCLKConfig(RCC_PCLK2_Div8);
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5);
ADC_DMACmd(ADC1,ENABLE);
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
}
void ADC_InitConfig(void)
{
ADC_GPIO_Config();
ADC_Mode_Config();
}
上面代码写的很清楚了,虽然没有标注,相信也能看懂,代码很简单,就不做解释了
上一篇:STM32ADC多通道DMA传输
下一篇:STM32ADC转换中断读取
史海拾趣
|
assertion failed! afxcmn2.inl 110行 在winXP下 VC写的SOCKET通信的程序可以正常运行,但是在EVC写进行改写,Wince上运行出现了assertion failed! afxcmn2.inl 110行 请教一下,这是什么错误?… 查看全部问答> |
|
用ftp下载vxworks镜像到目标机的时候,网络有问题,求助各位前辈 通过ftp将vxworks镜像从PC机下到目标机的时候,是通过ftpXfer这个函数从PC机读取文件,每次读完镜像之后关闭套接字,但套接字指定的端口变成就会time_wait状态,就要等一段时间才能通过这个函数,从PC机再次通过ftp下载镜像,但这段时间有一分半钟 ...… 查看全部问答> |
|
求一个S3C2440 WINCE6.0 的BSP,我网上下载了一个 总是编译出错,哪位高人那里有通过编译的BSP,发我一份吧! 感激不尽! eyob@163.com … 查看全部问答> |
|
现在坛子里相信有很多人拥有C2000 LaunchPad,给学习C2000带来了方便。如果能组织一下编写它的学习及应用方面的文章,将会给广大网友、特别是以后入门C2000的人带来福音。 我建议: 1、写学习经验。 组织有使用经验的人,写出系 ...… 查看全部问答> |
|
不加入协议栈时,定时器能正常工作,加入协议栈后定时器不能正常工作,求指点 这是我的定时器吃时候函数 void Timer1_Init(void) { /*设置P1.0为输出模式*/ P1DIR = 0xff; // P1_0=0; &n ...… 查看全部问答> |




