adc如何获取周期_「STM32」ADC实验

基本概念

  • 通道组

常用库函数:

实验:使用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:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值