找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 917|回复: 0
打印 上一主题 下一主题
收起左侧

STM32 ADC模块

[复制链接]
跳转到指定楼层
楼主
ID:432883 发表于 2018-11-25 15:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "ADC.h"
#include "stm32f10x.h"
#include "stm32f10x_adc.h"
#include "stdio.h"
#include "usart.h"


void ADCx_Init()
{
       
        ADC_InitTypeDef ADC_InitStructure;   //定义ADC结构体
        GPIO_InitTypeDef GPIO_InitStructure;  //定义GPIO结构体
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);  //使能时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
        RCC_ADCCLKConfig(RCC_PCLK2_Div6);                                         //确定分频
       
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;                  //GPIO初始化
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;                  //GPIO初始化
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
       
        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_InitStructure.ADC_NbrOfChannel=1;
        ADC_Init(ADC1,&ADC_InitStructure);
       
        ADC_Cmd(ADC1,ENABLE);           //ADC使能
       
        ADC_ResetCalibration(ADC1);   //ADC校准
        while(ADC_GetResetCalibrationStatus(ADC1));
        ADC_StartCalibration(ADC1);
        while(ADC_GetCalibrationStatus(ADC1));
       
        ADC_SoftwareStartConvCmd(ADC1,ENABLE); //软件触发
}

u16 Get_ADC_Value(u8 ch,u8 times)
{
        u8 t;
        u32 temp_val=0;
        ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);
        for(t=0;t<times;t++)
        {
                ADC_SoftwareStartConvCmd(ADC1,ENABLE); //软件触发
                while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
                temp_val+=ADC_GetConversionValue(ADC1);
                delay_ms(5);
        }
        return temp_val/times;
}

u16 ADC()
{   
        u16 value;
   value=Get_ADC_Value(ADC_Channel_1,20);       
//        float vol;
//        i++;

//        PBout(5)=0;
//        delay_ms(5);
//        PBout(5)=1;
//        delay_ms(5);
//        if(i%5==0)
//        {
//                value=Get_ADC_Value(ADC_Channel_1,20);

//                printf("检测AD值为:%d\r\n",value);
//                vol=(float)value*(3.3/4096);
//                printf("检测电压值为:%.2fV\r\n",vol);
//        }
  return value;
               
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表