driver文件之driver_adc.c

该代码实现了一个ADC驱动,包括GPIO配置和基本的ADC初始化。它提供了对外的接口来获取不同通道的电压值,如电池电压、温度检测等。代码中定义了结构体来存储各通道的ADC值,并有快速和慢速两种获取方式。
摘要由CSDN通过智能技术生成

/******************************************************************************
版权所有:     深圳**科技有限公司   
文件名:    driver_adc.c
作者:      wangdy
创建日期:  2021/5/31
描述:      adc驱动接口 
其它:      
修改历史:  //修改历史记录列表,每条修改记录应包含修改日期、修改者及修改内容简述
            序号    修改时间    修改人  修改内容
            ????    ????/??/??  ??????  参考样式       
******************************************************************************/

/************************************头文件************************************/

#include "driver_adc.h"
#include "yc_adc.h"
#include <string.h>

/*************************************变量*************************************/

_ADC_CHANNEL_VALUE  adc_channel_value = {0};

/*************************************函数*************************************/

/*******************************************************************************
* 名称:        ADC_GPIO_Config       
* 描述:        ADC相关GPIO初始化 
* 输入参数:    无 
* 输出参数:    无   
* 其它:        无   
*******************************************************************************/
static void ADC_GPIO_Config()

    //bat 
    GPIO_Config(PORT_BAT_POWER_CHECK, PIN_BAT_POWER_CHECK, ANALOG);
    //ntc 
    GPIO_Config(PORT_BATTERY_TEMPER_NTC_TEMP_CHECK, PIN_BATTERY_TEMPER_NTC_TEMP_CHECK, ANALOG);  
    //打印头NTC 
    GPIO_Config(PORT_PRINTHEAD_NTC_TEMP_CHECK, PIN_PRINTHEAD_NTC_TEMP_CHECK, ANALOG); 
    //光耦ADC值检测 
    GPIO_Config(PORT_OC_PAPER_CHECK, PIN_OC_PAPER_CHECK, ANALOG); 
}

/*******************************************************************************
* 名称:        ADC_Basic_Config       
* 描述:        ADC 基本初始化 
* 输入参数:    无 
* 输出参数:    无   
* 其它:        无   
*******************************************************************************/
static void ADC_Basic_Config(void)
{
    ADC_InitTypeDef ADCInitStruct;

    //bat
    ADCInitStruct.ADC_Channel = ADC_CHANNEL_BAT_POWER_CHECK;
    ADCInitStruct.ADC_Mode = ADC_GPIO;
    ADC_Init(&ADCInitStruct);
    
    //电池ntc
    ADCInitStruct.ADC_Channel = ADC_CHANNEL_BATTERY_TEMPER_NTC_TEMP_CHECK;
    ADCInitStruct.ADC_Mode = ADC_GPIO;
    ADC_Init(&ADCInitStruct);
    
    //打印头ntc
    ADCInitStruct.ADC_Channel = ADC_CHANNEL_PRINTHEAD_NTC_TEMP_CHECK;
    ADCInitStruct.ADC_Mode = ADC_GPIO;
    ADC_Init(&ADCInitStruct);
    
    //光耦ADC值检测 
    ADCInitStruct.ADC_Channel = ADC_CHANNEL_OC_PAPER_CHECK;
    ADCInitStruct.ADC_Mode = ADC_GPIO;
    ADC_Init(&ADCInitStruct);
}

//===============================对外接口=======================================

/*******************************************************************************
* 名称:        ADC_Configure       
* 描述:        ADC初始化     
* 输入参数:    无 
* 输出参数:    无   
* 其它:        无   
*******************************************************************************/
void ADC_Configure(void)
{
    ADC_GPIO_Config();
    ADC_Basic_Config();
}


/*******************************************************************************
* 名称:        ADC_Basic_Config       
* 描述:        ADC 基本初始化 
* 输入参数:    无 
* 输出参数:    无   
* 其它:        无   
*******************************************************************************/
uint16_t ADC_Get_Value(ADCChannelTypeEnum channel)
{
    switch(channel)
    {
        case ADC_BAT_POWER:
        {
            adc_channel_value.adc_data.Power_Bat_Value = ADC_GetVoltage(ADC_CHANNEL_BAT_POWER_CHECK);
            return adc_channel_value.adc_data.Power_Bat_Value;
            break;
        }
        case ADC_BATTERY_NTC_TEMP:        
        {
            adc_channel_value.adc_data.Battery_NTC_Value = ADC_GetVoltage(ADC_CHANNEL_BATTERY_TEMPER_NTC_TEMP_CHECK);
            return adc_channel_value.adc_data.Battery_NTC_Value;
            break;
        }
        case ADC_PRINTHEAD_NTC_TEMP:    
        {
            adc_channel_value.adc_data.PrintHead_NTC_Value = ADC_GetVoltage(ADC_CHANNEL_PRINTHEAD_NTC_TEMP_CHECK);
            return adc_channel_value.adc_data.PrintHead_NTC_Value;
            break;
        }
        case ADC_OC_PAPER:    
        {
            adc_channel_value.adc_data.OC_Pater_Value = ADC_GetVoltage(ADC_CHANNEL_OC_PAPER_CHECK);
            return adc_channel_value.adc_data.OC_Pater_Value;
            break;
        }
        default:
        {
            return 0;
            break;
        }
    }
}

