打印

关于ADC采集读取数据的问题

[复制链接]
649|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
菊江先生|  楼主 | 2018-7-4 07:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是一个关于在不使用DMA功能的情况下,读取ADC值的问题。《STM32库开发实战指南》和光盘的ADC例程里面,都是用到DMA功能。但是我想知道在没有使用DMA功能的情况下怎样去读取ADC值,我一共有2个不明白的地方。下面是我写的一段代码:

这是ADC.C文件的程序代码
#include "stm32f10x_conf.h"
#define ADC1_DR_Address ((u32)0x40012400+0x4c)

__IO uint16_t ADC_ConvertedValue;

void ADC_Config()
{
        GPIO_InitTypeDef GPIO_InitStructure;
        ADC_InitTypeDef ADC_InitStructure;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_ADC1,ENABLE);
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
        GPIO_Init(GPIOC,&GPIO_InitStructure);
        
        ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//独立ADC模式
        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;//要转换通道数1
        ADC_Init(ADC1,&ADC_InitStructure);
        RCC_ADCCLKConfig(RCC_PCLK2_DiARM);//配置ADC时钟,为PCLK2的8分频
        ADC_RegularChannelConfig(ADC1,ADC_Channel_11,1,ADC_SampleTime_55Cycles5);//配置ADC1通道11为55.5采集周期
        ADC_Cmd(ADC1,ENABLE);
        ADC_ResetCalibration(ADC1);//复位校准
        while(ADC_GetResetCalibrationStatus(ADC1));
        ADC_StartCalibration(ADC1);//ADC校准
        while(ADC_GetCalibrationStatus(ADC1));
        ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使用软件触发
}

问题1:
对于这段代码有几个疑问,程序ADC_SoftwareStartConvCmd(ADC1,ENABLE);是使用软件触发的意思,这个触发是怎么控制的,是需要写某个寄存器,还是说ADC配置成连续转换模式(即ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;)后,就表示ADC转换已经处于软件触发了?如果是软件触发,是不是通过写代码使能或暂停ADC转换,具体是写哪些代码?

问题二:
在不使用DMA的情况下,就像我上面编的那一段代码,要怎样才能获取到ADC的值,我看到有一个
uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx) 这样的程序。这个程序的返回值是不是就是ADC转换回来的值?
我试过写了一下的代码:
__IO uint16_t ADC_ConvertedValue;
ADC_ConvertedValue=ADC_GetConversionValue(ADC1);
但是ADC_ConvertedValue的值一直是0x0000

我想要的效果是:在不使用DMA功能的情况下,通过软件控制ADC转换一次读一次数值。
需要指导……

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

447

帖子

0

粉丝