/******************************************************************************
版权所有: 深圳**科技有限公司
文件名: 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