STM32F404的ADC之DMA的单通道

发布者:SerendipityDawn最新更新时间:2017-09-11 来源: eefocus关键字:STM32F404  ADC  DMA  单通道 手机看文章 扫描二维码
随时随地手机看文章

这里是接前面的文章

PA3 ADC1的通道3 

下面是完整的程序

__IO uint16_t AdcValue =0;


/****************************************************************************************
*函 数 名:bsp_InitAdc
*函数功能:ADC1初始化
*形    参:无
*返 回 值:无
*****************************************************************************************/
void bsp_InitAdcDMA(void);
void bsp_InitAdc(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure;
ADC_InitTypeDef ADC_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//使能ADC时钟
bsp_InitAdcDMA();
/*初始化ADC1通道3 的IO口*/
GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AIN;/*模拟输入*/
GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_3;/*通道3*/
GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;/*不带上下拉*/
GPIO_Init(GPIOA,&GPIO_InitStructure);/*初始化*/
/*通用控制寄存器的配置*/
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;/*DMA失能*/
ADC_CommonInitStructure.ADC_Mode          = ADC_Mode_Independent;/*独立模式*/
ADC_CommonInitStructure.ADC_Prescaler     = ADC_Prescaler_Div4;/*APB2的4分频 即84/4=21M*/
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;/*两个采样阶段的延时5个时钟*/
ADC_CommonInit(&ADC_CommonInitStructure);/*初始化*/
/*初始化ADC1*/
ADC_InitStructure.ADC_Resolution  = ADC_Resolution_12b;/*12位模式*/
ADC_InitStructure.ADC_ScanConvMode = ENABLE;/*扫描模式*/
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;/*连续转换*/
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;/*禁止触发检测 使用软件触发*/
ADC_InitStructure.ADC_DataAlign    = ADC_DataAlign_Right;/*右对齐*/
ADC_InitStructure.ADC_NbrOfConversion = 1;/*只使用1通道 规则通为1*/
ADC_Init(ADC1,&ADC_InitStructure);/*初始化*/

ADC_Cmd(ADC1,ENABLE);/*开启转换*/
ADC_RegularChannelConfig(ADC1,ADC_Channel_3,1,ADC_SampleTime_480Cycles);/*设置规则通道3 一个序列 采样时间 */
ADC_SoftwareStartConv(ADC1);/*启动软件转换*/
ADC_DMARequestAfterLastTransferCmd(ADC1,ENABLE);//源数据变化时开启DMA传输
ADC_DMACmd(ADC1,ENABLE);//使能ADC传输
}




/****************************************************************************************
*函 数 名:bsp_InitAdcDMA
*函数功能:DMA2初始化
*形    参:无
*返 回 值:无
*****************************************************************************************/
void bsp_InitAdcDMA(void)
{
DMA_InitTypeDef DMA_InitStructure;



RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);/*DMA2的时钟使能*/
while(DMA_GetCmdStatus(DMA2_Stream0)!=DISABLE);/*等待DMA可以配置*/



DMA_InitStructure.DMA_Channel = DMA_Channel_0;/*DMA通道0*/
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_BASE+0x4C;/*外设地址*/
DMA_InitStructure.DMA_Memory0BaseAddr    = (uint32_t)&AdcValue;/*存取器地址*/
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;/*方向从外设到内存*/
DMA_InitStructure.DMA_BufferSize = 1;/*数据传输的数量为1*/
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;/*地址不增加*/
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;/*地址不增加*/
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;/*数据长度半字*/
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;/*数据长度半字*/
DMA_InitStructure.DMA_Priority = DMA_Priority_High;/*高优先级*/
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;/*循环模式*/
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;/*禁止FIFO*/
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;/*FIFO的值*/
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;/*单次传输*/
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;/*单次传输*/
DMA_Init(DMA2_Stream0,&DMA_InitStructure);/*初始化*/
DMA_Cmd(DMA2_Stream0,ENABLE);//开启DMA传输
}

/*
*********************************************************************************************************
* 函 数 名: main
* 功能说明: c程序入口
* 形    参:无
* 返 回 值: 错误代码(无需处理)
*********************************************************************************************************
*/
int main(void)
{


/*
ST固件库中的启动文件已经执行了 SystemInit() 函数,该函数在 system_stm32f4xx.c 文件,主要功能是
配置CPU系统的时钟,内部Flash访问时序,配置FSMC用于外部SRAM
*/
bsp_Init();

/* 进入主程序循环体 */
while (1)
{
if(DMA_GetFlagStatus(DMA2_Stream0,DMA_FLAG_TCIF0)!=RESET)/*传输完成*/
{
printf("adc0=%d  ",AdcValue);
DMA_ClearFlag(DMA2_Stream0,DMA_FLAG_TCIF0);/*清零*/
}
bsp_DelayMS(1000);

}
}

下面是MDA的映射关系图



    关键字:STM32F404  ADC  DMA  单通道 引用地址:STM32F404的ADC之DMA的单通道

    上一篇:STM32F407的ADC单次转换
    下一篇:STM32F407的ADC之DMA多通道

    推荐阅读最新更新时间:2024-03-16 15:36

    Stm32作为主设备使用DMA接收SPI数据
    DMA发送中断和DMA接收中断必须都打开,如果接受中断不开,貌似只能接收一次成功。同时DMA接收比发送优先级要高,这条没有测试过!!! 以下代码在stm32f407上测试通过 #include spi_dma.h #include stm32f4xx_dma.h #include stm32f4xx.h #include spi.h #include SRAM.h #include data_process.h #include stdio.h #define DMA2_TX_STREAM DMA2_Stream3 #define DMA2_TX_CHANNEL DMA_Channel_3 #def
    [单片机]
    数字信道化技术中ADC的性能分析
    当今,通信技术飞速发展。由于数字通信具有抗干扰能力强、信道差错可通过编码控制、通信设备易于集成化、易于对信号进行加密处理、易于与各种数字终端实现对接等特点,数字通信技术发展势头强劲。作为数字设备前端不可缺少的重要器件,模数转换器(ADC)在卫星有效载荷的应用中发挥着至关重要的作用,它将中频模拟信号转变为可进行各种处理的数字信号。在某种程度上说,ADC的性能好坏直接影响着星上处理转发器性能的发挥。因此,研究ADC对多路数字已调信号性能的影响具有重要的理论和现实意义。   1 信道化技术   信道化,简单地说,是指通过指定信道对通信实施管理的过程,进而可以指采用多信道传输数据的结构。信道化技术可以将同时输入的不同频率信号分开,在不
    [模拟电子]
    数字信道化技术中<font color='red'>ADC</font>的性能分析
    STM32-(28):ADC模数转换(理论分析)
    ADC,Analog-to-Digital Converter的缩写,指模/数转换器或者模数转换器 嵌入式实时闭环控制系统 将模拟量转换为数字量的过程称为模数( A / D )转换,完成这一转换的器件称为模数转换器(简称 ADC ) ; 将数字量转换为模拟量的过程称为数模( D / A )转换,完成这一转换的器件称为数模转换器(简称 DAC )。 模拟量主要有:电流、电压、温度、湿度、速度、湿度、亮度、压力等等。 A/D转换器至关重要,如果没有,也就没有了外界输入,控制系统相当于没有眼睛,没有耳朵 A/D转换器 模拟信号的采集与处理 数据采集系统由模拟信号采集、A/D转换、数字信号处理三大部分组成。 A/D转换器是模拟
    [单片机]
    STM32-(28):<font color='red'>ADC</font>模数转换(理论分析)
    串行12位ADC与PC之间的接口电路
    近几年来,IC制造商设计了实现接口的各种方法,并且特别重视减少IC接口I/O引脚的数量。MAX187就是这样一个器件,它是一个12位模/数转换器(ADC)。你可以利用串行数据通信技术产生与该ADC的一个接口。MAX187的模/数转换和数据传输仅需三条数字I/O线。你可以利用PC的Centronics打印机端口在MAX187和PC之间产生一个简易接口(图1)。只要将引脚分别设置为高电平或低电平,你就能启用或禁用MAX187(引脚 3)。如果使该引脚开路,则内部参考电压(4.096V) 就被禁用,你必须将一个外部参考电压加到引脚REF(引脚4)上。在其他情况下,该引脚 与4.7μF旁路电容C1连接。通过使用SCLK引脚(引脚8)上的外部
    [模拟电子]
    ADI推出适用于宽带通信和无线基础设施应用的高速ADC系列产品
    美国模拟器件公司(Analog Devices, Inc.)日前推出其高速10bit、11bit、12bit模数转换器(ADC)系列产品,适合用于宽带通信和无线基础设施应用——例如电缆调制解调器终端系统、第三代和第四代微区和皮区基站以及固定点到点射频通信——需要降低功耗、小封装尺寸,但又不能牺牲高质量ADC性能的应用场合。其舰旗产品是12bit分辨率250MSPS(每秒百万取样率)采样速率ADC,其功耗降低了40%以上,封装尺寸比同类产品减小20%,同时保证高中频(IF)条件下优良的性噪比(SNR)和无杂散动态范围(SFDR)。 “AD9230是仅有的一款将功耗降低到500mW阈值以下的12bit 250MSPS ADC,因此
    [新品]
    STM32串口DMA连续发送两帧,导致数据部分覆盖的问题
    问题描述 使用STM32的串口进行DMA发送(Noraml模式),在某个任务中连续调用两次发送函数log_printf(),但是发回的数据在串口调试助手上显示与预期不符。第一次发送的数据有一部分被第二次发送的数据覆盖,如图所示: 任务代码如下: /* Log_Task function */ void Log_Task(void const * argument) { /* USER CODE BEGIN Log_Task */ /* Infinite loop */ for(;;) { if(router_rx_flag == 1) { router_rx_flag = 0;
    [单片机]
    串行输出的12位模数转换器MAX1286–MAX1289
    MAX1286–MAX1289是串行输出的12位模拟-数字转换器(ADC),具有成本低、功耗小的特点,采用小型8引脚SOT23封装和8引脚TDFN封装。MAX1286/MAX1288采用+5V单电源供电,MAX1287/MAX1289采用+3V单电源供电。这些器件具备逐次逼近ADC,自动关断,快速唤醒(1.4µs)的功能和一个高速3线接口。在150ksps最大采样速率下功耗仅为0.5mW (VDD = +2.7V)。在较低的采样速率下,转换间隙的AutoShutdown™ (0.2µA)特性能够减小功率消耗。MAX1286/MAX1287提供双通道单端工作模式,接受输入信号范围为0到基准VREF。MAX1288/MAX1289接受
    [模拟电子]
    串行输出的12位<font color='red'>模数转换器</font>MAX1286–MAX1289
    Xilinx多种应用指南
    特别白皮书 – WP392:赛灵思灵活混合信号解决方案   http://www.xilinx.com/cn/support/documentation/white_papers/wp392_Agile_Mixed_Signal.pdf      业界领先的 28nm 7 系列高级 FPGA 已经通过前几代 FPGA 系列产品极大扩展了集成模拟子系统的功能。赛灵思 7 系列中的模拟子系统称为 XADC,其包含两个独立的 1 MSPS、12 位模数转换器 (ADC) 以及一个 17 通道模拟多路复用器前端。通过把 XADC 与 FPGA 逻辑紧密集成在一起,赛灵思推出了业界最灵活的模拟子系统。这种模拟与可编程逻辑的创新组合被称为灵
    [嵌入式]
    小广播
    添点儿料...
    无论热点新闻、行业分析、技术干货……
    设计资源 培训 开发板 精华推荐

    最新单片机文章
    何立民专栏 单片机及嵌入式宝典

    北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

    换一换 更多 相关热搜器件
    更多每日新闻
    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved