基本概念
- 通道组
常用库函数:
实验:使用ADC1的通道1(PA1)进行单次转化
源程序:
adc.h
#ifndef __ADC_H#define __ADC_H#include "stm32f10x_gpio.h"void Adc_Init(void);u16 Get_Adc(u8 ch); u16 Get_Adc_Average(u8 ch,u8 times); #endif
adc.c
/*DAC实验*/ #include "adc.h" #include "delay.h"//初始化ADC//这里我们仅以规则通道为例//我们默认将开启通道0~3 void Adc_Init(void){ ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE ); //使能ADC1通道时钟 RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M//PA1 作为模拟通道输入引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入引脚GPIO_Init(GPIOA, &GPIO_InitStructure);ADC_DeInit(ADC1); //复位ADC1 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作模式:工作在独立模式ADC_InitStructure.ADC_ScanConvMode = DISABLE;//模数转换工作在单通道模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//模数转换工作在单次转换模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//转换由软件而不是外部触发启动ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//ADC数据右对齐ADC_InitStructure.ADC_NbrOfChannel = 1;//顺序进行规则转换的ADC通道的数目 ADC_Init(ADC1, &ADC_InitStructure);//根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器 ADC_Cmd(ADC1, ENABLE);//使能指定的ADC1ADC_ResetCalibration(ADC1);//使能复位校准 while(ADC_GetResetCalibrationStatus(ADC1));//等待复位校准结束ADC_StartCalibration(ADC1); //开启AD校准 while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束 //ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能指定的ADC1的软件转换启动功能} //获得ADC值//ch:通道值 0~3u16 Get_Adc(u8 ch) { //设置指定ADC的规则组通道,一个序列,采样时间ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );//ADC1,ADC通道,采样时间为239.5周期 ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能指定的ADC1的软件转换启动功能 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束return ADC_GetConversionValue(ADC1);//返回最近一次ADC1规则组的转换结果}u16 Get_Adc_Average(u8 ch,u8 times){u32 temp_val=0;u8 t;for(t=0;t
main.c
/*******************************************************************示例说明:stm32f103rbt6程序实例2019.6.13 ADC实验*作者:小5 *****************************************************************//* Standard includes. */#include /* Library includes.*/#include "stm32f10x.h"/* Hardware Library */#include "usart.h" // 串口#include "delay.h" // 延迟函数#include "led.h" // led#include "key.h" // 按钮#include "wdg.h" // 看门狗#include "timer.h" // 定时器#include "rtc.h" // 实时时钟#include "wkup.h" // 待机唤醒#include "adc.h" // ADCint main(void){ u16 adcx;float temp; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); delay_init(); usart_config(); led_gpio_init(); Adc_Init(); //ADC初始化 while(1) {adcx=Get_Adc_Average(ADC_Channel_1,10);// 获取通道1 取10次的平均值 printf("adcx is: