/** * @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__