打印
[STM32F1]

关于ADC+DMA采集模拟量值问题

[复制链接]
744|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jianchaoyv|  楼主 | 2016-10-20 09:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基本描述:本意打算利用ADC+DMA采集直流电压值,打算连续采样10次再求其平均,定义了u16 data[10]数组,为何传到数组data[10]时只有前5个元素有值,且data[10]数组的值像是内存缓冲区地址递增时只增加1个字节。有关代码如下:
    DMA_DeInit(DMA1_Channel1);                                 // 恢复缺省值
    DMA_InitStructure.DMA_PeripheralBaseAddr = (CPU_INT32U)(&ADC1->DR);// 设置串口发送数据寄存器

    DMA_InitStructure.DMA_MemoryBaseAddr = (CPU_INT32U)&data[0];         // 设置发送缓冲区首地址

    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;      // 设置外设为源,外设寄存器->内存缓冲区
    DMA_InitStructure.DMA_BufferSize = 10;    // 需要发送的字节数,这里其实可以设置为0,因为在实际要发送的时候,会重新设置次值
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;        // 外设地址不做增加调整,调整不调整是DMA自动实现的
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                 // 内存缓冲区地址增加调整
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; // 外设数据宽度16位,2个字节
    DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord;         // 内存数据宽度16位,2个字节
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                           // 循环传输模式
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;                 // 优先级设置
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;                            // 关闭内存到内存的DMA模式
    DMA_Init(DMA1_Channel1, &DMA_InitStructure);               // 写入配置

   ADC_InitStructure.ADC_Mode               = ADC_Mode_Independent;
    ADC_InitStructure.ADC_ScanConvMode       = DISABLE;                         // 不启用扫描模式
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
    ADC_InitStructure.ADC_ExternalTrigConv   = ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign          = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel       = 1;
   
        ADC_Init(ADC1, &ADC_InitStructure);
    BSP_IntVectSet(BSP_INT_ID_DMA1_CH1, DMA1_Channel1_IRQHandler);
    /* ADC1 regular channel3 configuration */
    ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5);
    /* Enable ADC Interrupt */
    //ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
   
    /* Enable ADC1 */
    ADC_Cmd(ADC1, ENABLE);
         /* Enable ADC1 DAM*/
    ADC_DMACmd(ADC1, ENABLE);
       
    /* Enable ADC1 reset calibaration register */   
    ADC_ResetCalibration(ADC1);
    /* Check the end of ADC1 reset calibration register */
    while(ADC_GetResetCalibrationStatus(ADC1));
    /* Start ADC1 calibaration */
    ADC_StartCalibration(ADC1);
    /* Check the end of ADC1 calibration */
    while(ADC_GetCalibrationStatus(ADC1));
        // ADC自动校准结束---------------   
        //ADC_ExternalTrigConvCmd(ADC1, ENABLE);
        DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);            // 开启发送DMA通道中断
        DMA_Cmd(DMA1_Channel1, ENABLE); // 开启DMA
        ADC_SoftwareStartConvCmd(ADC1, ENABLE); //ADC启动

        //DMA_Cmd(DMA1_Channel1, ENABLE); // 开启DMA

    DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);            // 开启发送DMA通道中断

怎样让内存缓存地址递增按数据单元DMA_PeripheralDataSize_HalfWord大小进行?现在怀疑是实际按1字节递增的。
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

13

帖子

1

粉丝