借助江协科技ppt学习STM32F103C8T6
ADC1和ADC2通道引脚一样的
AD.c://例子adc单次扫描不连续
#include "stm32f10x.h" // Device header
void AD_Init(void)
{
//时钟配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
//GPIO配置
GPIO_InitTypeDef GPIO_InitStruct; //定义结构体变量
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN ;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 ;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz ;
GPIO_Init(GPIOA,&GPIO_InitStruct);
//通道选择(注入组还是规则组)
ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);//为所选ADC配置其对应的常规通道
//ADC配置
ADC_InitTypeDef ADC_InitStruct;
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right; // 右对齐
ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//不外部触发
ADC_InitStruct.ADC_Mode = ADC_Mode_Independent; //单通道模式
ADC_InitStruct.ADC_ContinuousConvMode = ENABLE; //连不连续
ADC_InitStruct.ADC_ScanConvMode = DISABLE; //扫不扫描
ADC_InitStruct.ADC_NbrOfChannel = 1 ; //一次多少组
ADC_Init(ADC1,&ADC_InitStruct);
ADC_Cmd(ADC1,ENABLE);
//校准部分
ADC_ResetCalibration(ADC1);//复位校准
while(ADC_GetResetCalibrationStatus(ADC1) == SET);//等待完成ADC复位校准。
ADC_StartCalibration(ADC1);//开始校准
while(ADC_GetCalibrationStatus(ADC1) == SET );//等待校准完成
ADC_SoftwareStartConvCmd(ADC1, ENABLE);//ADC软件启动转换 连续扫描
//连续扫描不需要等待转换
}
uint16_t ADC_GetValue(void)
{
//ADC_SoftwareStartConvCmd(ADC1, ENABLE);//ADC软件启动转换 单次扫描
//while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);// 单次扫描 EOC标志位为1时转换完成 EOC=1
//采样周期55.5加转换周期12.5=68个ADC周期,ADC时钟72/6=12M表示一个周期为1/12M,
//等待时间为(1/12M)*68=5.6us
//DR寄存器会自动清除EOC标志位
return ADC_GetConversionValue(ADC1);
}
主函数:
#include "stm32f10x.h"
#include "Delay.h"
#include "OLED.H"
#include "AD.H"
//单次转换非扫描 只能显示一个
float voltage;
uint16_t ADvalue;
int main()
{
AD_Init();
OLED_Init();
OLED_ShowString(1,1,"ADvalue:");
OLED_ShowString(2,1,"voltage:0.00");
while(1)
{
ADvalue = ADC_GetValue();
voltage = (float)ADvalue /4096 * 3.3 ;
OLED_ShowNum(1,9,ADvalue,4);
OLED_ShowNum(2,9,voltage,1);
OLED_ShowNum(2,11,(uint16_t)(voltage*100)%100,2);//小数部分
Delay_ms(100);
}
}