101 lines
2.8 KiB
C
101 lines
2.8 KiB
C
/**
|
|
* @file adcs.h
|
|
* @author xxx
|
|
* @date 2023-09-04 15:59:16
|
|
* @brief LL库ADC驱动
|
|
* @copyright Copyright (c) 2023 by xxx, All Rights Reserved.
|
|
*/
|
|
|
|
#ifndef __ADCS_H__
|
|
#define __ADCS_H__
|
|
|
|
#include "lib.h"
|
|
#include "main.h"
|
|
|
|
#define ADC_CHANNEL_MAX 18 // ADC通道最大数量
|
|
typedef enum
|
|
{
|
|
IN0 = BIT0,
|
|
IN1 = BIT1,
|
|
IN2 = BIT2,
|
|
IN3 = BIT3,
|
|
IN4 = BIT4,
|
|
IN5 = BIT5,
|
|
IN6 = BIT6,
|
|
IN7 = BIT7,
|
|
IN8 = BIT8,
|
|
IN9 = BIT9,
|
|
IN10 = BIT10,
|
|
IN11 = BIT11,
|
|
IN12 = BIT12,
|
|
IN13 = BIT13,
|
|
IN14 = BIT14,
|
|
IN15 = BIT15,
|
|
INVREF = BIT16,
|
|
INTEMP = BIT17,
|
|
} adc_num_e; // ADC通道号
|
|
|
|
typedef enum
|
|
{
|
|
ADCS_1,
|
|
ADCS_2,
|
|
ADCS_3,
|
|
ADCS_MAX,
|
|
} adcs_e; // ADC编号
|
|
|
|
typedef union
|
|
{
|
|
uint32_t data;
|
|
struct
|
|
{
|
|
uint32_t in0 : 1;
|
|
uint32_t in1 : 1;
|
|
uint32_t in2 : 1;
|
|
uint32_t in3 : 1;
|
|
uint32_t in4 : 1;
|
|
uint32_t in5 : 1;
|
|
uint32_t in6 : 1;
|
|
uint32_t in7 : 1;
|
|
uint32_t in8 : 1;
|
|
uint32_t in9 : 1;
|
|
uint32_t in10 : 1;
|
|
uint32_t in11 : 1;
|
|
uint32_t in12 : 1;
|
|
uint32_t in13 : 1;
|
|
uint32_t in14 : 1;
|
|
uint32_t in15 : 1;
|
|
uint32_t invref : 1;
|
|
uint32_t intemp : 1;
|
|
};
|
|
} adcs_channels_u; // ADC通道
|
|
|
|
typedef struct
|
|
{
|
|
ADC_TypeDef *adc; // ADC外设
|
|
DMA_TypeDef *dma; // DMA外设
|
|
uint32_t dma_channel; // DMA通道
|
|
adcs_channels_u channels; // ADC通道
|
|
uint32_t ovr_count; // ADC溢出次数
|
|
|
|
uint8_t adc_cct; // 通道单采集次数
|
|
uint8_t adc_chans_count; // 通道数量
|
|
uint16_t adc_sum; // 通道采集次数
|
|
uint16_t *adc_value; // ADC转换结果存储地址
|
|
} adcs_t;
|
|
|
|
extern void adc_init(adcs_e num, ADC_TypeDef *adc, DMA_TypeDef *dma, uint32_t dma_channel, uint8_t adc_cct, uint32_t channels);
|
|
extern void adc_dinit(adcs_e num); // ADC反初始化
|
|
|
|
extern uint16_t adc_result_only_one(adcs_e num, uint8_t chan); // 获取ADC转换结果,只需要第一个值
|
|
extern uint16_t adc_result_median_average(adcs_e num, uint8_t chan); // 中位值平均滤波,获取ADC转换结果
|
|
extern uint16_t adc_result_median(adcs_e num, uint8_t chan); // 中位值滤波,获取ADC转换结果
|
|
extern uint16_t adc_result_average(adcs_e num, uint8_t chan); // 平均值,获取ADC转换结果
|
|
extern uint16_t adc_result_n_average(adcs_e num, uint8_t chan); // N次平均值,获取ADC转换结果
|
|
extern int32_t adc_result_temperature(uint16_t adc_value); // 计算内部温度
|
|
extern int32_t adc_result_value_local(uint16_t adc_value); // 计算内部电压
|
|
|
|
// 中断回调函数
|
|
extern void adc_env_callback(adcs_e num); // ADC回调函数
|
|
extern void adc_dma_callback(adcs_e num); // DMA回调函数
|
|
#endif // __ADCS_H__
|