/*******************************************************************************
* 名称:        ADC_Get_SlowValue       
* 描述:        ADC 获取快速信息 
* 输入参数:    无 
* 输出参数:    无   
* 其它:        无   
*******************************************************************************/
uint16_t ADC_Get_Value_Fast(ADCChannelTypeEnum channel)
{
    switch(channel)
    {
        case ADC_BAT_POWER:
        {
            adc_channel_value.adc_data.Power_Bat_Value = ADC_GetVoltage_Fast(ADC_CHANNEL_BAT_POWER_CHECK);
            return adc_channel_value.adc_data.Power_Bat_Value;
            break;
        }
        case ADC_BATTERY_NTC_TEMP:        
        {
            adc_channel_value.adc_data.Battery_NTC_Value = ADC_GetVoltage_Fast(ADC_CHANNEL_BATTERY_TEMPER_NTC_TEMP_CHECK);
            return adc_channel_value.adc_data.Battery_NTC_Value;
            break;
        }
        case ADC_PRINTHEAD_NTC_TEMP:    
        {
            adc_channel_value.adc_data.PrintHead_NTC_Value = ADC_GetVoltage_Fast(ADC_CHANNEL_PRINTHEAD_NTC_TEMP_CHECK);
            return adc_channel_value.adc_data.PrintHead_NTC_Value;
            break;
        }
        case ADC_OC_PAPER:    
        {
            adc_channel_value.adc_data.OC_Pater_Value = ADC_GetVoltage_Fast(ADC_CHANNEL_OC_PAPER_CHECK);
            return adc_channel_value.adc_data.OC_Pater_Value;
            break;
        }
        default:
        {
            return 0;
            break;
        }
    }
}

以下为.h文件:

/******************************************************************************
版权所有:     深圳**科技有限公司   
文件名:    driver_adc.h
作者:      wangdy
创建日期:  2021/5/31
描述:      adc驱动 
其它:      
修改历史:  //修改历史记录列表,每条修改记录应包含修改日期、修改者及修改内容简述
            序号    修改时间    修改人  修改内容      
******************************************************************************/

/*********************************防止多次编译*********************************/
#ifndef _DRIVER_ADC_H
#define _DRIVER_ADC_H

/************************************头文件************************************/
#include <stdint.h>
#include <stdbool.h>
#include "yc_adc.h"

/************************************宏定义************************************/

#define   ADC_CHANNEL_NUM                                4        


//BAT-CHECK
#define   PIN_BAT_POWER_CHECK                            GPIO_Pin_9
#define   PORT_BAT_POWER_CHECK                            GPIOC
#define   ADC_CHANNEL_BAT_POWER_CHECK                   ADC_CHANNEL_4

//电池温度检测 
#define   PIN_BATTERY_TEMPER_NTC_TEMP_CHECK                GPIO_Pin_6
#define   PORT_BATTERY_TEMPER_NTC_TEMP_CHECK            GPIOC
#define   ADC_CHANNEL_BATTERY_TEMPER_NTC_TEMP_CHECK        ADC_CHANNEL_1

//打印头NTC检测 
#define   PIN_PRINTHEAD_NTC_TEMP_CHECK                    GPIO_Pin_8
#define   PORT_PRINTHEAD_NTC_TEMP_CHECK                    GPIOC
#define   ADC_CHANNEL_PRINTHEAD_NTC_TEMP_CHECK           ADC_CHANNEL_3

//光耦ADC值检测 
#define   PIN_OC_PAPER_CHECK                            GPIO_Pin_7
#define   PORT_OC_PAPER_CHECK                            GPIOC
#define   ADC_CHANNEL_OC_PAPER_CHECK                      ADC_CHANNEL_2


/************************************结构体************************************/

//确定读哪路ADC 
typedef enum
{
    ADC_BAT_POWER,        
    ADC_BATTERY_NTC_TEMP,    
    ADC_PRINTHEAD_NTC_TEMP,
    ADC_OC_PAPER,
}ADCChannelTypeEnum;

#pragma pack(push)
#pragma pack(1)

typedef union
{
    uint16_t  adc_buf[ADC_CHANNEL_NUM];
    
    struct _ADC_CHANNEL_DATA
    {
        uint16_t Power_Bat_Value;                    //电池电压检测 
        uint16_t Battery_NTC_Value;                    //电池ntc温度ad 
        uint16_t PrintHead_NTC_Value;                //打印头温度检测 
        uint16_t OC_Pater_Value;                    //纸张光耦检测 
    }adc_data;
}_ADC_CHANNEL_VALUE;

#pragma pack(pop)


/**********************************可导出变量**********************************/

extern _ADC_CHANNEL_VALUE  adc_channel_value;

/***********************************函数实现***********************************/
void ADC_Configure(void);
uint16_t  ADC_Get_Value(ADCChannelTypeEnum channel);
uint16_t  ADC_Get_Value_Fast(ADCChannelTypeEnum channel);        //获取快慢速信息 

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值