/*************************************************************
Function : ADConvert_GPIO_Init
Description: ADC的引脚配置
Input : none
return : none
*************************************************************/
static void ADConvert_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1;//ADC通道0与通道1对应的引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/*************************************************************
Function : ADConvert_ADC1_Init
Description: ADC1初始化
Input : none
return : none
*************************************************************/
static void ADConvert_ADC1_Init(void)
{
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
ADC_DeInit(ADC1);//将外设 ADC1 的全部寄存器重设为缺省值
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC工作模式:ADC1和ADC2工作在独立模式
ADC_InitStructure.ADC_ScanConvMode =ENABLE;//模数转换工作在扫描模式
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//模数转换工作在连续转换模式
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);//打开ADC1
ADC_ResetCalibration(ADC1); //开启复位校准
while(ADC_GetResetCalibrationStatus(ADC1));//等待复位校准结束
ADC_StartCalibration(ADC1);//开始AD校准
while(ADC_GetCalibrationStatus(ADC1));//等待校准结束
}
/*************************************************************
Function : ADConvert_Init
Description: ADC初始化
Input : none
return : none
*************************************************************/
void ADConvert_Init(void)
{
ADConvert_GPIO_Init();
ADConvert_ADC1_Init();
}
/*************************************************************
Function : ADC_GetADValue
Description: 获取转换后的数字量
Input : channel-ADC1的通道
return : 转换后的数字量
*************************************************************/
u16 ADC_GetADValue(u8 channel)
{
//ADC1,ADC通道为channel,规则采样顺序值为1,采样时间为239.5周期
ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_239Cycles5);
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定得到ADC1的软件转换功能
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));//等待转换结束
return ADC_GetConversionValue(ADC1); //返回最近一次ADC1 规则组的转换结果
}
#ifndef __ADCONVERT_H__
#define __ADCONVERT_H__
#include "stm32f10x.h"
void ADConvert_Init(void);
u16 ADC_GetADValue(u8 channel);
#endif
/*************************************************************
Function : main
Description: main入口
Input : none
return : none
*************************************************************/
int main(void)
{
u16 in0Value = 0;
u16 in1Value = 0;
BSP_Init();
ADConvert_Init();
PRINTF("\nmain() is running!\r\n");
while(1)
{
LED1_Toggle();
in0Value = ADC_GetADValue(ADC_Channel_0);
PRINTF("ADC1_IN0: AD=%d Volt=%1.1f\r\n", in0Value, 3.3*in0Value/4096);
in1Value = ADC_GetADValue(ADC_Channel_1);
PRINTF("ADC1_IN1: AD=%d Volt=%1.1f\r\n", in1Value, 3.3*in1Value/4096);
Delay_ms(1000);
}
}
上一篇:STM32 ADC转换(DMA)
下一篇:STM32 正弦波输出
推荐阅读最新更新时间:2024-03-16 15:14