当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 >
关于STM32F103RCT6通道8的ADC采集
时间:2018-08-16作者:华清远见

STM32F103RCT6中ADC特性:

12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。

●12位分辨率 
        ●转换结束、注入转换结束和发生模拟看门狗事件时产生中断 
        ●单次和连续转换模式 
        ●从通道0到通道n的自动扫描模式 
        ●自校准 
        ●带内嵌数据一致性的数据对齐 
        ●采样间隔可以按通道分别编程 
        ●规则转换和注入转换均有外部触发选项 
        ●间断模式 
        ●双重模式(带2个或以上ADC的器件)

ADC时钟:

由时钟控制器提供的ADCCLK时钟和PCLK2(APB2时钟)同步。RCC控制器为ADC时钟提供一个专用的可编程预分频

ADC开关控制:

通过设置ADC_CR2寄存器的ADON位可给ADC上电。当第一次设置ADON位时,它将ADC从断电状态下唤醒。ADC上电延迟一段时间后(tSTAB),再次设置ADON位时开始进行转换。通过清除ADON位可以停止转换,并将ADC置于断电模式。在这个模式中,ADC几乎不耗电(仅几个μA)。

通道选择:

有16个多路通道。可以把转换组织成两组:规则组和注入组。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。

●规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。规则组中转换的总数应写入ADC_SQR1寄存器的L[3:0]位中。

●注入组由多达4个转换组成。注入通道和它们的转换顺序在ADC_JSQR寄存器中选择。注入组里的转换总数目应写入ADC_JSQR寄存器的L[1:0]位中。如果ADC_SQRx或ADC_JSQR寄存器在转换期间被更改,当前的转换被清除,一个新的启动脉冲将发送到ADC以转换新选择的组。温度传感器/ VREFINT内部通道温度传感器和通道ADC1_IN16相连接,内部参照电压VREFINT和ADC1_IN17相连接。可以按注入或规则通道对这两个内部通道进行转换。

对于其他寄存器,查看相关手册:STM32 Reference Manual。

原理图:

电位器接ADC8,

程序部分

AD初始化:
        voidARC_ADC_Init()
        {
                ARC_ADC_RCC_Init();
                ARC_ADC_GPIO_Init();//配置PB0
                ARC_ADC_PARAM_Init();
                ARC_ADC_NVIC_Init();
                /* ADC1 regular channels configuration */
                ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_55Cycles5);//初始化第八通道
                /* Enable ADC1 EOC interrupt */
                ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
        }
        数据处理函数:
        {
                uint32_t AD_Value=0;
                ARC_SysTick_Init();
                ARC_ADC_Init();
                /* Enable ADC1 */
                ADC_Cmd(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));

                /* Start ADC1 Software Conversion */ 
                ADC_SoftwareStartConvCmd(ADC1, ENABLE);

                ARC_COM_Init();
                USART_Cmd(USART1, ENABLE);

                while (1)
                {
                        AD_Value=ADC1ConvertedValue*33;//数据转化
                        AD_Value=AD_Value/0xfff;
                        printf("AD_Value=%d\n", AD_Value);
                        ARC_SysTick_Delay(1000);

                }

显示采集结果结果


发表评论

全国咨询电话:400-611-6270,双休日及节假日请致电值班手机:15010390966

在线咨询: 曹老师QQ(3337544669), 徐老师QQ(1462495461), 刘老师 QQ(3108687497)

企业培训洽谈专线:010-82600901,院校合作洽谈专线:010-82600350,在线咨询:QQ(248856300)

Copyright 2004-2018 华清远见教育科技集团 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号