This repository has been archived on 2025-02-28. You can view files and clone it, but cannot push or open issues or pull requests.
controller-hd/User/system/bsp/adcs.h

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__