STM32F103 ADC配置


#include "stm32f10x.h"

u16 ADCConvertedValue; 

int main()
{
	
	GPIO_InitTypeDef m_GPIO_InitTypeDef;
	ADC_InitTypeDef ADC_InitStructure;
	 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);//打开APB2时钟,GPIO都是挂在APB2上的 
 
	m_GPIO_InitTypeDef.GPIO_Pin   = GPIO_Pin_14 | GPIO_Pin_7;
	m_GPIO_InitTypeDef.GPIO_Mode  = GPIO_Mode_Out_PP;	//推挽输出
	m_GPIO_InitTypeDef.GPIO_Speed = GPIO_Speed_2MHz;	//速度2M  
	GPIO_Init(GPIOB,&m_GPIO_InitTypeDef);				//GPIO初始化
		
	m_GPIO_InitTypeDef.GPIO_Pin  = GPIO_Pin_6;
	m_GPIO_InitTypeDef.GPIO_Mode = GPIO_Mode_AIN;
	m_GPIO_InitTypeDef.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(GPIOA,&m_GPIO_InitTypeDef);				//GPIO初始化


	RCC_ADCCLKConfig(RCC_PCLK2_Div2);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);	  // 打开ADC1的APB2时钟
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;  //ADC1和ADC2工作在独立模式
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;		//ADC工作在单通道模式
	ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;	//ADC工作在单次模式
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;	  //转换由软件而不是外部触发启动
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	//ADC数据右对齐
	ADC_InitStructure.ADC_NbrOfChannel = 1;
	ADC_Init(ADC1, &ADC_InitStructure);


	ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 1, ADC_SampleTime_28Cycles5);
	ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);				//开启转换结束中断
	ADC_Cmd(ADC1, ENABLE);			  //使能ADC1转换器
	


	while(1)
	{
		ADC_SoftwareStartConvCmd(ADC1, ENABLE);		 //使能ADC1的软件转换启动功能
		while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC )); //等待转换结束


		if(ADCConvertedValue > 1800)
		{
			GPIO_WriteBit(GPIOB,GPIO_Pin_7, Bit_SET);			//清除GPB_7 点亮LED
		}
		else if(ADCConvertedValue < 50)
		{
			GPIO_WriteBit(GPIOB,GPIO_Pin_14, Bit_SET);
		}
		else
		{
			GPIO_WriteBit(GPIOB,GPIO_Pin_14 | GPIO_Pin_7, Bit_RESET);
		}
	}
}
void ADC1_IRQHandler()
{
	ADCConvertedValue = ADC_GetConversionValue(ADC1);
    GPIO_WriteBit(GPIOB,GPIO_Pin_14, Bit_RESET);			//清除GPB_14 点亮LED
    ADC_ClearITPendingBit(ADC1,ADC_IT_EOC);
}


可以转换,但是不能进入中断,不知道是哪里配置出错





  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是STM32F103 ADC1采样配置的步骤: 1. 配置ADC时钟:首先需要开启ADC1时钟,可以通过RCC_APB2PeriphClockCmd函数实现。例如,如果我们要使用ADC1,需要设置RCC_APB2Periph_ADC1为ENABLE。 2. 配置ADC引脚:需要将ADC1的输入引脚与具体要采样的器件连接起来。可以通过GPIO初始化函数设置相应的引脚为模拟输入模式。 3. 配置ADC模式:需要设置ADC工作模式、采样时间以及转换分辨率等参数。可以使用ADC_Init函数来配置ADC的寄存器。例如,如果想要将ADC1设置为单次转换模式,转换为12位分辨率,采样频率为CyclesPerConversion,可以将ADC_Mode设置为ADC_Mode_Independent,ADC_ScanConvMode设置为DISABLE,ADC_ContinuousConvMode设置为DISABLE,ADC_DataAlign设置为ADC_DataAlign_Right,ADC_Resolution设置为ADC_Resolution_12b,ADC_ExternalTrigConv设置为ADC_ExternalTrigConv_None,ADC_NbrOfChannel设置为1,ADC_SampleTime设置为ADC_SampleTime_xCycles5(xCycles是时钟周期数),ADC_Mode指的是单通道或多通道、正常或注入等不同工作模式,可以根据实际需求进行设置。 4. 配置ADC转换序列:需要将要采样的通道添加到转换序列中。可以使用ADC_RegularChannelConfig函数来设置。例如,如果要将ADC1通道5作为转换序列的第一个通道,可以将ADC_Channel设置为ADC_Channel_5,ADC_SampleTime设置为ADC_SampleTime_xCycles5(xCycles是时钟周期数),ADC_RegularChannelConfig函数设置为ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_xCycles5),第三个参数1是与第一个采样通道关联的采样顺序,在单通道模式下复制为1。 5. 启动转换:只要完成前面的配置,就可以使用ADC_Cmd和ADC_SoftwareStartConv函数启动转换通道。例如,可以使用ADC_SoftwareStartConv(ADC1)函数开始转换,并使用ADC_GetConversionValue(ADC1)函数获得转换值。 6. 获取数据:转换完成后,可以使用ADC_GetConversionValue函数从ADC数据寄存器中读取采样数据。例如,可以使用ADC_GetConversionValue(ADC1)函数获取ADC1的单通道采样结果,可以使用ADC_GetMultiModeConversionValue函数获取多个通道的采样结果。 以上是STM32F103 ADC1采样配置的步骤,根据实际需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值